当前位置: 首页 > news >正文

docker镜像制作和管理详解

一. 制作镜像

制作镜像有两种方式,基于命令 docker commit 和dockerfile。鉴于docker commit太low了。就此略过 略略略~~~

1)dockerfile介绍

DockerFile 是一种被Docker程序解释执行的脚本,由很多条命令组成。docker程序读取dockerfile 并根据指令生成docker镜像。

docker守护程序dockerfile逐一运行指令,如有必要,将每个指令的结果提交到新景祥,然后最终输出新的镜像ID。

docker守护程序将自动清理之前发送的上下文。

docker将尽可能重用中间镜像层(缓存),以显著加速docker build命令的执行过程,由using cache 控制台输出的中消息指示

类似于ansible的逻辑。各位看官老爷这有专栏 先空着,后期补上~

dockerfile 文件说明

*每一行以dockerfile的指令开头,指令不区分大小写,但惯例使用大写(专业or装逼?)

*使用#开始作为注释

每行只支持一条指令,每条指令可以携带多个参数

指令按文件顺序从上到下执行

每个指令的执行会生成一新的镜像出,为了减少分层和镜像大小,尽可以将多条指令合并成一条指令

制作镜像一般可能需要反复多次,每次执行dockerfile都按顺序执行,从头开始,已经执行过的指令已经缓存,不需要在执行,如果后续有一行新的指令没执行过,期望后的指令将会重新执行,所以为加速镜像制作,将最常变化的内容放在dockerfile的文件后面。

2) 放大招了,别错过了哈

示例:假设我们正在构建一个基于 Python 的 Web 应用,使用 Flask 框架。包含多阶段构建、环境变量、健康检查、日志配置等生产环境中常见的最佳实践

 示例 Dockerfile

#第一阶段:构建阶段

FROM python:3.8-slim AS builder

#设置维护者信息

LABEL maintainer="your-email@example.com"

#设置环境变量

ENV PYTHONUNBUFFERED 1 \

    APP_HOME=/app \

    PATH=$APP_HOME:$PATH

#设置工作目录

WORKDIR $APP_HOME

#复制应用代码到镜像中

COPY . $APP_HOME

#安装系统依赖(如果需要)

RUN apt-get update && apt-get install -y \

    build-essential \

    libpq-dev \

    && rm -rf /var/lib/apt/lists/*

#安装 Python 依赖

RUN pip install --no-cache-dir -r requirements.txt

#运行构建步骤(如果需要)

RUN python setup.py build

#第二阶段:运行阶段

FROM python:3.8-slim

#设置维护者信息

LABEL maintainer="your-email@example.com"

#设置环境变量

ENV PYTHONUNBUFFERED 1 \

    APP_HOME=/app \

    PATH=$APP_HOME:$PATH

#设置工作目录

WORKDIR $APP_HOME

#从构建阶段复制构建结果

COPY --from=builder $APP_HOME $APP_HOME

#安装运行时依赖(如果需要)

RUN apt-get update && apt-get install -y \

    libpq5 \

    && rm -rf /var/lib/apt/lists/*

#创建一个数据卷(如果需要)

VOLUME $APP_HOME/data

#暴露应用端口

EXPOSE 5000

#设置健康检查

HEALTHCHECK --interval=30s --timeout=10s --retries=3 \

    CMD curl --fail http://localhost:5000/health || exit 1

#设置容器启动时运行的默认命令

CMD ["gunicorn", "-w", "3", "--bind", "0.0.0.0:5000", "app:app"]

#设置日志配置

#可以通过环境变量或配置文件来设置日志级别和路径

#ENV LOG_LEVEL=info

#ENV LOG_FILE=/app/logs/app.log

#创建日志目录(如果需要)

RUN mkdir -p /app/logs

 详细解释

1. FROM (构建阶段)

   - 作用:指定基础镜像。

   - 示例:FROM python:3.8-slim AS builder

   - 解释:使用官方的 Python 3.8 瘦身版镜像作为构建阶段的基础镜像,并命名为 builder。

2. LABEL

   - 作用:添加元数据到镜像。

   - 示例:LABEL maintainer="your-email@example.com"

   - 解释:设置维护者的邮箱地址。

3. ENV

   - 作用:设置环境变量。

   - 示例:

     dockerfile

     ENV PYTHONUNBUFFERED 1 \

         APP_HOME=/app \

         PATH=$APP_HOME:$PATH

     - 解释:设置多个环境变量,防止 Python 缓冲输出,设置应用主目录为 /app,并将应用目录添加到 PATH 中。

4. WORKDIR

   - 作用:设置工作目录。

   - 示例:WORKDIR $APP_HOME

   - 解释:设置容器的工作目录为 /app,使用环境变量 $APP_HOME。

5. COPY

   - 作用:从本地文件系统复制文件或目录到镜像中。

   - 示例:COPY . $APP_HOME

   - 解释:将当前目录下的所有文件复制到镜像的 /app 目录中。

6. RUN (安装系统依赖)

   - 作用:在镜像中运行命令。

   - 示例:

     dockerfile

     RUN apt-get update && apt-get install -y \

         build-essential \

         libpq-dev \

         && rm -rf /var/lib/apt/lists/*

    

   - 解释:更新包列表并安装 build-essential 和 libpq-dev,然后清理缓存文件,以减小镜像大小。

7. RUN (安装 Python 依赖)

   - 作用:在镜像中运行命令。

   - 示例:RUN pip install --no-cache-dir -r requirements.txt

   - 解释:安装 requirements.txt 文件中列出的所有 Python 依赖,并禁用缓存以减小镜像大小。

8. RUN (运行构建步骤)

   - 作用:在镜像中运行命令。

   - 示例:RUN python setup.py build

   - 解释:运行构建步骤,例如 python setup.py build。

9. FROM (运行阶段)

   - 作用:指定基础镜像。

   - 示例:FROM python:3.8-slim

   - 解释:使用官方的 Python 3.8 瘦身版镜像作为运行阶段的基础镜像。

10. COPY (从构建阶段复制构建结果)

    - 作用:从构建阶段复制文件或目录到运行阶段的镜像中。

    - 示例:COPY --from=builder $APP_HOME $APP_HOME

    - 解释:从构建阶段 builder 复制构建结果到 /app 目录。

11. RUN (安装运行时依赖)

    - 作用:在镜像中运行命令。

    - 示例:

      dockerfile

      RUN apt-get update && apt-get install -y \

          libpq5 \

          && rm -rf /var/lib/apt/lists/*

     

    - 解释:更新包列表并安装 libpq5,然后清理缓存文件,以减小镜像大小。

12. VOLUME

    - 作用:创建一个挂载点,用于持久化数据。

    - 示例:VOLUME $APP_HOME/data

    - 解释:创建一个数据卷,挂载点为 /app/data,用于持久化数据。

13. EXPOSE

    - 作用:声明容器运行时需要开放的端口。

    - 示例:EXPOSE 5000

    - 解释:声明容器运行时需要开放 5000 端口。

14. HEALTHCHECK

    - 作用:设置健康检查。

    - 示例:

      dockerfile

      HEALTHCHECK --interval=30s --timeout=10s --retries=3 \

          CMD curl --fail http://localhost:5000/health || exit 1

     

    - 解释:每 30 秒检查一次健康状态,超时时间为 10 秒,失败重试 3 次。如果 http://localhost:5000/health 返回非 200 状态码,则认为容器不健康。

15. CMD

    - 作用:指定容器启动时运行的默认命令。

    - 示例:CMD ["gunicorn", "-w", "3", "--bind", "0.0.0.0:5000", "app:app"]

    - 解释:使用 Gunicorn 启动应用,设置 3 个工作进程,绑定到 0.0.0.0:5000 端口,加载 app:app。

16. 日志配置

    - 作用:设置日志配置。

    - 示例:

      dockerfile

      可以通过环境变量或配置文件来设置日志级别和路径

      ENV LOG_LEVEL=info

      ENV LOG_FILE=/app/logs/app.log

     

    - 解释:可以通过环境变量或配置文件来设置日志级别和路径。

17. 创建日志目录

    - 作用:创建日志目录。

    - 示例:RUN mkdir -p /app/logs

    - 解释:创建 /app/logs 目录,用于存放应用日志。

其他指令以及补充

ONBUILD  触发器 

子镜像只要调用父镜像就会自动触发执行的命令

USER 指定当前用户

RUN  groupadd -r mysql && useradd - r -g mysql mysql

dcokerignore 忽略文件和文件夹指定模式

ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off"]

/usr/sbin/nginx 启动nginx -g 用户设置nginx的全局配置参数  daemon off 让nginx在前台执行

nginx 默认是后台已启动。

 构建和运行镜像

1. 构建镜像:

   - 打开终端,导航到包含 Dockerfile 的目录。

   - 运行以下命令构建镜像:

     docker build -t my-flask-app .

2. 运行容器:

   - 运行以下命令启动容器:

     docker run -d -p 5000:5000 my-flask-app

 其他注意事项

1. 环境变量:

   - 可以通过 -e 参数在运行容器时传递环境变量:

     docker run -d -p 5000:5000 -e LOG_LEVEL=info -e LOG_FILE=/app/logs/app.log my-flask-app

2. 日志管理:

   - 可以使用 Docker 的日志驱动来管理日志,例如使用 json-file 或 syslog:

     docker run -d -p 5000:5000 --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 my-flask-app

    

3. 健康检查:

   - 健康检查可以确保容器在出现问题时能够及时重启,提高应用的可用性。

4. 多阶段构建:

   - 多阶段构建可以显著减小最终镜像的大小,因为它只包含运行应用所需的文件和依赖,而不包含构建过程中使用的工具和中间文件。


http://www.mrgr.cn/news/50647.html

相关文章:

  • 为AI开发者而生,Agent开发专用的IDE
  • 插件集成有哪些痛点和挑战?
  • P11177 [ROIR 2018 Day1] 平方与立方 题解
  • 高精度SAR ADC研究与设计——雷鹏(二)
  • Mac的键盘屏幕需要常清理,你不可缺少的好帮手
  • 10.仓库管理系统(springbootvue3)
  • 从零开始的LeetCode刷题日记:二叉树的迭代遍历
  • 高标准农田信息化与物联网技术的融合
  • 2024年看项目管理软件与工程项目管理的奇妙融合
  • C++学习,标准库 <iterator>
  • vlan的基础知识
  • 留学生辅导 | 谈谈英国硕士论文如何进行论证
  • 利用vmware在移动硬盘安装Ubuntu2go
  • 大学新生编程学习指南:制定有效计划,开启编程之旅
  • Android14 SystemUI 启动流程(1)
  • Ubuntu里彻底卸载UHD
  • SHA256算法学习
  • MATLAB代码解析:利用DCGAN实现图像数据的生成 全网最细DCGAN设计-训练入门
  • [供应链] 让步接收
  • 安科瑞ARB5弧光保护在船舶中压配电板中的应用-安科瑞黄安南