首页 > 其他分享 >制作容器镜像的最佳实践

制作容器镜像的最佳实践

时间:2023-01-14 08:33:05浏览次数:32  
标签:容器 apt 最佳 install 使用 镜像 Docker

概述

这篇文章主要是我日常工作中的制作镜像的实践, 同时结合我学习到的关于镜像制作的相关文章总结出来的. 包括通用的容器最佳实践, java, nginx, python 容器最佳实践. 最佳实践的目的一方面保证镜像是可复用的, 提升 DevOps 效率, 另一方面是为了提高安全性. 希望对各位有所帮助.

本文分为四部分内容, 分别是:

  1. 通用容器镜像最佳实践
  2. Java 容器镜像最佳实践
  3. NGINX 容器镜像最佳实践
  4. 以及 Python 容器最佳实践

通用容器镜像最佳实践

使用 LABEL maintainer

LABEL maintainer 指令设置镜像的作者姓名和邮箱字段。示例如下:

LABEL maintainer="[email protected]"

复用镜像

建议尽量使用 FROM 语句复用合适的上游镜像。这可确保镜像在更新时可以轻松从上游镜像中获取安全补丁,而不必直接更新依赖项。

此外,在 FROM 指令中使用标签 tag(例如 alpine:3.13),使用户能够清楚地了解镜像所基于的上游镜像版本。

禁止使用 latest tag以确保镜像不会受到 latest 上游镜像版本的重大更改的影响。

保持标签 TAGS 的兼容性

给自己的镜像打标签时,注意保持向后兼容性。例如,如果制作了一个名为example 的镜像,并且它当前为 1.0 版,那么可以提供一个 example:1 标签。后续要更新镜像时,只要它继续与原始镜像兼容,就可以继续标记新镜像为 example:1,并且该 tag 的下游消费者将能够在不中断的情况下获得更新。

如果后续发布了不兼容的更新,那么应该切换到一个新 tag,例如 example:2。那么下游消费者可以按照自身实际情况升级到新版本,而不会因为新的不兼容镜像而造成事故。但是任何使用 example:latest的下游消费者都会承担引入不兼容更改的风险, 所以这也是前面我强烈建议不要使用 latest tag 的原因.

避免多个进程

建议不要在一个容器内启动多个服务,例如 nginx 和 后端 app。因为容器是轻量级的,可以很容易地通过 Docker Compose 或 Kubernetes 链接在一起。Kubernetes 或基于此的 TKE 容器平台通过将相关镜像调度到单个 pod 中,轻松地对它们进行集中管理。

在封装脚本中使用 EXEC 指令

许多镜像会通过在启动应用程序之前使用封装脚本进行一些设置。如果您的镜像使用这样的脚本,那么该脚本最后应该使用 exec 启动应用程序,以便用应用程序的进程替换该脚本的进程。如果不使用 exec,那么容器运行时发送的信号(比如 TERMSIGKILL)将转到封装脚本,而不是应用程序的进程。这不是我们所期望的。

清除临时文件

应删除在生成过程中创建的所有临时文件。这还包括使用 ADD 指令添加的任何文件。例如,

标签:容器,apt,最佳,install,使用,镜像,Docker
From: https://www.cnblogs.com/east4ming/p/17051228.html

相关文章

  • dockerfile 将自己的nodeapi项目结合指定版本node环境打包生成全新的mynodeapi镜像
    用过宝塔或手动部署node-api项目就知道有多少时候是因为生产环境上node的版本与我们提交的node版本过高或过低导致无法运行的这几天玩docker随便把我原先的项目尝试打包......
  • Dockerfile文件详解和nginx镜像制作示例
    Dockerfile文件中各个常用的基本命令,共18个指令FROMMAINTAINERRUNCMDLABELEXPOSEENVADDCOPYENTRYPOINTVOLUMEUSERSHELLWORKDIRONBUILDSTOPSIGNALHEALTHCH......
  • Alan的Docker容器学习笔记
    (本文的内容主要来源于Google、百科和学过的一些专栏,目前没有实际的企业级应用容器化部署经验,写的比较浅薄见笑了)为什么会接触到Docker运维同学使用k8s将业务迁移上云时遇到......
  • 买卖股票的最佳时机三
    导读^_^买卖股票的系列问题三!这回的限制是全局最多能买卖两次操作。题目leetcode123代码与思路注意:这里的2次是最多两次确定dp数组以及下标的含义dp[i][j]中......
  • 基于Dockerfile构建企业级生产环境镜像
    1、dockerfile语法详解1.1dockerfile介绍Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。基于Dockerfile构建镜像可以使用docker......
  • 招聘老师的最佳实践及工作交流坊
    香港—如果你在招聘外籍老师途中遇到极大的挑战,你并不是孤独的。由于新冠肺炎的限制及对于外籍老师的需求增加,招聘及留住高质量的外籍老师对于学校来说已经越来越困难。在......
  • 49-Docker-网络管理及Compose单机多容器编排
    Docker安装后默认的网络设置Docker服务安装完成之后,默认在每个宿主机会生成一个名称为docker0的网卡其IP地址都是172.17.0.1/16[root@ubuntu2204~]#ipa1:lo:<LOOPBACK,U......
  • leetcode_数据结构_入门_121. 买卖股票的最佳时机
    121.买卖股票的最佳时机  问题:给定一个数组prices,它的第 i个元素 prices[i]表示一支给定股票第i天的价格。只能选择某一天买入这只股票,并选择在未来的某......
  • 机械CAD制图:四分之一镜像功能使用技巧
    机械CAD制图过程中,有些时候会需要复制图纸中的某一对象,浩辰CAD机械软件中为此提供了便捷的四分之一镜像功能,此功能是一个复制功能,只是实现的为你要复制项的四分之一镜像。......
  • C++ STL容器的Value语义与Reference语义
    C++STL容器的Value语义与Reference语义1.Value语义vs.Reference语义1.1两种语义简述​ 通常情况下,所有容器都是建立元素的copy,返回的元素的copy。因此,容器内的元素与......