如何定义构建参数的码头组成? ?

我有下面这个文件

version: '3'
services:
node1:
build: node1
image: node1
container_name: node1


node2:
build: node2
image: node2
container_name: node2

我可以构建这两个映像并用一个命令启动它们

docker-compose up -d --build

但是我想在建筑上使用 build-args。构建范围之外的图像的原始构建脚本如下所示

#!/bin/sh
docker build \
--build-arg ADMIN_USERNNAME_1=weblogic \
--build-arg ADMIN_PASSWORD_1=weblogic1 \
--build-arg ADMIN_NAME_1=admin \
--build-arg ...
--build-arg ... \
-t test/foo .

这两个映像将使用同名但不同值的 build-args。此外,由于存在几十个构建参数,因此将它们存储在一个特定于组合服务的构建属性文件中比较方便。这是否可能与码头作曲?

130060 次浏览

您可以使用 docker-compose 的 build 命令来定义 args

例子 文件夹:

FROM nginx:1.13


RUN apt-get -y update && apt-get install -y \
apache2-utils && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*


ARG username
ARG password


RUN htpasswd -bc /etc/nginx/.htpasswd $username $password

文件:

version: '3'
services:
node1:
build: ./dir

./dir包含 Dockerfile,我使用以下命令构建:

docker-compose build --build-arg username="my-user" --build-arg password="my-pass"

我已经看到了:

Step 5/5 : RUN htpasswd -bc /etc/nginx/.htpasswd $username $password
---> Running in 80735195e35d
Adding password for user my-user
---> c52c92556825

我拿起我的烟囱:

docker-compose up -d

现在我可以检查 nginx 容器内部,我的用户名和(加密的)密码就在那里:

docker@default:~/test$ docker exec -it test_node1_1 bash
root@208e4d75e2bd:/# cat /etc/nginx/.htpasswd
my-user:$apr1$qg4I/5RO$KMaOPvjbnKdZH37z2WYfe1

使用此方法可以将 build args传递给 docker-compose堆栈。

您可以直接在 docker-compose 文件中指定参数:

node1:
build:
context: node1
args:
ADMIN_USERNNAME: weblogic1
ADMIN_PASSWORD: weblogic1
ADMIN_NAME: admin1
image: node1
container_name: node1

参见完整示例: MWE

官方文件有所有的细节。

在你的 Dockerfile:

ARG CERTBOT_TAG=latest
FROM certbot/certbot:${CERTBOT_TAG}

在你的 docker-compose.yml文件中:

version: '3.4'
services:
certbot:
build:
context: .
args:
CERTBOT_TAG: v0.40.1

你可以建立或发展你的服务:

docker-compose build certbot

码头档案

ARG ACCOUNT_ID


FROM $ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/my-composer:latest as composer
LABEL stage=intermediate

Buildspec 或 CLI 执行以下命令。

docker-compose build --build-arg ACCOUNT_ID="23423432423" --no-cache

如果要在 CLI 中打印 ACCOUNT _ ID

ARG ACCOUNT_ID


FROM amazonlinux:latest
RUN yum -y install aws-cli
RUN echo $ACCOUNT_ID


FROM $ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/my-composer:latest as composer
LABEL stage=intermediate

注意: ARG 应该位于所有 FROM语句之上,然后它将作为全局 ARG 工作。

正如 Salek 上面提到的,添加 context: .会有所帮助。

例如:

version: '3.5'
services:
app:
build:
context: .
args:
NODE_VERSION: 14.15.4
       

`