博客
关于我
《容器高手实战: Dockerfile最佳实践》
阅读量:432 次
发布时间:2019-03-06

本文共 1521 字,大约阅读时间需要 5 分钟。

Dockerfile最佳实践指南

一个容器对应一个进程

Docker容器通常应对应一个特定的进程,这意味着一个Docker镜像一般只应包含一个应用的制品包(如.jar文件)。在需要运行多个进程的场景下,应使用容器组(如Docker Compose或Kubernetes Pod)。

选择合适的基础镜像

基础镜像的选用原则

  • 官方镜像优先:优先选择Docker官方提供的基础镜像。
  • 镜像简洁性:基础镜像应提供充分的支持,尽量简化Dockerfile的复杂性。
  • 镜像精简:尽量避免基础镜像中包含不必要的内容。
  • 明确标签:使用指定的版本标签,而非latest标签。

示例

FROM openjdk:8-jdk-stretch

Dockerfile构建优化

最少改动的步骤优先

将最少改动的步骤放在前面,以便重用前面的构建缓存,避免重复构建。Dockerfile的典型构建步骤如下:

  • 选择基础镜像
    FROM openjdk:8-jdk-stretch
  • 安装工具和环境
    RUN apt-get update && apt-get upgrade -y && apt-get install -y git curl \  && rm -rf /var/lib/apt/lists/*
  • 处理应用
    COPY jenkins.sh /usr/local/bin/jenkins.sh
  • 声明入口点
    ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/jenkins.sh"]
  • 暴露端口
    EXPOSE 8080
  • 多阶段构建

    如果需要多阶段构建,可将Dockerfile分为两部分:

  • 构建应用制品包(如.jar文件)
  • 将生成的制品包复制到镜像中
  • 减少镜像层数量

    尽量减少RUNCOPYADD命令的次数,以减少镜像层的数量。例如,安装工具时尽量在一行命令中完成:

    RUN apt-get install -y git curl

    Docker构建上下文优化

    使用.dockerignore文件

    在构建时,Docker会将PATH路径下的所有内容作为上下文传递给Docker Daemon。如果PATH路径包含过多不必要的文件,会导致镜像构建速度变慢。通过.dockerignore文件,可以忽略不需要的文件:

    .git.cache**/*.class*.md

    建议

    将Dockerfile和制品包(如.jar)放置在一个干净的新目录中,再进行构建:

    # docker-build.sh脚本示例#!/bin/bashset -o pipefaildocker build -t my-image .

    环境变量管理

    一次构建,多环境运行

    在Dockerfile中使用ENV指令定义环境变量,并在运行时通过docker run -e指定:

    ENV JENKINS_HOME=/var/jenkins_home

    常见混淆项

    ADDCOPY

    优先使用COPY指令。ADD虽然功能强大,但可以通过命令完成(如curl下载、tar解压)。

    CMDENTRYPOINT

    • CMD:用于指定镜像运行的入口命令,可与ENTRYPOINT同时使用。
    • ENTRYPOINT:用于指定镜像暴露的入口点,优先于CMD生效。

    ARGENV

    • ARG:构建时参数,可通过docker build --build-arg指定。
    • ENV:运行时参数,可通过docker run -e指定。

    最佳实践总结

    通过以上优化,您可以构建出高效、简洁且易于扩展的Docker镜像。遵循Dockerfile最佳实践,可以显著提升镜像构建速度和性能,同时减少镜像层的数量。

    转载地址:http://zavkz.baihongyu.com/

    你可能感兴趣的文章
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置https(一)—— 自签名证书
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx 配置解析:从基础到高级应用指南
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>