设为首页 收藏本站
查看: 982|回复: 0

[经验分享] Docker基础(4)——Dockerfile书写

[复制链接]

尚未签到

发表于 2019-2-20 10:37:01 | 显示全部楼层 |阅读模式
  Docker中制作镜像一共有两个方法:
1.     基于容器制作镜像:
docker commit …
2.     基于Dockerfile制作镜像;
docker build …

  Dockerfile的制作步骤:
  1.创建一个目录;
  2.在目录中创建一个首字母大写的文件,供docker build识别;
  3.因为Dockerfile的执行环境在创建的目录中,所以可以创建相对应的文件,供dockerfile使用;
  ex:
[root@master ~]# ls docimage
Dockerfile  index.html      
[root@master ~]# cat docimage/Dockerfile
FROM busybox:latest
LABEL maintainer="hevttc"
ENV DOC_ROOT="/tmp/" \
              VOLUME_ROOT="/data/mydata" \
              ARGU="/usr/sbin/"
COPY index.html /tmp/
VOLUME ${VOLUME_ROOT}
RUN ifconfig -a && \
              cat ${DOC_ROOT}index.html  Dockerfile书写格式
  Dockerfile Format
  “#”开头的行是注释行(可以多行,任意位置);
  INSTRUCTION arguments
指令和对应的参数,建议指令大写,参数小写,默认大小写均可;
能用一行指令完成,尽量不用多行指令;
第一行可执行指令必须是FROM指令;
  Docker是顺序执行Dockerfile中的内容,注意书写顺序;
  Dockerfile中几个重要的指令:
  1.FROM (指定基准镜像)
FROM |: 或
FROM @
:指定作为base image的名称;
:base image的标签,为可选项,省略时默认为latest;
  2.LABEL(写入当前Dockerfile的制作者信息);
LABEL = = = …

  3.COPY(将宿主机的文件拷贝至镜像中);
COPY  …  或COPY ["",... "" ]
:要复制的源文件或目录,支持使用通配符;
:目标路径,即正在创建的image的文件系统路径;建议为使用绝对路径,否则,COPY指定则以WORKDIR为其起始路径;
注意:在路径中有空白字符时,通常使用第二种格式;

  4.ADD(类似于COPY指令,支持TAR文件和URL路径);
ADD  …  或ADD ["",... "" ]

注意:
如果为URL且不以"/"结尾,则指定的文件将被下载并直接被创建为;如果以"/"结尾,则文件名URL指定的文件将被下载并保存为/;
如果是一个本地系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于"tar -x"命令;然而,通过URL获取到的tar文件将不会被自动展开;
如果有多个,或其间接或直接使用了通配符,则必须是一个以"/"结尾的目录路径;如果不以"/"结尾,则其被视作一个普通文件,的内容将被直接写入到;

  5.WORKDIR(用于为Dockerfile中所有的RUN, CMD, ENTRYPOINT, COPY和ADD指定设定工作目录;);
WORKDIR
在Dockerfile文件中,WORKDIR指令可出现多次,其路径也可以为相对路径,不过,其是相对此前一个WORKDIR指令指定的路径;
另外,WORKDIR也可以调用有ENV指定定义的变量;

  6.VOLUME(用于在image中创建一个挂载点目录,可以用于在Docker Host上挂载卷);
VOLUME  或 VOLUME ["mountpoint"]
  个人并不建议使用:这是Docker daemon创建托管卷,并不是绑定挂载;
  7.EXPOSE(为容器打开要监听的端口,实现与外部的通信);
  EXPOSE [/] [/] [/] …
  用于指定传输层协议,可为TCP或UDP二者之一,默认为TCP;
  8.ENV(为镜像定义环境变量,可以被其他指令调用,build_time和run_time都可被使用);
ENV   或 ENV =...
  调用格式:
  $variable_name或${variable_name}
  9.ARG (在创建镜像是build_time使用的变量,一般用ARG写版本号和作者);
ARG [=]

  10.RUN(用于指定Docker build过程中运行的程序);
RUN  或
RUN ["","","",...](json数组)
  11.CMD(类似于RUN命令,在run_time执行);
CMD  或
CMD ["","","",...] 或
CMD ["","",...] (为ENTRYPOINT指令提供默认参数)
  12.ENTRYPOINT(类似于CMD指令)
ENTRYPOINT
ENTRYPOINT ["","","",...]

[root@master ~]# cat docimage1/entrypoint.sh
#!/bin/sh
exec $@
[root@master ~]# cat docimage1/Dockerfile
FROM nginx:1.14-alpine
COPY entrypoint.sh /bin/
CMD ["/usr/local/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
[root@master ~]# ll docimage1/
总用量 8
-rw-r--r-- 1 root root 129 11月  1 20:42 Dockerfile
-rwxr-xr-x 1 root root  19 11月  1 20:16 entrypoint.sh  命令执行图

  创建一个Dockerfile;
[root@www ~]# mkdir docimage
[root@www ~]# vim docimage/Dockerfile
[root@www ~]#
[root@www ~]# vim docimage/test.txt
[root@www ~]# cat docimage/Dockerfile
FROM nginx:1.14-alpine
LABEL maintainer="liujingyu"
ENV DOC_ROOT="/tmp" \
              VOLUME_ROOT=/data/mydata
COPY test.txt ${DOC_ROOT}
VOLUME ${VOLUME_ROOT}
RUN echo 123 > ${DOC_ROOT}/test.txt
CMD cat ${DOC_ROOT}/test.txt
[root@www ~]#
[root@www ~]# cat docimage/test.txt
THIS is Docker TEST;  用Dockerfile创建镜像:
[root@www ~]# docker build docimage/ -t ljymyy/nginx:v0.2
Sending build context to Docker daemon  3.072kB
Step 1/7 : FROM nginx:1.14-alpine
---> 77bae8d00654
Step 2/7 : LABEL maintainer="liujingyu"
---> Using cache
---> a012ac4c6f51
Step 3/7 : ENV DOC_ROOT="/tmp"         VOLUME_ROOT=/data/mydata
---> Using cache
---> ee6ed363bfde
Step 4/7 : COPY test.txt ${DOC_ROOT}
---> Using cache
---> a416671fde2a
Step 5/7 : VOLUME ${VOLUME_ROOT}
---> Using cache
---> 84bf38b22301
Step 6/7 : RUN echo 123 > ${DOC_ROOT}/test.txt
---> Using cache
---> 756cd9857096
Step 7/7 : CMD cat ${DOC_ROOT}/test.txt
---> Running in a2f99fcc5fba
Removing intermediate container a2f99fcc5fba
---> dac468a636e0
Successfully built dac468a636e0
Successfully tagged ljymyy/nginx:v0.2
[root@www ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ljymyy/nginx        v0.2                dac468a636e0        2 minutes ago       17.7MB  运行此镜像:
[root@www ~]# docker container  run --rm  --name ngx1 ljymyy/nginx:v0.2
123



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674781-1-1.html 上篇帖子: Docker基础(3)——基础网络模型 下篇帖子: Docker第八回(docker资源限制和验证)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表