次のdocker-composeファイルがあります
version: '3'
services:
node1:
build: node1
image: node1
container_name: node1
node2:
build: node2
image: node2
container_name: node2
両方のイメージをビルドして、1つのコマンドで開始できます
docker-compose up -d --build
しかし、私はビルドでビルド引数を使用したいと思います。 composeの範囲外のイメージの元のビルドスクリプトは、次のようになります。
#!/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 .
両方のイメージは、同じ名前で値が異なるビルド引数を使用します。また、数十のビルド引数があるため、それらをコンポーズサービス固有のビルドプロパティファイルに格納すると便利です。これはdocker-composeで可能ですか?
Docker-composeのビルドコマンドでargs
を定義できます。
Dockerfileの例:
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
docker-composeファイル:
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
スタック。
あなたのdockerfileで:
ARG CERTBOT_TAG=latest
FROM certbot/certbot:${CERTBOT_TAG}
Docker-compose.ymlで:
version: '3'
services:
certbot-dns-namecheap:
build:
context: .
args:
- CERTBOT_TAG=v0.40.1
そして、「-build-arg」で@lvthilloソリューションを使用できます
引数はdocker-composeファイルで直接指定できます。
node1:
build: node1
args:
ADMIN_USERNNAME: weblogic1
ADMIN_PASSWORD: weblogic1
ADMIN_NAME: admin1
image: node1
container_name: node1
詳細は official docs を参照してください。