Dockerfile 编写技巧和知识汇总

2025-06-27 19:36:00
丁国栋
原创 89
摘要:本文记录一些关于Dockerfile 编写技巧和知识汇总。

参考:https://docs.docker.com/reference/dockerfile/


技巧1:复制本地文件到Docker镜像时指定权限或用户(组):


FROM hub.thedf.cc/web/zsite:v9.0-main-1daebed
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
COPY --chown=33:33 . /

技巧2:构建并推送时禁用缓存

有时我们只是改动了本地的文件,而没有改动Dockerfile,docker build时可能会使用缓存,这样我们在本地改动的文件就无法更新到镜像中,这时我们需要在构建镜像时使用参数 --no-cache 禁用缓存(严格说也是docker build的bug)。


docker build --no-cache --push -t hub.thedf.cc/web/zsite:v9.0-main-1daebed -f Dockerfile .


技巧3:设计 Entrypoint

我们在设计编写 Entrypoint 脚本或者二进制文件时,需要考虑到运行 /bin/bash 的情况。因此可以在 Entrypoint 中做判断,如果参数是bash或者/bin/bash 就通过 exec 执行它。


技巧4:精简基于 debian 镜像

FROM php:7.4.33-apache
ENV DEBIAN_FRONTEND=noninteractive
RUN sed -i -r 's/(deb|security).debian.org/mirrors.tuna.tsinghua.edu.cn/g; s/https/http/g' /etc/apt/sources.list \
    && apt update -qq && apt-get install -y --no-install-recommends vim \
    && rm -r /var/lib/apt/lists /var/cache/apt/archives
COPY . /
RUN docker-php-ext-install pdo_mysql && a2enmod rewrite
在本例中,使用环境变量 DEBIAN_FRONTEND 来控制非交互使用场景无需用户输入;替换默认的软件源地址为清华大学tuna;以安装vim为例演示如何安装一个软件包和后续处理。

--

发表评论
博客分类