반응형
도커 컴포즈 (Docker Compose)란?
도커 컴포즈는 여러 컨테이너를 정의하고 실행하기 위한 도구이다. docker-compose.yml 혹은 yaml 파일을 통해 애플리케이션의 서비스, 네트워크, 볼륨 등을 구성하고 관리할 수 있게 해주며, 복잡한 멀티 컨테이너 애플리케이션을 쉽게 배포하고 운영할 수 있도록 지원한다.
쉽게 말하면 여러 컨테이너를 생성해야 되는 경우, 컨테이너 마다 docker run 명령어를 이용하여 각종 설정과 함께 생성하고 실행하는 대신 docker-compose.yml 파일에 작성 후 한번에 생성과 실행하는 것이다.
작동 방식
- 이미지 빌드: docker-compose.yml 파일의 image 지시어는 생성할 컨테이너를 지정한다. image에 지정한 컨테이너에 추가적으로 빌드할 라이브러리나 의존성이 있는 경우 build 지시어를 이용한다. 아래 사진의 build 앞 점(.)은 현재 디렉토리를 가키며 지정된 디렉토리에 Dockerfile에 따라 로컬에서 직접 이미지를 빌드한다.
- Dockerfile의 FROM 지시어: 새로운 이미지를 생성하기 위한 기반 이미지를 지정한다.(FROM 키워드에 지정하는 이미지) 지정된 기반 이미지가 로컬에 없다면, 해당 이미지는 자동으로 원격 저장소(도커 허브 등)에서 다운로드된다. FROM 지시어는 Dockerfile의 맨 처음에 위치하며, 필요에 따라 여러 FROM 지시어를 사용하여 멀티 스테이지 빌드를 진행할 수도 있다.
- Dockerfile의 RUN 지시어: FROM 지시어에서 지정한 기반 이미지 위에 추가적인 설치나 수정을 수행하기 위해 사용된다. 예를 들어, 패키지를 설치하거나 파일을 복사하거나, 환경 변수를 설정하는 등의 작업을 명령한다. 아래 사진은 python3.8을 포함하는 airflow 2.8.1버전을 기반 이미지를 사용하고 pip install 명령을 실행하여 airfolw-code-editor 패키지를 설치하고 기반 이미지에 포함시켜 최종 도커 이미지로 빌드한다.
아래는 멀티 스테이지 빌드 예시이다. FROM, RUN 외에도 COPY, ADD, CMD, ENTRYPOINT 등의 지시어가 있다.
# 첫 번째 스테이지: Go 빌드 환경
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o myapp .
# 두 번째 스테이지: 최종 실행 이미지
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
# 첫 번째 스테이지에서 생성된 실행 파일을 복사
COPY --from=builder /app/myapp .
CMD ["./myapp"]
- 컨테이너 생성 및 실행: 빌드하거나 다운로드한 이미지를 기반으로 컨테이너를 생성하고 실행한다. docker-compose.yml 파일에 정의된 모든 서비스, 네트워크, 볼륨 설정이 이 과정에 적용된다.
docker-compose up # 현재 디렉토리의 docker-compose.yml 파일을 읽어 컨테이너 생성 및 실행
docker-compose -f /path/to/docker-compose.yml up # -f 옵션으로 지정한 디렉토리의 docker-compose.yml 파일 사용
docker-compose down # docker-compose up 으로 생성된 모든 리소스(네트워크, 컨테이너, 볼륨 등)를 정지하고 삭제한다.
반응형
'Docker & Kubernetes' 카테고리의 다른 글
Docker Compose로 /etc/hosts 파일에 항목 추가하기 (0) | 2024.07.13 |
---|---|
도커에서 이미지를 사용하는 과정 (0) | 2024.04.11 |
도커 명령어와 실습으로 배우는 컨테이너 기초 (1) | 2024.01.27 |
쿠버네티스 입문: 핵심 개념과 용어 가이드 (0) | 2024.01.20 |
도커(docker) 기초 이해: 컨테이너와 이미지의 비유적 설명 (1) | 2024.01.13 |