DockerFile
使用好处
- Dockerfile解放了手工操作很多步骤
- Dockerfile保证了环境的统一
什么是DockerFile
Dockerfile中文名叫镜像描述文件,是一个包含用于组合镜像目录的文本文档,也可以叫“脚本”。他通过读取Dockerfile中的指令安装步骤自动生成镜像。
DockerFile命令
镜像构建命令
1 | docker build -t 机构/镜像名称<:tags> Dockerfile目录 |
基础命令
FROM
1 | # 制作基准镜像 |
WORKDIR
1 | # 类似于Linux中的cd命令,但是他比cd高级的地方在于,我先cd,发现没有这个目录,我就自动创建出来,然后在cd进去 |
COPY
1 | # 将1.txt拷贝到根目录下。它不仅仅能拷贝单个文件,还支持Go语言风格的通配符,比如如下: |
ADD
1 | # 将1.txt拷贝到根目录的abc目录下。若/abc不存在,则会自动创建 |
- docker官方建议当要从远程复制文件时,尽量用curl/wget命令来代替ADD。因为用ADD的时候会创建更多的镜像层。镜像层的size也大。
- 二者都是只复制目录中的文件,而不包含目录本身。
- COPY能干的事ADD都能干,甚至还有附加功能。
- ADD可以支持拷贝的时候顺带解压缩文件,以及添加远程文件(不在本宿主机上的文件)。
- 只是文件拷贝的话可以用COPY,有额外操作可以用ADD代替。
ENV
1 | # 设置环境常量,方便下文引用,比如: |
ENV设置的常量,其他地方都可以用${xxx}来引用,将来改的时候只改ENV的变量内容就行。
运行指令
命令格式
- SHELL命令格式
比如
1 | RUN yum -y install vim |
- EXEC命令格式
比如
1 | RUN ["yum","-y","install","vim"] |
也就是说shell会创建子进程执行,EXEC不会创建子进程。
RUN
RUN指令是在构建镜像时运行,在构建时能修改镜像内部的文件。
ENTRYPOINT
容器创建时执行,而不是镜像构建时执行。
在容器启动的时候执行此命令,且Dockerfile中只有最后一个ENTRYPOINT会被执行,推荐用EXEC格式。
CMD
- 容器启动时执行,而不是镜像构建时执行。
- 启动时额外添加命令,CMD将失效