美文网首页
Learning Docker Part 002 Docker

Learning Docker Part 002 Docker

作者: drfung | 来源:发表于2017-09-20 10:14 被阅读32次

    构建镜像

    Docker提供了两种构建镜像的方法:

    1. docker commit命令
    2. Dockerfile 构建文件

    docker commit

    docker commit包含三个步骤:

    1. 运行容器
    2. 修改容器
    3. 将容器保存为新的镜像
    # 1. 运行docker容器
    root@fbo-virtual-machine:~# docker run -it ubuntu /bin/bash
    # 2. 安装vim
    root@533618aeb4a4:/# apt install vim -y
    # 3. 保存为新镜像
    root@fbo-virtual-machine:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    533618aeb4a4        ubuntu              "/bin/bash"         5 minutes ago       Up 5 minutes                            pensive_curran
    root@fbo-virtual-machine:~# docker commit pensive_curran ubuntu-with-vim
    sha256:63cdf5e493abb21ee80fe1b2509b89d1d9b27cd3d3774eaf793cfbbe6e69f998
    root@fbo-virtual-machine:~# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu-with-vim     latest              63cdf5e493ab        10 seconds ago      217MB
    ubuntu              latest              8b72bba4485f        5 days ago          120MB
    httpd               latest              6b4e03d65aa3        5 days ago          177MB
    centos              latest              328edcd84f1b        6 weeks ago         193MB
    # 4. 用新的镜像启动容器
    root@fbo-virtual-machine:~# docker run -it ubuntu-with-vim /bin/bash
    root@da4b749d2e60:/# which vim
    /usr/bin/vim
    

    虽然docker commit可以创建新的镜像,但是docker并不建议用户通过这种方式构建镜。
    原因如下:

    1. 这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱。
    2. 使用者并不知道镜像是如何创建的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患。

    Dockerfile构造镜像

    # 1. 查看Dockerfile内容及位置
    root@fbo-virtual-machine:~/docker-files# cat Dockerfile 
    FROM ubuntu
    RUN apt-get update && apt-get install -y vim
    root@fbo-virtual-machine:~/docker-files# pwd
    /root/docker-files
    root@fbo-virtual-machine:~/docker-files# ls
    Dockerfile
    # 2. 运行docker build命令, -t 指定新的镜像的名称 .指当前目录 -f 可以指定Dockerfile文件位置
    root@fbo-virtual-machine:~/docker-files# docker build -t ubuntu-with-vim .
    # 3. docker将build context发送给Docker daemon。build context为镜像构建提供所需要的文件和目录。此例子中
    # /root/docker-files/下的所有文件和子目录都会发送Docker Daemon。
    Sending build context to Docker daemon  2.048kB
    # 4. 执行from 将ubuntu做为base镜像,ubuntu镜像id为8b72bba4485f
    Step 1/2 : FROM ubuntu
     ---> 8b72bba4485f
    # 5. 执行RUN 安装vim
    Step 2/2 : RUN apt-get update && apt-get install -y vim
    # 6. 启动id为5e3a66a39881的临时容器
     ---> Running in 5e3a66a39881
    Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
    Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
    Get:3 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [48.9 kB]
    Get:4 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [445 kB]
    Get:5 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
    Get:6 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
    Get:7 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]
    Get:8 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.8 kB]
    Get:9 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [208 kB]
    Get:10 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [2930 B]
    Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
    Get:12 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
    Get:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
    Get:14 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
    Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [218 kB]
    Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [811 kB]
    Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.6 kB]
    Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [683 kB]
    Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [17.5 kB]
    Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [5177 B]
    Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [6236 B]
    Fetched 24.4 MB in 39s (611 kB/s)
    Reading package lists...
    Reading package lists...
    Building dependency tree...
    Reading state information...
    The following additional packages will be installed:
      file libexpat1 libgpm2 libmagic1 libmpdec2 libpython3.5 libpython3.5-minimal
      libpython3.5-stdlib libsqlite3-0 libssl1.0.0 mime-support vim-common
      vim-runtime
    Suggested packages:
      gpm ctags vim-doc vim-scripts vim-gnome-py2 | vim-gtk-py2 | vim-gtk3-py2
      | vim-athena-py2 | vim-nox-py2
    The following NEW packages will be installed:
      file libexpat1 libgpm2 libmagic1 libmpdec2 libpython3.5 libpython3.5-minimal
      libpython3.5-stdlib libsqlite3-0 libssl1.0.0 mime-support vim vim-common
      vim-runtime
    0 upgraded, 14 newly installed, 0 to remove and 2 not upgraded.
    Need to get 12.2 MB of archives.
    After this operation, 58.3 MB of additional disk space will be used.
    Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libgpm2 amd64 1.20.4-6.1 [16.5 kB]
    Get:2 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmagic1 amd64 1:5.25-2ubuntu1 [216 kB]
    Get:3 http://archive.ubuntu.com/ubuntu xenial/main amd64 file amd64 1:5.25-2ubuntu1 [21.2 kB]
    Get:4 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libexpat1 amd64 2.1.0-7ubuntu0.16.04.3 [71.2 kB]
    Get:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmpdec2 amd64 2.4.2-1 [82.6 kB]
    Get:6 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libssl1.0.0 amd64 1.0.2g-1ubuntu4.8 [1081 kB]
    Get:7 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython3.5-minimal amd64 3.5.2-2ubuntu0~16.04.1 [526 kB]
    Get:8 http://archive.ubuntu.com/ubuntu xenial/main amd64 mime-support all 3.59ubuntu1 [31.0 kB]
    Get:9 http://archive.ubuntu.com/ubuntu xenial/main amd64 libsqlite3-0 amd64 3.11.0-1ubuntu1 [396 kB]
    Get:10 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython3.5-stdlib amd64 3.5.2-2ubuntu0~16.04.1 [2130 kB]
    Get:11 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 vim-common amd64 2:7.4.1689-3ubuntu1.2 [103 kB]
    Get:12 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython3.5 amd64 3.5.2-2ubuntu0~16.04.1 [1360 kB]
    Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 vim-runtime all 2:7.4.1689-3ubuntu1.2 [5164 kB]
    Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 vim amd64 2:7.4.1689-3ubuntu1.2 [1036 kB]
    debconf: delaying package configuration, since apt-utils is not installed
    Fetched 12.2 MB in 19s (643 kB/s)
    Selecting previously unselected package libgpm2:amd64.
    (Reading database ... 4768 files and directories currently installed.)
    Preparing to unpack .../libgpm2_1.20.4-6.1_amd64.deb ...
    Unpacking libgpm2:amd64 (1.20.4-6.1) ...
    Selecting previously unselected package libmagic1:amd64.
    Preparing to unpack .../libmagic1_1%3a5.25-2ubuntu1_amd64.deb ...
    Unpacking libmagic1:amd64 (1:5.25-2ubuntu1) ...
    Selecting previously unselected package file.
    Preparing to unpack .../file_1%3a5.25-2ubuntu1_amd64.deb ...
    Unpacking file (1:5.25-2ubuntu1) ...
    Selecting previously unselected package libexpat1:amd64.
    Preparing to unpack .../libexpat1_2.1.0-7ubuntu0.16.04.3_amd64.deb ...
    Unpacking libexpat1:amd64 (2.1.0-7ubuntu0.16.04.3) ...
    Selecting previously unselected package libmpdec2:amd64.
    Preparing to unpack .../libmpdec2_2.4.2-1_amd64.deb ...
    Unpacking libmpdec2:amd64 (2.4.2-1) ...
    Selecting previously unselected package libssl1.0.0:amd64.
    Preparing to unpack .../libssl1.0.0_1.0.2g-1ubuntu4.8_amd64.deb ...
    Unpacking libssl1.0.0:amd64 (1.0.2g-1ubuntu4.8) ...
    Selecting previously unselected package libpython3.5-minimal:amd64.
    Preparing to unpack .../libpython3.5-minimal_3.5.2-2ubuntu0~16.04.1_amd64.deb ...
    Unpacking libpython3.5-minimal:amd64 (3.5.2-2ubuntu0~16.04.1) ...
    Selecting previously unselected package mime-support.
    Preparing to unpack .../mime-support_3.59ubuntu1_all.deb ...
    Unpacking mime-support (3.59ubuntu1) ...
    Selecting previously unselected package libsqlite3-0:amd64.
    Preparing to unpack .../libsqlite3-0_3.11.0-1ubuntu1_amd64.deb ...
    Unpacking libsqlite3-0:amd64 (3.11.0-1ubuntu1) ...
    Selecting previously unselected package libpython3.5-stdlib:amd64.
    Preparing to unpack .../libpython3.5-stdlib_3.5.2-2ubuntu0~16.04.1_amd64.deb ...
    Unpacking libpython3.5-stdlib:amd64 (3.5.2-2ubuntu0~16.04.1) ...
    Selecting previously unselected package vim-common.
    Preparing to unpack .../vim-common_2%3a7.4.1689-3ubuntu1.2_amd64.deb ...
    Unpacking vim-common (2:7.4.1689-3ubuntu1.2) ...
    Selecting previously unselected package libpython3.5:amd64.
    Preparing to unpack .../libpython3.5_3.5.2-2ubuntu0~16.04.1_amd64.deb ...
    Unpacking libpython3.5:amd64 (3.5.2-2ubuntu0~16.04.1) ...
    Selecting previously unselected package vim-runtime.
    Preparing to unpack .../vim-runtime_2%3a7.4.1689-3ubuntu1.2_all.deb ...
    Adding 'diversion of /usr/share/vim/vim74/doc/help.txt to /usr/share/vim/vim74/doc/help.txt.vim-tiny by vim-runtime'
    Adding 'diversion of /usr/share/vim/vim74/doc/tags to /usr/share/vim/vim74/doc/tags.vim-tiny by vim-runtime'
    Unpacking vim-runtime (2:7.4.1689-3ubuntu1.2) ...
    Selecting previously unselected package vim.
    Preparing to unpack .../vim_2%3a7.4.1689-3ubuntu1.2_amd64.deb ...
    Unpacking vim (2:7.4.1689-3ubuntu1.2) ...
    Processing triggers for libc-bin (2.23-0ubuntu9) ...
    Setting up libgpm2:amd64 (1.20.4-6.1) ...
    Setting up libmagic1:amd64 (1:5.25-2ubuntu1) ...
    Setting up file (1:5.25-2ubuntu1) ...
    Setting up libexpat1:amd64 (2.1.0-7ubuntu0.16.04.3) ...
    Setting up libmpdec2:amd64 (2.4.2-1) ...
    Setting up libssl1.0.0:amd64 (1.0.2g-1ubuntu4.8) ...
    debconf: unable to initialize frontend: Dialog
    debconf: (TERM is not set, so the dialog frontend is not usable.)
    debconf: falling back to frontend: Readline
    debconf: unable to initialize frontend: Readline
    debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
    debconf: falling back to frontend: Teletype
    Setting up libpython3.5-minimal:amd64 (3.5.2-2ubuntu0~16.04.1) ...
    Setting up mime-support (3.59ubuntu1) ...
    Setting up libsqlite3-0:amd64 (3.11.0-1ubuntu1) ...
    Setting up libpython3.5-stdlib:amd64 (3.5.2-2ubuntu0~16.04.1) ...
    Setting up vim-common (2:7.4.1689-3ubuntu1.2) ...
    Setting up libpython3.5:amd64 (3.5.2-2ubuntu0~16.04.1) ...
    Setting up vim-runtime (2:7.4.1689-3ubuntu1.2) ...
    Setting up vim (2:7.4.1689-3ubuntu1.2) ...
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode
    Processing triggers for libc-bin (2.23-0ubuntu9) ...
    # 7. 安装成功后,将容器保存为id 4b11a920d1d1的镜像
     ---> 4b11a920d1d1
    # 8. 删除临时容器
    Removing intermediate container 5e3a66a39881
    # 9. 构建成功
    Successfully built 4b11a920d1d1
    Successfully tagged ubuntu-with-vim:latest
    

    docker history会显示镜像的构建历史,也就是Dockerfile的执行过程。

    root@fbo-virtual-machine:~/docker-files# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu-with-vim     latest              4b11a920d1d1        22 minutes ago      217MB
    ubuntu              latest              8b72bba4485f        5 days ago          120MB
    httpd               latest              6b4e03d65aa3        5 days ago          177MB
    centos              latest              328edcd84f1b        6 weeks ago         193MB
    root@fbo-virtual-machine:~/docker-files# docker history ubuntu-with-vim
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    4b11a920d1d1        22 minutes ago      /bin/sh -c apt-get update && apt-get insta...   96.5MB              
    8b72bba4485f        5 days ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
    <missing>           5 days ago          /bin/sh -c mkdir -p /run/systemd && echo '...   7B                  
    <missing>           5 days ago          /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   2.76kB              
    <missing>           5 days ago          /bin/sh -c rm -rf /var/lib/apt/lists/*          0B                  
    <missing>           5 days ago          /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745B                
    <missing>           5 days ago          /bin/sh -c #(nop) ADD file:39d3593ea220e68...   120MB     
    

    镜像的缓存特性

    Docker 会缓存已有的镜像层,构建新的镜像时,如果某层镜像已经存在,就直接使用,无需创建。
    example:

    # 1. 修改Dockerfile,添加一行
    root@fbo-virtual-machine:~/docker-files# cat Dockerfile 
    FROM ubuntu
    RUN apt-get update && apt-get install -y vim
    COPY testfile /
    # 2. 运行docker build,没有全部从新构建镜像,直接调用缓存镜像4b11a920d1d1
    root@fbo-virtual-machine:~/docker-files# docker build -t ubuntu-with-vi-2 .
    Sending build context to Docker daemon   2.56kB
    Step 1/3 : FROM ubuntu
     ---> 8b72bba4485f
    Step 2/3 : RUN apt-get update && apt-get install -y vim
     ---> Using cache
     ---> 4b11a920d1d1
    Step 3/3 : COPY testfile /
     ---> af5a360ab7a9
    Removing intermediate container 4079ecd04817
    Successfully built af5a360ab7a9
    Successfully tagged ubuntu-with-vi-2:latest
    

    如果我们希望在构建镜像时不使用缓存,可以在docker build 命令中加上--no-cache参数。

    Dockerfile 中每一个指令都会创建一个镜像层,上层是依赖于下层的。无论什么时候,只要某一层发生变化,其上面所有层的缓存都会失效。

    也就是说,如果我们改变 Dockerfile 指令的执行顺序,或者修改或添加指令,都会使缓存失效。如上例子,修改COPY和RUN的语句位置,会全新构建镜像。

    除了在构建镜像时使用缓存,Docker在下载镜像时也会使用。example:

    root@fbo-virtual-machine:~/docker-files# docker pull httpd
    Using default tag: latest
    latest: Pulling from library/httpd
    # 这里会提示base镜像已经存在,跳过下载
    aa18ad1a0d33: Already exists 
    2b28e4afdec2: Pull complete 
    802b6cd5ed3b: Pull complete 
    6f2336b7c318: Pull complete 
    d7c441746c9e: Pull complete 
    ba7f19f905f9: Pull complete 
    5c7522be7faf: Pull complete 
    Digest: sha256:a46bd62f5286321ed19875778246f3afe97df5f9e91f0dd369a6ecfa529dbe81
    Status: Downloaded newer image for httpd:latest
    

    调试Dockerfile

    包括 Dockerfile 在内的任何脚本和程序都会出错。有错并不可怕,但必须有办法排查

    # 1. 编写Dockerfile
    root@fbo-virtual-machine:~/docker-files# cat Dockerfile 
    FROM busybox
    RUN touch tmpfile
    run /bin/bash -c echo "continue to build..."
    copy testfile /
    # 2. 执行dokcer build报错
    root@fbo-virtual-machine:~/docker-files# docker build -t image-debug .
    Sending build context to Docker daemon   2.56kB
    Step 1/4 : FROM busybox
    latest: Pulling from library/busybox
    03b1be98f3f9: Pull complete 
    Digest: sha256:99ccecf3da28a93c063d5dddcdf69aeed44826d0db219aabc3d5178d47649dfa
    Status: Downloaded newer image for busybox:latest
     ---> 54511612f1c4
    Step 2/4 : RUN touch tmpfile
     ---> Running in 07f7a9e8f1ea
     ---> 749cc37a2111
    Removing intermediate container 07f7a9e8f1ea
    Step 3/4 : RUN /bin/bash -c echo "continue to build..."
     ---> Running in 5b7d576cc8f6
    /bin/sh: /bin/bash: not found
    The command '/bin/sh -c /bin/bash -c echo "continue to build..."' returned a non-zero code: 127
    # 3. 进入缓存镜像调试
    root@fbo-virtual-machine:~/docker-files# docker run -it 749cc37a2111
    / # /bin/bash -c echo "continue to build..."
    sh: /bin/bash: not found
    / # exit
    

    Dockerfile常用指令

    Dockerfile常用指令

    • FROM - 指定base镜像
    • MAINTAINER - 镜像作者
    • COPY - 将文件从build context复制到镜像。
      • COPY src dest
      • COPY ["src","dest"]
    • ADD - 与COPY类似,不同的是如果src是归档文件(tar、zip、tgz、xz等),文件会自动解压到dest。
    • ENV - 设置环境变量
    • EXPOSE - 指定容器中的进程会监听某个端口
    • VOLUME - 将文件或目录声明为volume
    • WORKDIR - 为后面RUN,CDM,ENTRYPOINT,ADD或COPY是指镜像中的当前工作目录。
    • RUN - 在容器中运行指定命令
    • CMD - 容器启动时运行指定命令,当有多个CMD指令时,只有最有一个生效。CMD可以被docker run之后的参数替换
    • ENTRYPOINT - 设置启动时运行的命令,当有多个ENTRYPOINT指令是,只有最后一个生效。CMD或docker run 之后的参数会被当做参数传递给ENTRYPOINT。
    ## 1. 创建Dockerfile
    root@fbo-virtual-machine:~/docker-files# cat Dockerfile 
    # my dockerfile
    FROM busybox
    MAINTAINER recoba01@163.com
    WORKDIR /testdir
    RUN touch tmpfile1
    COPY ["testfile","."]
    ADD ["fbo.tar.gz", "."]
    ENV WELCOME "You are in my container, welcome!"
    ## 2. 确认工作环境
    root@fbo-virtual-machine:~/docker-files# ls
    Dockerfile  fbo.tar.gz  testfile
    ## 3. 构建my-image镜像
    root@fbo-virtual-machine:~/docker-files# docker build -t my-image .
    Sending build context to Docker daemon  3.584kB
    Step 1/7 : FROM busybox
     ---> 54511612f1c4
    Step 2/7 : MAINTAINER recoba01@163.com
     ---> Running in 345098f14ab3
     ---> 2bf416443eed
    Removing intermediate container 345098f14ab3
    Step 3/7 : WORKDIR /testdir
     ---> eca59be9c015
    Removing intermediate container 3a343c30b0ff
    Step 4/7 : RUN touch tmpfile1
     ---> Running in f9c7f78f2586
     ---> c3ebd76a7ba4
    Removing intermediate container f9c7f78f2586
    Step 5/7 : COPY testfile .
     ---> 8eb505c80d42
    Removing intermediate container 4d22491de73a
    Step 6/7 : ADD fbo.tar.gz .
     ---> 5a5e8200f7a4
    Removing intermediate container bfe0b9e0d6c4
    Step 7/7 : ENV WELCOME "You are in my container, welcome!"
     ---> Running in 83e9ef179ea6
     ---> 809d654b00fc
    Removing intermediate container 83e9ef179ea6
    Successfully built 809d654b00fc
    Successfully tagged my-image:latest
    ## 检查镜像内容
    root@fbo-virtual-machine:~/docker-files# docker run -it my-image
    /testdir # pwd
    /testdir
    /testdir # ls
    fbo       testfile  tmpfile1
    /testdir # echo $WELCOME
    You are in my container, welcome!
    

    RUN & CMD & ENTRYPOINT

    RUN、CMD和ENTRYPOINT功能有些相似,它们有以下区别:

    1. RUN执行命令并创建新的镜像层,RUN常用于安装软件包。
    2. CMD是指容器启动后默认执行的命令及参数,但是CMD能够被docker run后面跟的命令行参数替换。
    3. ENTRYPOINT配置容器启动时运行的命令。

    使用公共镜像

    ## 1. 登录到docker hub
    root@fbo-virtual-machine:~# docker login -u drfung
    Password: 
    Login Succeeded
    
    ## 2. 为镜像打上tag
    root@fbo-virtual-machine:~# docker tag ubuntu drfung/ubuntu:v1
    root@fbo-virtual-machine:~# docker images drfung/ubuntu
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    drfung/ubuntu       v1                  8b72bba4485f        6 days ago          120MB
    ## 3. 上传镜像到docker hub
    root@fbo-virtual-machine:~# docker push drfung/ubuntu
    The push refers to a repository [docker.io/drfung/ubuntu]
    3996d0debc49: Mounted from library/ubuntu 
    cd1d6655b4e4: Mounted from library/ubuntu 
    a76db6d8fac4: Mounted from library/ubuntu 
    ebf3d6975c70: Mounted from library/ubuntu 
    8aa4fcad5eeb: Mounted from library/ubuntu 
    v1: digest: sha256:bb5815009271d6f80a64677b4bb60b799c483e839b4d03c2f7723baabaca03df size: 1357
    

    登录 https://hub.docker.com,在Public Repository 中就可以看到上传的镜像,这个镜像可被其他Docker host下载使用。


    搭建本地 Registry

    -d 后台启动容器
    -p 将容器的5000端口映射到host的5000端口
    -v 将容器/var/lib/registry目录映射到host的/myregistry,用于存放镜像数据

    ## 1. 安装本地registry
    root@fbo-virtual-machine:~# docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
    Unable to find image 'registry:2' locally
    2: Pulling from library/registry
    90f4dba627d6: Pull complete 
    b3e11d7b4f5e: Pull complete 
    1f032f3c8932: Pull complete 
    425585e7aedb: Pull complete 
    f45f535a83d2: Pull complete 
    Digest: sha256:0f8fe61fa337b8ef02217702ba979b47a7d68717d4628f31592ebff85915f3ba
    Status: Downloaded newer image for registry:2
    43a490f2c2ba503f02daade785772334ad9e7df6d405681af7a6844b1a74307d
    ## 2. 打tag
    root@fbo-virtual-machine:~# docker tag drfung/ubuntu:v1 fbo-virtual-machine:5000/drfung/ubuntu:v1
    ## 3. 上传本地镜像
    root@fbo-virtual-machine:~# docker push fbo-virtual-machine:5000/drfung/ubuntu:v1
    The push refers to a repository [fbo-virtual-machine:5000/drfung/ubuntu]
    3996d0debc49: Pushed 
    cd1d6655b4e4: Pushed 
    a76db6d8fac4: Pushed 
    ebf3d6975c70: Pushed 
    8aa4fcad5eeb: Pushed 
    v1: digest: sha256:c166b406b66c122236d1e0e7f1afb50611cec281827c525f9bf9a67d5c8b003f size: 1357
    ## 4. 下载本地镜像
    root@fbo-virtual-machine:~# docker pull fbo-virtual-machine:5000/drfung/ubuntu:v1
    v1: Pulling from drfung/ubuntu
    Digest: sha256:c166b406b66c122236d1e0e7f1afb50611cec281827c525f9bf9a67d5c8b003f
    Status: Downloaded newer image for fbo-virtual-machine:5000/drfung/ubuntu:v1
    

    镜像小结

    • images 显示镜像列表
    • history 显示镜像构造历史
    • commit 从容器创建新镜像
    • build 从Dockerfile创建镜像
    • tag 给镜像打tag
    • pull 从registry下载镜像
    • push 将镜像上传到registry
    • rmi 删除docker host上的镜像,如果一个镜像有多个tag,只有当所有tag被删除时,镜像才会删除。
    • search 搜索docker hub中的镜像

    相关文章

      网友评论

          本文标题:Learning Docker Part 002 Docker

          本文链接:https://www.haomeiwen.com/subject/utbnsxtx.html