打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
作为云原生时代的开发人员,你要了解dockerfile的这些事儿

  一、docker容器的制作方式

  第一种为从容器构建镜像,即容器镜像,通过docker commit 的方式进行构建,该方法本菜鸟并不推荐,原因有如下几点:1)镜像为分层结构,容器则为镜像顶层加了一个可写层,这一方式构建的镜像极容易镜像过大。2)容器镜像无法确定这一层可写层内的内容,对于安全性上,存在问题,而且也不易维护。

  第二种镜像构建的方法则为dockerfile,通过dockerfile来控制镜像的构建。这个也是官方推荐的方案,同时本人也推崇此方案。

  二、dockerfile介绍

  dockerfile为一个纯文本文件,通过指令来控制构建,常用指令如下:

  1.FROM 此指令后面跟随的为基础镜像。例如:FROM centos:7 引用基础镜像centos:7

  2.MAINTAINER 此指令用于维护构建者信息。例如:MAINTAINER XuPangzi Pangzi@example

  3.LABEL 用于添加标签。例如:LABEL BASE FOR SPRING-CLOUD

  4.COPY 用于拷贝文件,不解压。例如:COPY tomcat.tar /opt/

  5.ADD 用户拷贝文件,可解压。例如:ADD tomcat.tar /opt/

  6 用于执行shell命令。例如:RUN mkdir -p /app/{log,data,conf,lib}

  7DIR 用于设置工作目录,即进入容器后的默认目录。例如:WORKDIR /app

  8.USER 为运行shell命令的用户。例如:USER app

  USER app:app

  USER 500

  USER 500:500

  USER app:500

  USER 500:app

  9.EXPOSE 声明端口。例如:EXPOSE 8881

  10.ENV 环境变量。例如:ENV MYSQL_PORT 8306

  11.ENTRYPOINT 容器启动时执行的命令,不会被docker run 覆盖。例如:ENTRYPOINT [“/bin/bash”,”-C”,”

  /opt/apache-tomcat/start.sh”] exec 风格 ENTRYPOINT /bin/bash -C

  /opt/apache-tomcat/start.sh shell风格

  12.CMD 容器启动时执行的shell命令

  

  三、如何构建docker镜像

  谈完dockerfile,该谈一下构建镜像了。通常都是采用 docker build -t example:v1 . 在dockerfile所在目录执行即可,同时ADD和COPY的文件也需要在dockerfile同级,不过为了匹配流水线作业,通常会采用另外一种方式进行构建:

  1.用户自备dockerfile 同时dockerfile以应用来命名,例如APP1_dockerfile,在构建镜像时,执行命令 docker build –no-cache=true -t app_A:v1 -f APP1_dockerfile .

  2.将dockerfile植入到构建脚本中,通过构建是引入的减肥参数来生成dockerfile 同时构建镜像,此方式下仍建议采用命令docker build –no-cache=true -t app_A:v1 -f APP1_dockerfile .

  实践:

  1.镜像最好是自己构建,从dockerhub或其他平台pull的私人镜像,无法保证是否里面埋有不安全插件,为了保障安全,推荐自己构建镜像

  2.选择恰当的基础镜像,核心应用,选择较大且稳定的镜像,比如centos,ubuntu,但该镜像的缺点是容易使生成的业务镜像较大,比如centos7+java8+tomcat+应用,轻松过G,若是前端等,则可以使用小巧的基础镜像,比如alpine,busybox,debian等,但该镜像也有不足,镜像追求轻量级,很多基础工具都没有,需要用户自行安装。

  3.构建镜像时要保证层数尽可能的少,此处有一技巧,RUN 后面可跟随多条shell命令,以&链接,同时执行完后一定要记得删除无用文件,以保障镜像最小化。

  所以基于以上几点,可根据公司需求,构建几版基础镜像,比如1、alpine+nginx+lua+curl+telnet等网络调试工具的前端基础镜像。2、alpine+java+tomcat+curl+telnet等调试工具的java基础镜像。3、基于centos和Ubuntu的核心服务镜像。等等等等,将基础镜像构建好后,就可以根据基础镜像设计持续集成流水线来自动化构建业务镜像了。

  四、基础镜像

  1、busybox

  此镜像集成了上百个linux常用命令,且镜像极小,大约2M,通过docker pull busybox:latest 即可,这个通常用来进行测试,比如写个yaml啥的

  2、alpine

  此镜像为一个轻量级安全向镜像,大小仅5M,关注安全,性能,资源效能,通过docker pull alpine可拉取镜像。鉴于我很多镜像都基于此镜像,这里多叨叨几句。此镜像采用apk安装应用,可在dockerfile

  中添加源

  中科大源:echo “

  mirrors.ustc/alpine/" > /etc/apk/repositories

  阿里源:echo “

  mirrors.aliyun/alpine/" > /etc/apk/repositories

  清华源:echo “

  mirror.tuna.tsinghua/alpine/" > /etc/apk/repositories

  apk –update add –no-cache

  即可安装,不过记得在安装后删除缓存,使镜像保持最小

  3、ubuntu/centos

  这两个属于重量级的镜像,就放在一起说吧,比较稳定,不过就是容易搞的镜像超大,轻松过G,恐怖如斯,如果有需要jdk和tomcat来运行的java应用,请做好思想准备

  五、参考资料

  1.你必须知道的Dockerfile

  cnblogs/edisonchou/p/dockerfile_inside_introduction.html

  cnblogs/edisonchou/

  2. Dockerfile命令详解

  cnblogs/yanh0606/p/11360936.html

  3.Dockerfile 中的 COPY 与 ADD 命令

  cnblogs/sparkdev/p/9573248.html

  cnblogs/sparkdev/

  4.容器技术之Dockerfile (一)

  cnblogs/qiuhom-1874/p/13019411.html

  cnblogs/qiuhom-1874/

  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
centos安装Docker与使用&&构建业务镜像挂载卷harbor仓库的高可用及网络模式和资源限制介绍
DockerFile 解析
Docker 定制 运行容器镜像的2种方法
减少容器镜像的三板斧
Docker 镜像优化:从 1.16GB 到 22.4MB
Dockerfile 搭建tomcat基础镜像与项目镜像
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服