docker 第9.2章 DockerFile常用保留字指令 docker 第9.2章 DockerFile常用保留字指令

2023-06-06

FROM

  • 基础镜像,当前新镜像是基于哪个镜像的

  • 指定一个已经存在的镜像作为模板

  • 第一条必须是 from

MAINTAINER

  • 镜像维护者的姓名和邮箱地址

RUN

  • 容器构建时需要运行的命令,两种格式

  • shell 格式

    • https://file.lulublog.cn/images/3/2023/06/Y0vccL7scTnVc7tgy9l9Q7xGMx9xyQ.jpg

    • RUN yum -y install vim

  • exec 格式

    • https://file.lulublog.cn/images/3/2023/06/P14550CxaAih0g05TXKx1rZ08zUm5G.jpg

    • RUN 是在 docker build 时运行

EXPOSE

  • 当前容器对外暴露出的端口

WORKDIR

  • 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

USER

  • 指定该镜像以什么样的用户去执行,如果都不指定,默认是 root

ENV

  • 用来在构建镜像过程中设置环境变量

  • ENV MY_PATH /usr/mytest 这个环境变量可以在后续的任何 RUN 指令中使用

  • 这就如同在命令前面指定了环境变量前缀一样

  • 也可以在其它指令中直接使用这些环境变量, 比如:WORKDIR $MY_PATH

ADD

  • 将宿主机目录下的文件拷贝进镜像且会自动处理 URL 和解压 tar 压缩包

COPY

  • 类似 ADD,拷贝文件和目录到镜像中

  • 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置

  • COPY src dest

  • COPY ["src", "dest"]

  • :源文件或者源目录源路径>

  • :容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建目标路径>

VOLUME

  • 容器数据卷,用于数据保存和持久化工作

CMD

  • 指定容器启动后的要干的事情

  • https://file.lulublog.cn/images/3/2023/06/sCcv2SsCRleL2E6VVmH8uVMg8HgvG0.jpg

  • Dockerfile 中可以有多个 CMD 指令

  • 但只有最后一个生效

  • CMD 会被 docker run 之后的参数替换

  • CMD 是在docker run 时运行

  • RUN 是在 docker build 时运行

ENTRYPOINT

  • 也是用来指定一个容器启动时要运行的命令

  • 类似于 CMD 指令

  • 但是 ENTRYPOINT 不会被 docker run 后面的命令覆盖

  • 而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序

  • ENTRYPOINT ["","","",...]

  • ENTRYPOINT 可以 和 CMD 一起用

    • 一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参

    • 当指定了 ENTRYPOINT 后,CMD 的含义就发生了变化

    • 不再是直接运行其命令而是将 CMD 的内容作为参数传递给 ENTRYPOINT 指令

    • 他两个组合会变成 ""

    • 案例如下:假设已通过 Dockerfile 构建了 nginx:test 镜像

    • Docker 命令:docker run  nginx:test
    • 衍生出的实际命令:nginx -c /etc/nginx/nginx.conf
    • Docker 命令:docker run  nginx:test -c /etc/nginx/new.conf
    • 衍生出的实际命令:nginx -c /etc/nginx/new.conf
    • 优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数

    • 注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效

小总结

https://file.lulublog.cn/images/3/2023/06/Ueo01JJ11c20v4R6Gz4Ve0SA66czJs.jpg

阅读 374

docker文章

带到手机上看