什么是dockerFile
-
是用来构建docker镜像的构建文件,是由一系列命令和参数组成的脚本
-
步骤
- 编写dockerFile-> docker build -> docker run
-
eg
-
FROM scratch MAINTAINER https://github.com/CentOS/sig-cloud-instance-images ADD centos-6-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="20181006" CMD ["/bin/bash"]
-
scratch 是最 基础的镜像
-
MAINTAINER是通讯地址
-
dockerFile解析过程
- 约定
- 每个命令都要大写,都要有参数至少一个
- 指令从上到下顺序执行
- #表示注释,每条指令都会创建一个新的镜像层, 并对镜像进行提交
- 流程
- docker从基础镜像运行一个容器
- 执行一条指令对容器进行修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新容器
- 执行dockerFIle中的下一条指令知道所有指令都执行完成
- dockerFile、docker镜像、docker容器代表三个不同的阶段
- dockerFile是软件的原材料
- docker镜像是软件的交付品
- docker容器是软件的运行态
dockerFile保留字指令(体系结构)
- FROM 所基于的基础镜像
- MAINTAINER 作者的通讯地址
- RUN 容器构建时需要运行的命令
- EXPOSE 暴露出该镜像变成实例对外暴露的端口
- WORKDIR 创建容器之后,默认的落脚点
- ENV 设置环境变量,之后可以在后序的指令中使用
- ADD 拷贝进镜像+解压缩
- COPY 拷贝
- VOLUME 容器数据卷,指定容器中的数据卷目录
- CMD 指定一个容器启动时需要执行的命令
- 可以有多个命令,但只有最后一个生效
- CMD会被docker run后的参数替换
- ENTRYPOINT 和CMD都是一样,指定一个容器启动时需要执行的命令
- 不会被docker run参数替换,而是被追加组合
- ONBUILD
- 当构建一个被继承的dockerFIle时运行命令,父镜像在被子继承后的父镜像的onbuild被触发
- 意思就是,如果别人继承了我,它运行了,那ONBUILD这里的指令就会被触发执行
自定义centos的dockerFile
-
修改容器进入后的落脚点
-
安装vim和ifconfig
-
向外暴露80端口
-
FROM centos MAINTAINER https://blog.csdn.net/qq_34687559 ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo "success building a image" CMD /bin/bash
自定义根据参数查ip功能的dockerFIle
-
输入ip,能自动curl
-
FROM centos MAINTAINER https://blog.csdn.net/qq_34687559 RUN yum install -y curl CMD ["curl","-s","http://ip.cn"]
-
上面的CMD可以替换成ENTRYPOINT,则就不会被覆盖,可以添加参数