Dockerfile 编写技巧和知识汇总
- 2025-06-27 19:36:00
- 丁国栋
- 原创 89
参考: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为例演示如何安装一个软件包和后续处理。
--
发表评论