美文网首页
docker镜像文件的制作,并实现nginx的镜像制作

docker镜像文件的制作,并实现nginx的镜像制作

作者: 任总 | 来源:发表于2019-02-20 23:41 被阅读2次

    一、基于容器制作镜像

    • 在容器中完成操作后制作;

    • 制作命令:docker commit

    格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    --author, -a 作者信息
    --pause, -p 制作时候暂停
    --message, -m 创建时候注释
    --change, -c 创建时应用dockerfile中的命令

    示例:制作一个带有httpd服务的镜像
    [root@node-65 ~]# docker run --name b1 -it  docker.io/busybox
    
    #创建网页目录
    / # mkdir /data/html -pv
    created directory: '/data/'
    created directory: '/data/html'
    / # vi /data/html/index.html
    <h1>BUSY BOX SERVER<h1>
    
    #启动httpd服务
    / # httpd -h /data/html/
    / # netstat -tnl
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       
    tcp        0      0 :::80                   :::*                    LISTEN      
    
    #基于bi容器制作镜像
    [root@node-65 ~]# docker commit -p -a "hehe <hehe@hehe.com>" b1 docker.io/hehe/bbox:v0.1.1-httpd
    或者使用-c选项指定网页路径
    [root@node-65 ~]# docker commit -p -a "hehe <hehe@hehe.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' b1 docker.io/hehe/bbox:v0.1.2-httpd
    
    
    #查询本地镜像
    [root@node-65 ~]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    docker.io/hehe/bbox   v0.1.1-httpd        786bd69b3a86        49 seconds ago      1.15 MB
    docker.io/busybox     latest              758ec7f3a1ee        3 days ago          1.15 MB
    
    
    #使用生成的镜像创建一个容器
    [root@node-65 ~]# docker run --name h1 -d docker.io/hehe/bbox:v0.1.1-httpd /bin/httpd -f -h /data/html
    如果指定网页路径使用:
    [root@node-65 ~]# docker run --name h1 -d docker.io/hehe/bbox:v0.1.1-httpd
    
    #查询h1容器ip等信息
    [root@node-65 ~]# docker inspect h1
    .............
      "IPAddress": "172.17.0.3"
    
    #使用curl命令,测试容器启动,http服务是否一起启动
    [root@node-65 ~]# curl http://172.17.0.3
    <h1>BUSY BOX SERVER<h1>
    
    
    示例2:配置一个nginx镜像,启动容器使nginx工作在前台
    #下载centos镜像
    [root@node-65 ~]# docker pull docker.io/centos
    
    #使用centos镜像启动容器
    [root@node-65 ~]# docker run --name c1  -it docker.io/centos
    
    #报错
    WARNING: IPv4 forwarding is disabled. Networking will not work.   
    
    #打开宿主机的核心转发功能
    net.ipv4.ip_forward=1 >> /usr/lib/sysctl.d/00-system.conf
    #重启网络
    
    #再次使用centos镜像启动容器
    [root@node-65 ~]# docker run --name c2  -it docker.io/centos
    
    
    #安装epel源和nginx
    [root@f68abe0c2601 /]# yum install epel-release -y
    root@f68abe0c2601 /]# yum install nginx -y 
    
    #配置nginx文件,添加
    [root@f68abe0c2601 /]# vi /etc/nginx/nginx.conf
    ...........
    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    daemon off;    #添加,使nginx工作在前台
    
    #测试启动nginx
    [root@f68abe0c2601 /]# nginx  #此时光标停止,证明nginx已经工作在前台了
    
    #制作镜像
    [root@node-65 ~]#  docker commit -p -a "hehe <hehe@hehe.com>" -c 'CMD ["/usr/sbin/nginx"]' c2 docker.io/hehe/centos:v0.1.0-nginx
    sha256:6aadb46a288a0907fb2dd4b395ad066c00cbd52b9f84051b6245f269e0404c5a
    [root@node-65 ~]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
    docker.io/hehe/centos   v0.1.0-nginx        6aadb46a288a        46 seconds ago      395 MB
    
    ##使用生成的镜像创建一个容器,-d运行在后台
    [root@node-65 ~]# docker run --name h2 -d docker.io/hehe/centos:v0.1.0-nginx
    20b666c4a0aa6b1ef561c66606cf94587b3fc1535131cb3e13ddb3efee28cb17
    [root@node-65 ~]# docker ps
    CONTAINER ID        IMAGE                                COMMAND             CREATED             STATUS              PORTS               NAMES
    20b666c4a0aa        docker.io/hehe/centos:v0.1.0-nginx   "/usr/sbin/nginx"   15 seconds ago      Up 14 seconds                           h2
    
    #查询容器ip信息
    [root@node-65 ~]# docker inspect
    ........
    "IPAddress": "172.17.0.3",
    
    #测试nginx
    [root@node-65 ~]# curl http://172.17.0.3
    nginx测试页信息
    .........
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    ..........
    

    二、 基于镜像文件Dockerfile制作

    • Dockerfile是使用源代码构建docker的镜像,编辑一个Dockerfile,而后根据此文件制作;
       * docker可以自动通过读取Dockerfile中的指令,自动构建镜像。
      • Dockerfile是一个文本文档包含所有用户的命令,可以在命令行上调用组建一个镜像。
      • 使用docker build命令的用户可以读取docker file中的连续指令,自动构建一个镜像。

    1、制作格式

    格式
    • 指令有次序,第一个指令必须是'FROM',基于那个base image(基础镜像)制作。
          # Comment       #首行注释信息
          INSTRUCTION arguments   #指令一般使用大写字母
    
    环境变量ENV
    • 设置变量,在容器启动时变量传递到容器中选项,使容器适用于多种环境应用。
    • 变量格式:使用syntax语法格式,支持bash修饰符
    #变量格式
    $variable_name or ${variable_name}
    
    #判断
    ${variable:-word}   #variable变量非空且有值,就用本身的值,否则就赋值为word(给变量设置默认值)
    ${variable:+word}   #variable变量非空且有值,就赋值为word,如果无值则不赋值
    
    .dockerignore路径使用
    • .dockerignore目录一般放在构建根目录目录中,作用是存放不被打包到镜像中的文件。
    • 构建镜像时,首先查询 并排除.dockerignore目录中的文件,然后打包镜像,这里支持全局通配符使用,例如“*”号。

    2、制作指令

    FROM
    • FROM指令是最重的一个且必须为Dockerfile文件开篇的第一个非注释行,用于为映像文件构建过程指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境。
    • 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build会在docker主机上查找指定的镜像文件,在其不存在时,则会从Docker Hub Registry上拉取所需的镜像文件。
    • 如果找不到指定的镜像文件,docker build会返回一个错误信息

    Syntax语法格式
    FROM <image>[:<tag>] 或
    FROM <image>@<digest>
    <image>:指定作为base image的名称;
    <tag>:base image的标签,为可选项,省略时默认为latest;

    MAINTANIER
    • 用于让镜像制作者提供本人的详细信息
    • Dockerfile并不限制MAINTAINER指令可在出现的位置,但推荐将其放置于FROM指令之后

    Syntax语法格式
    MAINTAINER <authtor's detail>
    <author's detail>可是任何文本信息,但约定俗成地使用作者名称及邮件地址

    COPY
    • 用于从Docker主机复制文件至创建的新映像文件

    Syntax语法
    COPY <src> ... <dest> 或
    COPY ["<src>",... "<dest>"]
    <src>:要复制的源文件或目录,支持使用通配符
    <dest>:目标路径,即正在创建的image的文件系统路径;建议为<dest>使用绝对路径,否则,COPY指定则以WORKDIR为其起始路径;
    注意:在路径中有空白字符时,通常使用第二种格式

    文件复制准则
    • <src>必须是build上下文中的路径,不能是其父目录中的文件
    • 如果<src>是目录,则其内部文件或子目录会被递归复制,但<src>目录自身不会被复制
    • 如果指定了多个<src>,或在<src>中使用了通配符,则<dest>必须是一个目录,且必须以/结尾
    • 如果<dest>事先不存在,它将会被自动创建,这包括其父目录路径
      示例:
    #查看已有镜像
    [root@node-65 ~]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
    .........
    docker.io/busybox       latest              758ec7f3a1ee        6 days ago          1.15 MB
    ........
    
    #创建工作目录
    [root@node-65 ~]# mkdir bbox
    [root@node-65 ~]# cd bbox/
    
    #编辑要拷贝的文件
    [root@node-65 bbox]# vim index.html
    
    #编辑dockerfile文件
    [root@node-65 bbox]# vim  dockerfile
    FROM busybox:latest     #基于那个镜像
    MAINTAINER "hehe <hehe@hehe.com>"       #作者信息
    COPY index.html /data/html/     #执行命令,目标文件目录不存在会自动创建
    COPY   data  /data/     #当复制目录时注意,只递归复制data目录下所有文件,不复制data目录本身,/data/为容器中自动创建目录。
    
    #构建镜像
    [root@node-65 bbox]# docker build ./ -t docker.io/busybox:v0.2.0    #指明构建的根目录,有dockerfile的就是构建根目录,-t指明tag标签
    
    Sending build context to Docker daemon 3.072 kB
    Step 1/3 : FROM busybox:latest     #执行指令第一行,构建第一层镜像
     ---> 758ec7f3a1ee
    Step 2/3 : MAINTAINER "hehe <hehe@hehe.com>"      #执行指令第二行,构建第二层镜像
     ---> Running in f5fc881f9f93
     ---> b3e8146d6485
    Removing intermediate container f5fc881f9f93
    Step 3/3 : COPY index.html /data/html/ #执行指令第三行,构建第三层镜像 6e71f53ff091
    Removing intermediate container 03f483f87c98
    Successfully built 6e71f53ff091  #构建成功
      
    #查询镜像
     [root@node-65 bbox]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
    docker.io/busybox       v0.2.0              6e71f53ff091        16 minutes a                         
    
    ADD
    • ADD指令类似于COPY指令,ADD支持使用TAR文件和URL路径

    Syntax语法格式
    ADD <src> ... <dest> 或
    ADD ["<src>",... "<dest>"]

    操作准则
    • 同COPY指令
    • 如果<src>为URL且<dest>不以/结尾,则<src>指定的文件将被下载并直接被创建为<dest>;如果<dest>以/结尾,则文件名URL指定的文件将被直接下载并保存为<dest>/<filename>
    • 如果<src>是一个本地系统上的压缩格式的tar文件,它将被展开为一个目录
      ,其行为类似于“tar -x”命令;然而,通过URL获取到的tar文件将不会自动
      展开;
    • 如果<src>有多个,或其间接或直接使用了通配符,则<dest>必须是一个以/结尾的目录路径;如果<dest>不以/结尾,则其被视作一个普通文件,<src>的内容将被直接写入到<dest>;
      示例:
    #编辑dockerfile文件
    [root@node-65 bbox]# vim  dockerfile
    FROM busybox:latest     #基于那个镜像
    MAINTAINER "hehe <hehe@hehe.com>"       #作者信息
    ADD http://120.52.51.15/nginx.org/download/nginx-1.15.8.tar.gz /usr/src/    #指明下路径,下载到容器的那个目录下
    
    #构建镜像
    [root@node-65 bbox]# docker build ./ -t docker.io/busybox:v0.2.1
    
    Sending build context to Docker daemon 3.072 kB
    Step 1/3 : FROM busybox:latest
     ---> 758ec7f3a1ee
    Step 2/3 : MAINTAINER "hehe <hehe@hehe.com>"
     ---> Using cache
     ---> b3e8146d6485
    Step 3/3 : ADD http://120.52.51.15/nginx.org/download/nginx-1.15.8.tar.gz /usr/src/
    Downloading 1.028 MB/1.028 MB         #第三行执行已下载
     ---> 089314c3ad7e
    Removing intermediate container 7ae8d8e836e0
    Successfully built 089314c3ad7e       #构建完成
    
    #查询镜像
    [root@node-65 bbox]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED              SIZE
    docker.io/busybox       v0.2.1              089314c3ad7e        About a minu
    
    
    WORKDIR
    • 用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和
      ADD指定设定工作目录

    Syntax语法格式

    WORKDIR <dirpath>

    • 在Dockerfile文件中,WORKDIR指令可出现多次,其路径也可以为相对路径,不过其是相对此前一个WORKDIR指令指定的路径
    • 另外,WORKDIR也可调用由ENV指定定义的变量
    例如
    l WORKDIR /var/log
    l WORKDIR $STATEPATH
    
    VOLUME
    • 用于在image中创建一个挂载点目录,以挂载Docker host上的卷或
      其它容器上的卷

    Syntax语法
    VOLUME <mountpoint> 或
    VOLUME ["<mountpoint>"] 多个卷由中括号括起来中间逗号隔开

    • 如果挂载点目录路径下此前在文件存在,docker run命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中
      示例:
    #编辑dockerfile文件
    [root@node-65 bbox]# vim  dockerfile
    FROM busybox:latest     #基于那个镜像
    MAINTAINER "hehe <hehe@hehe.com>"       #作者信息
    ADD http://120.52.51.15/nginx.org/download/nginx-1.15.8.tar.gz /usr/src/   #指明下路径,下载到容器的那个目录下
    
     VOLUME  /data/html/  #指明容器中的挂载路径,宿主机对应路径有docker管理生成
    
    
    EXPOSE
    • 用于为容器打开指定要监听的端口以实现与外部通信

    Syntax语法
    EXPOSE <port>[/<protocol>] [<port>[/<protocol>] ...]

    • <protocol>用于指定传输层协议,可为tcp或udp二者之一,默认为TCP协议
      EXPOSE指令可一次指定多个端口,例如
    #编辑dockerfile文件
    [root@node-65 bbox]# vim  dockerfile
    FROM busybox:latest     #基于那个镜像
    MAINTAINER "hehe <hehe@hehe.com>"       #作者信息
    ADD http://120.52.51.15/nginx.org/download/nginx-1.15.8.tar.gz /usr/src/   #指明下路径,下载到容器的那个目录下
    
     VOLUME  /data/html/  #指明容器中的挂载路径,宿主机对应路径有docker管理生成
    
     EXPOSE 80/tcp    #暴露80端口
    
    ENV
    • 用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其它指令(如ENV、ADD、COPY等)所调用
    • 调用格式为variable_name或{variable_name}

    Syntax语法
    ENV <key> <value> 或
    ENV <key>=<value> ...

    • 第一种格式中,<key>之后的所有内容均会被视作其<value>的组成部分
      ,因此,一次只能设置一个变量;

    • 第二种格式可用一次设置多个变量,每个变量为一个"<key>=<value>"的
      键值对,如果<value>中包含空格,可以以反斜线()进行转义,也可通过
      对<value>加引号进行标识;另外,反斜线也可用于续行;

    • 定义多个变量时,建议使用第二种方式,以便在同一层中完成所有功能
      例如:

    #编辑dockerfile文件
    [root@node-65 bbox]# vim  dockerfile
    FROM busybox:latest     #基于那个镜像
    MAINTAINER "hehe <hehe@hehe.com>"       #作者信息
    
    ENV nginx_file http://120.52.51.15/nginx.org/download/nginx-1.15.8.tar.gz   #设定nginx_file变量值
    
    ADD ${nginx_file}  /usr/src/   #调用变量,下载到容器的那个目录下
    
    RUN
    • 用于指定docker build过程中运行的程序,其可以是任何命令

    Syntax语法
    RUN <command> 或
    RUN ["<executable>", "<param1>", "<param2>"]

    • 第一种格式中,<command>通常是一个shell命令,且以“/bin/sh -c”来运行它。
    • 第二种语法格式中的参数是一个JSON格式的数组,其中<executable>为要运行的命令,后面的<paramN>为传递给命令的选项或参数;然而,此种格式指定的命令不会以“/bin/sh -c”来发起,因此常见的shell操作如变量替换以及通配符(?,*等)替换将不会进行;不过,如果要运行的命令依赖于此shell特性的话,可以将其替换为类似下面的格式。
    #编辑dockerfile文件
    [root@node-65 bbox]# vim  dockerfile
    FROM busybox:latest     #基于那个镜像
    MAINTAINER "hehe <hehe@hehe.com>"       #作者信息
    
    RUN /bin/adduser -D myuser && \
            /bin/mkdir   /tmp/testdir   #添加一个myuser用户,并创建目录
    
    CMD
    • 类似于RUN指令,CMD指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同
    • RUN指令运行于映像文件构建过程中,而CMD指令运行于基于Dockerfile
      构建出的新映像文件启动一个容器时
    • CMD指令的首要目的在于为启动的容器指定默认要运行的程序,且其运
      行结束后,容器也将终止;不过,CMD指定的命令其可以被docker run的
      命令行选项所覆盖
    • 在Dockerfile中可以存在多个CMD指令,但仅最后一个会生效

    Syntax语法格式
    CMD <command> 或
    CMD [“<executable>”, “<param1>”, “<param2>”] 或
    CMD ["<param1>","<param2>"]

    • 前两种语法格式的意义同RUN
    • 第三种则用于为ENTRYPOINT指令提供默认参数
    ENTRYPOINT
    • 类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序
    • 与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序
    • 不过,docker run命令的--entrypoint选项的参数可覆盖ENTRYPOINT指令
      指定的程序

    Syntax语法格式
    ENTRYPOINT <command>
    ENTRYPOINT ["<executable>", "<param1>", "<param2>"]

    • docker run命令传入的命令参数会覆盖CMD指令的内容并且附加到
      ENTRYPOINT命令最后做为其参数使用
    • Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后
      一个会生效
    USER
    • 用于指定运行image时的或运行Dockerfile中任何RUN、CMD或
      ENTRYPOINT指令指定的程序时的用户名或UID
    • 默认情况下,container的运行身份为root用户

    Syntax语法格式
    USER <UID>|<UserName>

    • 需要注意的是,<UID>可以为任意数字,但实践中其必须为/etc/passwd中
      某用户的有效UID,否则,docker run命令将运行失败
    ONBUILD
    • 用于在Dockerfile中定义一个触发器
    • Dockerfile用于build映像文件,此映像文件亦可作为base image被
      另一个Dockerfile用作FROM指令的参数,并以之构建新的映像文件
    • 在后面的这个Dockerfile中的FROM指令在build过程中被执行时,将会“触发”创建其base image的Dockerfile文件中的ONBUILD指令定义的触发器

    Syntax语法格式
    ONBUILD <INSTRUCTION>

    • 尽管任何指令都可注册成为触发器指令,但ONBUILD不能自我嵌套,且不会触发FROM和MAINTAINER指令
    • 使用包含ONBUILD指令的Dockerfile构建的镜像应该使用特殊的标签,例如
      ruby:2.0-onbuild
    • 在ONBUILD指令中使用ADD或COPY指令应该格外小心,因为新构建过程的上下文在缺少指定的源文件时会失败
    #编辑dockerfile文件
    [root@node-65 bbox]# vim  dockerfile
    FROM busybox:latest     #基于那个镜像
    MAINTAINER "hehe <hehe@hehe.com>"       #作者信息
    
    ONBUILD  RUN /bin/adduser -D myuser  #当使用这个镜像做基础镜像时候,触发执行命令,自动添加一个myuser用户
    
    示例使用dockerfile文件制作nginx的镜像:
    #创建工作目录
    [root@node-65 ~]# mkdir nginx
    
    #创建nginx测试页
    [root@node-65 ~]# vim index.html
    <h1> nginx test page </h1>
    
    [root@node-65 nginx]# vim dockerfile 
    
    FROM centos:latest         #基准镜像
    MAINTAINER "hehe <hehe@hehe.com>"   #作者信息
    
    WORKDIR /usr/local/src/      #工作目录
    ENV NG_VERSION nginx-1.15.8  #定义环境变量
    
    RUN yum -y install epel-release     #安装epel仓库
    RUN yum -y install wget  && wget http://120.52.51.15/nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz   #下载nginx文件并解压
    
     #安装编译依赖包
    RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel  libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data
    RUN yum clean all  #清理仓库
    RUN useradd -M -s /sbin/nologin nginx   #创建nginx用户
    WORKDIR /usr/local/src/$NG_VERSION   #切换工作目录
    
    #编译安装nginx
    RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio  --with-http_ssl_module  --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_module    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degradation_module   --with-http_stub_status_module && make && make install
    
    ADD index.html /usr/local/nginx/html   #复制测试页面到容器中
    VOLUME  /usr/local/nginx/html            #设置容器中要挂在到宿主机的目录
    ENV PATH /usr/local/nginx/sbin:$PATH #设置sbin环境变量
    
    EXPOSE 80/tcp                              #暴露80端口
    ENTRYPOINT ["nginx"]                  
    CMD ["-g","daemon off;"]
    #当ENTRYPOINT和CMD连用时,CMD的命令是ENTRYPOINT命令的参数,两者连用相当于nginx -g "daemon off;"而当一起连用的时候命令格式最好一致(这里选择的都是json格式的是成功的,如果都是sh模式可以试一下)
    
    
    #构建镜像
    [root@node-65 nginx]# docker build ./ -t docker.io/centos-nginx:v0.6.4
    
    #根据构建的镜像运行容器
    [root@node-65 nginx]#  docker run --name h17 -d -p82:80  docker.io/centos-nginx:v0.6.4
    a0657540fc0edc1e57e2fb494af5714f14242a4cf18bb076b4cb30099f45b46e
    
    
    #查看容器
    [root@node-65 nginx]# docker ps 
    CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                NAMES
    a0657540fc0e        docker.io/centos-nginx:v0.6.4   "nginx -g 'daemon ..."   8 minutes ago       Up 8 minutes        0.0.0.0:82->80/tcp   h17
    
    #查看卷挂载信息
    [root@node-65 nginx]#  docker  inspect -f "{{.Mounts}}" h17
    [{volume 2f4e45badaa0c21bc9211ebbb2c44c6f68d3c19b36facf74b3d9ac6be0775d64 /var/lib/docker/volumes/2f4e45badaa0c21bc9211ebbb2c44c6f68d3c19b36facf74b3d9ac6be0775d64/_data /usr/local/nginx/html local  true }]
    
    
    容器测试页面
    #修改宿主机挂载目录
    [root@node-65]# vim /var/lib/docker/volumes/2f4e45badaa0c21bc9211ebbb2c44c6f68d3c19b36facf74b3d9ac6be0775d64/_data/index.html 
    
    <h1> nginx test page </h1>
    <h1> HELLO DOCKER </h1>
    
    
    容器测试页面也随之更改

    三、将镜像文件导出为tar文件

    • 将一个或多个图像保存到一个tar存档,此方式不通过上传dockhut分发镜像,通过拷贝tar存档,实现快速分发镜像。

    格式:docker save [OPTIONS] IMAGE [IMAGE...]

    [root@node-65 ~]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
    docker.io/hehe/centos   v0.1.0-nginx        6aadb46a288a        23 minutes ago      395 MB
    
    #镜像保存到本地
    [root@node-65 ~]# docker save -o /root/centos-v0.1.0-nginx.tar 6aadb46a288a 
    
    [root@node-65 ~]# ll
    total 747852
    -rw-------. 1 root root      1233 Sep 25 19:45 anaconda-ks.cfg
    -rw-------  1 root root 406230016 Dec 30 11:14 centos-v0.1.0-nginx.tar
    
    

    四、从tar文件导入镜像

    docker load从tar存档文件读取

    格式:docker load [OPTIONS]

    --input, -i 从tar存档文件读取,而不是STDIN

    --quiet, -q false 工作在静默模式,不输出操作信息

    [root@node-65 ~]# docker load -i /root/centos-v0.1.0-nginx.tar 
    

    参考链接:https://blog.csdn.net/wuapeng/article/details/80974417

    相关文章

      网友评论

          本文标题:docker镜像文件的制作,并实现nginx的镜像制作

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