多个连续的 RUN 指令使用 && 连接
RUN
语句都会在最终映像中生成一个新层RUN fetch_package_registry_list
RUN install_some_package
RUN download_a_really_big_file && \\
remove_the_really_big_file
使用apt / yum 安装package是固定版本
FROM ubuntu:22.04
RUN apt-get update && \\
apt-get install -y some-package
FROM ubuntu:22.04
RUN apt-get update && \\
apt-get install -y some-package=1.2.*
使用 --no-install-recommends 避免安装不必要的包
--no-install-recommends
标志时,apt将安装该包以及包本身的所有推荐包。通过安装不需要的软件包,可能会增加 image的最终大小FROM ubuntu:22.04
RUN apt-get update && \\
apt-get install -y some-package --no-install-recommends
安装软件包后删除 apt-get 列表
apt-get
缓存,它会被写入RUN
语句的层中。最终在占据image中的空间。FROM ubuntu:22.04
RUN apt-get update && \\
apt-get install -y some-package --no-install-recommends && \\
apt-get clean && \\
rm -rf /var/lib/apt/lists/*
使用 WORKDIR 代替 RUN cd some-path
FROM ubuntu:22.04
WORKDIR /usr/src/app
RUN git clone [email protected]:depot/some-repo.git
对 CMD 和 ENTRYPOINT 参数使用 JSON 表示法
FROM ubuntu:22.04
ENTRYPOINT foo run-server
FROM ubuntu:22.04
CMD foo run-server
FROM ubuntu:22.04
ENTRYPOINT ["foo", "run-server"]
FROM ubuntu:22.04
CMD ["foo", "run-server"]