使用构建参数和无缓存方式构建服务
在本步骤中,我们将探索 Docker Compose 的两个高级构建选项:使用构建参数和无缓存构建。
构建参数允许你向 Docker 构建过程传递变量。这在需要根据不同环境或配置自定义构建时非常有用,而无需修改 Dockerfile
本身。
首先,我们修改 Dockerfile
以接受构建参数。打开 Dockerfile
进行编辑:
nano ~/project/Dockerfile
将内容修改为以下内容:
FROM ubuntu:latest
ARG MESSAGE="Hello from build argument!"
RUN apt-get update && apt-get install -y cowsay
CMD ["cowsay", "$MESSAGE"]
我们添加了 ARG MESSAGE
指令来定义一个名为 MESSAGE
的构建参数,并设置了默认值。同时修改了 CMD
指令以使用这个参数。
按 Ctrl + X
,然后按 Y
和 Enter
保存 Dockerfile
。
现在,我们修改 docker-compose.yml
文件来向这个构建参数传递值。打开文件进行编辑:
nano ~/project/docker-compose.yml
将内容修改为以下内容:
version: "3.8"
services:
cow:
build:
context: .
args:
MESSAGE: "Custom message from Compose!"
我们将 build:
指令修改为一个包含 context:
和 args:
的对象。
context: .
指定构建上下文,即包含 Dockerfile
的目录
args:
是要传递给 Dockerfile
的构建参数映射。我们向 MESSAGE
参数传递了值 "Custom message from Compose!"
按 Ctrl + X
,然后按 Y
和 Enter
保存 docker-compose.yml
文件。
现在,我们使用构建参数来构建镜像。确保你位于 ~/project
目录下:
cd ~/project
docker-compose build
观察构建输出。你应该能看到构建参数在构建过程中被使用。
构建完成后,我们从这个镜像运行一个容器来查看输出:
docker run project_cow
你应该会看到 cowsay
输出消息 "Custom message from Compose!"。这确认了构建参数已成功传递并使用。
有时,你可能希望强制 Docker 忽略缓存并重新构建所有层。这在怀疑存在缓存问题或需要确保全新构建时很有用。你可以使用 docker-compose build
命令的 --no-cache
标志来实现。
让我们尝试使用 --no-cache
标志重新构建镜像:
docker-compose build --no-cache
再次观察构建输出。这次你会看到 Docker 没有使用任何缓存层,而是重新构建了 Dockerfile
中的每个步骤。这个过程会比使用缓存的构建花费更长时间。
构建完成后,你可以再次运行容器来确认消息仍然是构建参数传递的那个:
docker run project_cow
你应该仍然会看到 "Custom message from Compose!"。--no-cache
标志只影响构建过程,不会影响 docker-compose.yml
中定义的配置。