programing

도커 컴포지션에서 빌드 인수를 정의하는 방법은 무엇입니까?

starjava 2023. 9. 4. 19:29
반응형

도커 컴포지션에서 빌드 인수를 정의하는 방법은 무엇입니까?

다음 도커 합성 파일을 가지고 있습니다.

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

    node2:
            build: node2
            image: node2
            container_name: node2

두 이미지를 모두 빌드하고 단일 명령으로 시작할 수 있습니다.

docker-compose up -d --build

하지만 빌드에 빌드 인수를 사용하고 싶습니다.합성 범위 밖에 있는 이미지의 원래 빌드 스크립트는 다음과 같습니다.

#!/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 .

두 이미지 모두 이름은 같지만 값은 다른 빌드 인수를 사용합니다.또한 빌드 인수가 수십 개이므로, 서비스별 빌드 속성 파일을 작성하여 저장하는 것이 편리할 것입니다.도커 컴포지로 이것이 가능합니까?

인수는 도커 합성 파일에서 직접 지정할 수 있습니다.

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

전체 예 참조: MWE

공식 문서(여기서는 기존 v3)에 모든 세부 정보가 있습니다.

다음 항목을 정의할 수 있습니다.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에는 다음 명령을 사용하여 Docker 파일과 I 빌드가 포함되어 있습니다.

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.4'
services:
  certbot:
    build:
      context: .
      args:
        CERTBOT_TAG: v0.40.1

또한 서비스를 구축하거나 확장할 수 있습니다.

docker-compose build certbot

Salek가 위에서 언급했듯이, 추가.context: .도와준다.

예:

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

`

도커 파일

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로 작동할 것입니다.

언급URL : https://stackoverflow.com/questions/50734271/how-to-define-build-args-in-docker-compose

반응형