前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker镜像构建技巧

docker镜像构建技巧

原创
作者头像
dufu
发布2024-08-14 10:38:28
820
发布2024-08-14 10:38:28
举报
文章被收录于专栏:docker

1、基础镜像

构建镜像使用的基础镜像,推荐使用官方的一些基础镜像,同时也可以自己在官方基础镜像上添加一些时区配置,软件源配置,安装一些常用的工具等。

2、容器进程

docker容器虽然支持多个进程的运行,但是只监听主进程的存活,建议不要在一个容器中启动多个进程。

docker容器启动后,会监听启动的主进程,如果主进程后台运行,docker会认为主进程已退出,导致容器运行出错。请保证主进程前台运行。如果需要在宿主机上后台运行容器,请使用-d参数。k8s会自动让容器后台运行。

如使用nohup命令启动的进程,容器会在启动时直接退出,导致容器不断重启。比如redis容器中,配置文件的daemonize为yes,导致redis进程后台启动,容器不断重启。

3、镜像层

docker镜像由多个镜像层组成,每一层都有它独立的id和校验和。docker会复用相同校验和的镜像层,以此降低镜像大小,提高传输速度。

镜像构建过程中,Dockerfile的每一行指令对应创建一个镜像层,因此,请尽可能减少Dockerfile指令的使用。

镜像构建过程中,docker-engine会解析Dockerfile的指令,如果指令没用使用上下文的文件或上下文中的文件没有发生变更,就会复用使用上次构建的镜像对应的镜像层,提高构建速度。但是,如果出现变更,会重新构建镜像层,而且后面的镜像层也会重新构建(不管有没有变化),因此,请把变更概率少的指令放到前面,变更多的指令放在后面,提高构建速度。

如果不希望复用上次构建的镜像层,可以使用--no-cache参数。

4、参数化配置

docker镜像的区别应该体现在功能上,而不是配置上。因此,构建镜像前,应该对应用改造,提取其中的配置,可以使用配置中心,环境变量注入,配置文件挂在等方式,在不同配置下使用同一个镜像。常用的配置提取应该包含

1. 第三方服务的地址,端口,协议,授权等信息

2. 应用暴露功能的范围

3. 功能阈值,如熔断,超时时间等

5、用户

docker默认使用受限的root权限启动容器,为了安全,请使用非root用户启动,可以在Dockerfile中定义启动进程的用户。构建镜像过程中仍然是root用户,请注意修改添加到容器中的文件权限和拥有者。

6、过程容器

在构建运行时容器前,除了使用jenkins编译源代码,还可以使用过程容器编译,然后使用过程容器的制品构建运行时容器。这样做的好处是,不依赖jenkins编译环境,新项目特别是对编译环境有较高依赖要求如C等项目,无需在jenkins机器配置复杂的编译环境,就可以轻松构建,而且可以几乎不需要修改配置地迁移到任意构建环境。

7、禁止使用的命令

某些命令与云主机置配置冲突,如果使用了,将会导致不可预见到错误,请不要使用他们:

1. link:禁止在Dockerfile,程序,启动脚本中使用link命令创建文件链接。

2. VOLUME:禁止在Dockerfile中使用VOLUME指令创建目录映射。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、基础镜像
  • 2、容器进程
  • 3、镜像层
  • 4、参数化配置
  • 5、用户
  • 6、过程容器
  • 7、禁止使用的命令
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档