Docker学习入门(4)

1、Dockerfile指令

(1)指令格式    ①注释  #Comment

          ②指令  INSTRUCTION argument

(2)第一个Dockerfile             

①FROM    FROM <image>  或    FROM <image>:<tag>    必须是一个存在的镜像,基础镜像,必须是第一条非注释的指令

②MAINTAINER    MAINTAINER <name>   指定镜像的作者信息,包含镜像的所有者和联系信息

③RUN    指定当前镜像中运行的命令

    RUN <command> (shhell 模式)

       /bin/sh -c command

    RUN ["executable", "param1", "param2"]  (exec模式)

       RUN["/bin/bash", "-c", "echo hello"]

④EXPOSE   EXPOSE <port> [<port>...]   指定运行该镜像的容器使用的端口

(3)其他指令

①CMD   容器运行时执行,区别于RUN指令(在镜像构建过程中)

     CMD <command>  param1 param2  (shhell 模式)

     CMD ["executable", "param1", "param2"]  (exec模式)

     CMD ["param1", "param2"] (作为 ENTERYPOINT 指令的默认参数)

                

利用该Dockerfile构建镜像,如下


利用构建出的镜像启动一个容器


如果在运行容器时指定运行的命令如下,则会覆盖CMD指令中的命令,如下



②ENTERYPOINT    ENTERYPOINT ["executable", "param1", "param2"] (exec模式)

          ENTERYPOINT command param1 param2 (shell模式)

        与CMD指令类似,不同的是:默认在容器启动时指定得命令不会覆盖dockerfile文件中ENTERYPOINT 指令;

       如果需要覆盖,可以使用docker run --enterypoint 进行覆盖

③ADD   ADD <src> ...<dest> 或者 ADD ["<src>"..."<dest>"]适用于文件路径中有空格的情况) 

④COPY   COPY <src> ...<dest> 或者 COPY ["<src>"..."<dest>"]适用于文件路径中有空格的情况 

    ADD vs. COPY:

        ADD 包含类似tar的解压功能;如果单纯复制文件,Docker推荐使用COPY指令

⑤VOLUME    VOLUME ["/data"] 用于向 基于镜像构建的容器 添加卷

⑥WORKDIR    用于在基于镜像构建的容器中指定工作目录

    WORKDIR /path/to/workdir  应该使用绝对路径,如果使用了相对路径,则路径会发生传递

       比如 WORKDIR /a

          WORKDIR b

          WORKDIR c

          RUN pwd    结果为 /a/b/c

⑦ENV    用于设置环境变量,与WORKDIR类似

    ENV <key> <value> 或者 ENV <key>=<value>...

⑧USER    指定镜像会以什么样的用户去运行    USER daemon

    如:USER nginx  基于该镜像启动的容器,就会以nginx用户的身份运行

   也可以在USER指令中使用uid、 group、 gid,或者是这4种的组合使用,例如:

    USER user    USER user:group    USER user:gid

    USER uid     USER uid:gid      USER uid:group

⑨ONBUILD    用于为镜像添加触发器    ONBUILD [INSTRUCTION]

    镜像触发器:当一个镜像被其他镜像作为基础镜像时执行,会在构建过程中插入指令

2、Dockerfile构建过程

(1)从基础镜像运行一个容器; 执行一条指令,对容器做出修改; 执行类似docker commit的操作,提交一个新的镜像层;

再基于刚提交的镜像运行一个新容器; 执行dockerfile中的下一条指令,直至所有指令执行完毕

 

这样我们就可以利用这些中间层镜像进行调

(2)构建缓存,例如:


如果不想使用缓存:docker build --no-cache

(3)查看镜像构建的过程:  docker history [image]


猜你喜欢

转载自blog.csdn.net/yangwei234/article/details/80963793