保留字指令
- FROM 基础镜像
- MAINTAINER 镜像维护者的名字和邮箱
- RUN 容器构建时需要运行的命令
- EXPOSE 当前容器对外暴露的端口号
- WORKDIR 终端默认进入该容器的工作目录
- ENV 为容器设置环境变量(网络代理)
- ENV MY_PATH /usr/mytest
- WORKDIR MY_PATH
- ADD 拷贝加解压缩,将宿主机目录下的文件拷贝进镜像且add命令会自动处理URL和解压tar压缩包
- ADD xxx.tar.gz /
- COPY 拷贝
- COPY xxxx /
- COPY [‘src’, ‘dest’]
- VOLUME 容器卷用于数据持久化
- VOLUME [‘xxxxlujing’, ‘xxxxxxx’, ‘xxxx’]
- CMD 用于指定一个容器启动时要运行的命令(dockerfile中可以有多个CMD但只有最后一个生效,且会被docker run 后面的参数替换)
- ENTRYPOINT 指定一个容器启动时要运行的命令,目的和CMD一样,但不会被替换,docker run后会追加
- ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发(相当于回调,只要子镜像继承了我,我就触发一个onbuild做一些(收尾)工作)
流程分析
- FROM 从基础镜像运行一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的新镜像运行一个新容器
- 执行dockerfile中的下一条指令
规则
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
实践
- 通过docker build把dockerfile变为image
- docker build -f filename -t name:version .
1 2 3 4 5 6 7
| FROM centos ENV MY_PATH /tmp WORKDIR $MY_PATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD /bin/bash
|
CMD和ENTRYPOINT的区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| entryponit FROM centos RUN yum install -y curl ENTRYPOINT ["curl", "-s", "https://ip.cn"]
# CMD FROM centos RUN yum install -y curl CMD ["curl", "-s", "https://ip.cn"]
在CMD生成的镜像使用docker run ip -i 会报错,因为-i覆盖了curl -s https://ip.cn 而ENTRYPOINT加-i会生成: curl -s https://ip.cn -i
|
ADD和COPY的区别
1 2 3 4 5 6 7
| FROM centos MAINTAINER chunjianghuayueye COPY c.txt /usr/local/cccc.txt ADD mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz /usr/local RUN yum install -y vim ENV MYPATH /usr/local WORKDIR $MYPATH
|
ONBUILD
1 2 3 4 5 6 7 8
| 父镜像的dockerfile中写 ONBUILD RUN echo “father onbuild ----886” 创建父镜像
子镜像 FROM FATHER 当执行docker build子镜像 触发父镜像的ONBUILD命令
|