1. Dockerfile
Dockerfile是一个由命令和参数构成的一个脚本,通过一个Dockerfile我们可以构建一个自定义的镜像
2. 编写步骤
- 手动编写的Dockerfile文件
- docker build构建镜像
- docker run 运行容器
其实Docker可以类比Git来学习
3. Dockerfile内容基础知识
- 每条保留指令都必须大写且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
4. Exp1
centos的Dockerfile文件
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20201113" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
CMD ["/bin/bash"]
5. 主流的Dockerfile保留字指令
FROM
基础镜像,当前新镜像是基于哪个镜像的。如FROM scratch。scratch 为镜像的祖先类
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建的时候需要的命令
EXPOSE
当前容器需要对外暴露的端口
WORKDIR
指令在创建容器后,终端默认登陆进来的工作目录,一个落脚点
ENV
用来构建镜像过程中设置环境变量,比如:ENV MY_PATH /usr/mytest,可以在后续的RUN命令中继续使用
ADD
ADD和COPY功能一样,都是把主机上的文件拷贝到容器内,但是ADD是拷贝后然后会自动解压tar压缩包,比如 ADD centos-7-x86_64-docker.tar.xz /
COPY
拷贝,比如要拷贝upload这个文件夹,可以使用COPY upload /docker/upload如果是要拷贝upload.txt这个文件,可以使用COPY upload /docker/upload.txt 或者COPY upload /docker/也可以使用COPY['src','dest']这种写法
VOLUME
容器数据卷,用于数据保存和持久化工作如:VOLUME ['/dataVolume1','/dataVolumn2']
CMD
指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换,执行格式,shell格式:CMD <命令>,exec格式:CMD ['可执行文件','参数1','参数2',...]
ENTRPOINT
指定一个容器启动时要运行的命令,ENTRPOINT和CMD一样,都是在指定容器启动程序及参数,值得注意他和CMD的区别,他可以等价为是对命令的追加,不会说只有最后一个生效
ONBUILD
触发器,当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild会被触发