web-dev-qa-db-ja.com

docker-composeでビルド引数を定義する方法は?

次の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で可能ですか?

17
Tuomas Toivonen

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スタック。

4
lvthillo

あなたの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ソリューションを使用できます

1
heralight

引数はdocker-composeファイルで直接指定できます。

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

詳細は official docs を参照してください。

0
Raphael