保留字指令
FROM --基础镜像,当前镜像是基于那个镜像的
MAINTAINER --镜像维护者的名字和邮件地址
RUN --容器构建时需要运行的命令
EXPOSE --当前容器对外暴露的端口
WORKDR --指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV --用来构建镜像过程中设置环境变量
ADD --将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tae压缩包
COPY --类似ADD,拷贝文件和目录到镜像。将从构建上下文目录<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
VOLUME --容器数据卷,用于数据保存和持久化的命令
CMD --指定一个容器启动时要运行的命令。DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换
ENTRYPOINT --指定一个容器启动时要运行的命令。ENTRYPOINT和CMD一样,都是在指定容器启动程序及参数
ONBUILD --当构建一个被继承的DockerFile运行命令,父镜像在被继承后父镜像的onbuild被触发
案例1
Base 镜像(scratch)
Docker Hub中 99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
自定义镜像mycentos
官网拉下来的 centos 默认路径是 / ,不支持 vim 不支持 ifconfig
目标:
我们自定义 mycentos目的使我们自己的镜像具备如下:
登录后的默认路径
vim编辑器
查看网络配置ifconfig支持
1.编写
准备Dockerfile文件
mycentos内容Dockerfile
FROM centos MAINTAINER sw<sw@126.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "success--------------ok" CMD /bin/bash
2.构建
docker build -f DockerFile -t 新镜像名字:TAG .
查看一下我们制作的镜像
docker images
3.运行
docker run -it mycentos:1.3
注; 我们可以看到,自定义的镜像 默认路径发生了改变,并且支持 vim 与 ifconfig
4.列出镜像的变更历史
docker history 6d493064c6ca
案例2
制作CMD版可以查询IP信息的容器
1.编写
准备Dockerfile文件
mycentos01内容Dockerfile
FROM centos RUN yum install -y curl CMD ["curl", "-s", "https://ip.cn"]
2.构建
docker build -f ./mycentos01 -t myip .
3.运行
docker run -it myip
如果我们要添加一个参数
这时我们就需要使用 ENTRYPOINT 而不能使用 CMD
1.编写
重新编写DockerFile 文件
FROM centos RUN yum install -y curl ENTRYPOINT ["curl", "-s", "https://ip.cn"]