红酒哪个网站做的好/熊猫关键词挖掘工具
上一章所讲到的commit的方式制作镜像的方法,会造成制作的镜像很大,不利于后续的维护迁移。所以dockerfile的编写制作镜像就会显得尤为重要。
一、基本参数
FROM:继承基础镜像MAINTAINER:镜像的制作者信息RUN:用来执行shell命令EXPOSE:暴露端口CMD:启动容器默认执行的命令ENTRYPOINT:启动容器真正执行的命令VOLUME:创建挂载点ENV:配置环境变量ADD:复制文件到容器COPY:复制文件到容器WORKDIR:设置容器的工作目录USER:容器的使用用户
注释:cmd和entrypoint必须要有一个,CMD可以被覆盖,如果有entrypoint的话,CMD就是ENTRYPOINT的一个参数.entrypoint对应的是deployment中的commond。
ENV:类似于docker run -it -e参数,在dockerfile中写ENV会增加镜像的层数,虽然不占什么空间,但是和-e参数是一样的效果。
ADD和COPY的区别:ADD支持解压复制而COPY就是单纯的复制文件到容器内部
新版的docker是不建议使用MAINTAINER的一般使用LABEL来注释 二、小实验
2.1 cmd
根据基础镜像制作新的镜像:
docker build -t centos:tag . #-t参数指定新的镜像tag,.表示当前目录。也可以使用-f参数来指定具体的dockerfile的目录地址
docker images #查看新生成的镜像
下面为了调试新生成的镜像是否达到了我们的预期,就需要加上--rm的参数.--rm表示运行完容器之后就自动退出:
docker run -it --rm centos:cmd
图中按照dockerfile中写的一样,执行了echo 1的命令,输出之后,容器自动退出。而如果我加上bash参数之后就会自动覆盖掉CMD的指令,如下图:
2.2 ENTRYPOINT
使用CMD和ENTRYPOINT会将CMD的参数传递给ENTRYPOINT,意思就是启动centos:cmd这个容器的时候会sleep3秒钟,cmd的参数传递给了ENTRYPOINT:
2.3 ENV
FROM centos:7LABEL maintainer="test dockerfile"RUN useradd liuchangENV test_env1 env1ENV test_env2 env2ENV env1=test1 env2=test2#RUN mkdir /opt/liuchang#ENTRYPOINT ["echo"]CMD echo ${test_env1} ${test_env2} ${env1} ${env2}
2.4 ADD
ADD会将打包进容器的文件进行解压操作而COPY不会执行解压的操作:
2.5 WORKDIR
定义进入容器看到的目录,这种场景适用于在各种java应用的工程文件存放在固定目录的情况,使用者登录容器之后可以清除的看到自己的工程文件的位置:
2.6 VOLUME
存储挂载卷,使用dockerfile的VOLUME可以在容器内部定义一个存储卷,但是这个关联在宿主机的目录是默认的一个目录,如下图,如果在容器启动时候指定挂载需要在docker run的时候使用-v参数: