zoukankan      html  css  js  c++  java
  • docker入门

    docker简介

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。

    Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在LXC的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机
    一样简单。

    Docker虚拟化有三个概念需要理解,分别镜像、容器、仓库。
    镜像:Docker的镜像其实就是模板,跟我们常见的ISO镜像类似,是一个样板。
    容器:使用镜像常见的应用或者系统,我们称之为一个容器。
    仓库:仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。

    docker引擎架构

    docker引擎是一个C/S结构的应用

    server是一个常驻进程,REST API实现了client和server间的交互协议,CLI实现容器和镜像的管理,为用户提供统一的操作界面。client通过接口与server进程通信实现容器的构建、运行和发布。

    安装docker

    确保centos系统内核版本高于3.10

    [root@localhost ~]# uname -r
    3.10.0-514.el7.x86_64

    安装依赖包

    [root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

    添加docker软件源

    yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo

    更新YUM缓存

    [root@localhost ~]# yum makecache fast

    安装docker ce

    [root@localhost ~]# yum -y install docker-ce

    设置默认国内镜像仓库

    [root@localhost ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

    启动docker

    [root@localhost ~]# systemctl start docker
    [root@localhost ~]# systemctl enable docker

    查看版本

    [root@localhost ~]# docker version
    Client:
     Version:           18.09.0
     API version:       1.39
     Go version:        go1.10.4
     Git commit:        4d60db4
     Built:             Wed Nov  7 00:48:22 2018
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          18.09.0
      API version:      1.39 (minimum version 1.12)
      Go version:       go1.10.4
      Git commit:       4d60db4
      Built:            Wed Nov  7 00:19:08 2018
      OS/Arch:          linux/amd64
      Experimental:     false

     docker镜像管理

    镜像不是一个单一的文件,而是由多层构成。我们可以通过docker history <ID/NAME> 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/<storage-driver>中。容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。Docker使用存储驱动管理镜像每层内容及可读写层的容器层。

    镜像的工作原理:

    当我们启动一个新的容器时,Docker会加载只读镜像,并在其之上添加一个读写层,并将镜像中的目录复制一份到/var/lib/docker/aufs/mnt/容器ID为目录下,我们可以使用chroot进入此目录。如果运行中的容器修改一个已经存在的文件,那么会将该文件从下面的只读层复制到读写层,只读层的这个文件就会覆盖,但还存在,这就实现了文件系统隔离,当删除容器后,读写层的数据将会删除,只读镜像不变。

    镜像从哪里来?

    Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
    地址:https://hub.docker.com/explore
    配置镜像加速器:https://www.daocloud.io/mirror
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

    镜像常用命令

    ls    列出镜像
    build  构建镜像来自dockerfile
    history 查看镜像历史 
    inspect 显示一个或多个镜像详细信息
    pull    从镜像仓库拉取镜像
    push    推送一个镜像到镜像仓库
    rm     移除镜像
    prune    移除未使用的镜像,没有被标记或被任何容器引用的。
    tag    创建一个引用源镜像标记目标镜像
    export  导出容器文件系统到tar归档文件
    import  导入容器文件系统tar归档文件创建镜像
    save    保存一个或多个镜像到tar归档文件
    load    加载镜像来自tar归档或标准输出

    从docker仓库搜索镜像

    [root@localhost ~]# docker search nginx

    获取镜像

    [root@localhost ~]# docker pull nginx

    查看镜像

    [root@localhost ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              62f816a209e6        13 days ago         109MB

    查看镜像的历史分层

    [root@localhost ~]# docker  history nginx

    导出一个镜像

    [root@localhost ~]# docker image save nginx > nginx.tar

    导入一个镜像

    [root@localhost ~]# docker load < nginx.tar

    删除镜像

    [root@localhost ~]# docker image rm nginx

    创建镜像的方法有以下3种方式:
    (1)基于已有镜像的容器创建
    (2)基于本地模板导入
    (3)基于Dockerfile创建

    容器管理

    Docker容器,可以理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而Docker容器所占用的文件系统资源,则通过Docker镜像的镜像层文件来提供。 基于每个镜像的json文件,Docker可以通过解析Docker镜像的json的文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎么样的环境变量,Docker守护进程实现了静态向动态的转变。

    当使用docker run来创建并启动容器时,Docker在后台运行的标准操作:
    (1)检查本地是否存在指定的镜像centos,不存在就从公有仓库下载
    (2)利用镜像创建并启动一个容器
    (3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    (4)从宿主主机配置的桥接网络接口中桥接一个虚拟接口到容器中去
    (5)从地址池配置一个IP地址给容器
    (6)执行用户指定的应用程序
    (7)执行完毕后,容器被终止

    创建容器常用选项

    选项            描述
    -i, –interactive    交互式
    -t, –tty         分配一个伪终端
    -d, –detach       运行容器到后台
    -e, –env         设置环境变量
    -p, –publish list    发布容器端口到主机
    -P, –publish-all    发布容器所有EXPOSE的端口到宿主机随机端口
    –name string      指定容器名称
    -h, –hostname     设置容器主机名
    –ip string       指定容器IP,只能用于自定义网络
    –network        连接容器到一个网络
    –mount mount      将文件系统附加到容器
    -v, –volume list   绑定挂载一个卷
    –restart string   容器退出时重启策略,默认no,可选值:[always|on-failure]

    管理容器的常用命令

    选项          描述
    ls          列出容器
    inspect      查看一个或多个容器详细信息
    exec        在运行容器中执行命令
    commit      创建一个新镜像来自一个容器
    cp        拷贝文件/文件夹到一个容器
    logs        获取一个容器日志
    port        列出或指定容器端口映射
    top        显示一个容器运行的进程
    stats      显示容器资源使用统计
    stop/start    停止/启动一个或多个容器
    rm        删除一个或多个容器

    创建容器

    [root@localhost ~]# docker create -it nginx
    Unable to find image 'nginx:latest' locally
    latest: Pulling from library/nginx
    f17d81b4b692: Pull complete 
    82dca86e04c3: Pull complete 
    046ccb106982: Pull complete 
    Digest: sha256:d59a1aa7866258751a261bae525a1842c7ff0662d4f34a355d5f36826abc0341
    Status: Downloaded newer image for nginx:latest
    f51d7ef037f53073825efda4ad76d99a3041328c2569ccf337388c72f2f2bd4a
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    f51d7ef037f5        nginx               "nginx -g 'daemon of…"   8 seconds ago       Created                                 competent_kalam
    [root@localhost ~]# docker start f51d7ef037f5  #启动容器
    f51d7ef037f5
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
    f51d7ef037f5        nginx               "nginx -g 'daemon of…"   About a minute ago   Up 3 seconds        80/tcp              competent_kalam
    [root@localhost ~]# docker stop f51d7ef037f5  #终止容器
    [root@localhost ~]# docker inspect f51d7ef037f5 #查看容器详细信息

    进入容器

    [root@localhost ~]# docker exec -it f51d7ef037f5 /bin/bash

    删除容器

    [root@localhost ~]# docker rm f51d7ef037f5

     端口映射

    [root@localhost ~]# docker run -d -p 80:80 --name=nginx -h nginx_web nginx

    查看容器日志

    [root@localhost ~]# docker logs nginx

    容器资源限制

    选项                  描述
    -m,–memory           容器可以使用的最大内存量
    –memory-swap          允许交换到磁盘的内存量
    –memory-swappiness=<0-100>  容器使用SWAP分区交换的百分比(0-100,默认为-1)
    –oom-kill-disable       禁用OOM Killer
    -cpus              可以使用的CPU数量
    –cpuset-cpus          限制容器使用特定的CPU核心,如(0-3, 0,1)
    –cpu-shares           CPU共享(相对权重)

    [root@localhost ~]# docker run -d -m 1G --cpus=2 nginx
    c6bc3d89ea124fc902f47a8e03c25dba25c849160b05a198664b1dd63bc781fd
    [root@localhost ~]# docker stats c6bc3d89ea12

    CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
    c6bc3d89ea12 amazing_easley 0.00% 3.504MiB / 1GiB 0.34% 648B / 0B 0B / 0B 2

    CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
    c6bc3d89ea12 amazing_easley 0.00% 3.504MiB / 1GiB 0.34% 648B / 0B 0B / 0B 2

  • 相关阅读:
    Liferay7 BPM门户开发之1:Liferay7开发环境准备
    Liferay-Activiti 企业特性功能介绍 (新版Liferay7)
    Liferay-Activiti 功能介绍 (新版Liferay7基本特性)
    Java入门开发POI读取导入Excel文件
    JAVA动态代理和方法拦截(使用CGLib实现AOP、方法拦截、委托)
    JFrame、JPanel 、Layout开发的简单例子
    Smart/400开发上手5: Cobol开发标准
    Smart/400开发上手4: 调试Cobol代码 (DEBUG with QBATCH)
    Netbeans Platform 工程,免安装JDK
    网络延迟测试结果
  • 原文地址:https://www.cnblogs.com/yuezhimi/p/9987372.html
Copyright © 2011-2022 走看看