Dockerfile 编写技巧之加速下载资源

# if you located in China, you can use aliyun mirror to speed up
RUN pip install --no-cache-dir poetry==${POETRY_VERSION} -i https://mirrors.aliyun.com/pypi/simple/
# RUN pip install --no-cache-dir poetry==${POETRY_VERSION}
# if you located in China, you can use aliyun mirror to speed up
RUN sed -i 's@deb.debian.org@mirrors.aliyun.com@g' /etc/apt/sources.list.d/debian.sources
RUN apt-get update \
    && apt-get install -y --no-install-recommends gcc g++ libc-dev libffi-dev libgmp-dev libmpfr-dev libmpc-dev

docker compose build 输出构建命令信息

docker compose build --progress=plain
#9 [api base 5/6] RUN echo "--- debug ---" && ifconfig
#9 0.138 --- debug ---
#9 0.139 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
#9 0.139         inet 172.17.0.6  netmask 255.255.0.0  broadcast 172.17.255.255
#9 0.139         ether 02:42:ac:11:00:06  txqueuelen 0  (Ethernet)
#9 0.139         RX packets 1  bytes 90 (90.0 B)
#9 0.139         RX errors 0  dropped 0  overruns 0  frame 0
#9 0.139         TX packets 0  bytes 0 (0.0 B)
#9 0.139         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#9 0.139 
#9 0.139 lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
#9 0.139         inet 127.0.0.1  netmask 255.0.0.0
#9 0.139         inet6 ::1  prefixlen 128  scopeid 0x10<host>
#9 0.139         loop  txqueuelen 1000  (Local Loopback)
#9 0.139         RX packets 0  bytes 0 (0.0 B)
#9 0.139         RX errors 0  dropped 0  overruns 0  frame 0
#9 0.139         TX packets 0  bytes 0 (0.0 B)
#9 0.139         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#9 0.139 
#9 DONE 0.1s

Docker 中的默认值设置

在 Docker 中,${VAR:-default} 是一种  Shell 参数扩展语法 ,用于设置环境变量的默认值。它的含义是:

  • 如果 VAR 未设置或为空 ,则使用 default 值;
  • 如果 VAR 已设置且非空 ,则直接使用 VAR 的值。

用途场景

这个语法常见于  Dockerfile  或容器的启动脚本(如 entrypoint.sh)中,目的是让容器在运行时更灵活地处理环境变量。例如:

示例 1:Dockerfile 中使用默认值

dockerfile

ENV APP_PORT ${EXTERNAL_PORT:-8080}
  • 如果用户启动容器时未通过 -e EXTERNAL_PORT=… 设置变量,则 APP_PORT 默认为 8080