본문 바로가기

개발공부/Docker & Kubernetes 실전 가이드 강의

Udemy : Docker & Kubernetes 실전 가이드 (6)

728x90

Docker Compose

1. 기본 개념

- 다수의 docker build와 docker run을 하나의 구성 파일로 정리할 수 있든 명령 셋이다.

- 도커 컴포즈 파일 작성이 가장 첫 번째 단계

Service(Containers) : 다중 컨테이너 애플리케이션을 구성하는 컨테이너

- 터미널에서 도커 명령으로 할 수 있는 모든 것을 다 할 수 있다.

 

2. Compose 파일 만들기

docker-compose.yaml ~ 들여쓰기 사용가능

https://docs.docker.com/compose/compose-file/

 

Overview

 

docs.docker.com

1) 버전 설정하기 : 문서를 참고해 컴포즈의 최신 버전을 사용한다.

2) services : yaml 파일은 들여쓰기로 종속성을 표현하기 때문에 줄 맞춤에 유의해야 한다.

서비스의 자식 ~ 컨테이너

3) 각 컨테이너별 docker run 명령어를 yaml 파일로 변환하기

- image : 컨테이너의 이미지

- volumes : 추가하려는 볼륨을 들여쓰기와 - 를 추가해 구성한다.

더보기

ex) volumes:

          - data:/data/db(명명된 볼륨) ~ ro와 같은 추가 옵션도 여기서 추가할 수 있다.

 - environment : 두 가지 방법으로 작성가능 ~ 두 가지 중 하나 선택해서 작성할 것

1) 환경 변수: 할당된 값

2) - 환경 변수= 할당된 값

cf) 컴포즈의 환경 변수 키를 사용하지 않고 env 폴더를 만들고 변수 값을 할당한 후 컴포즈에서는 해당 파일을 사용한다고 설정하는 옵션도 가능하다.

ex) MONGO_INITDB_ROOT_USERNAME= max

더보기

ex) env_files:

          - ./env/mongo.env

- networks : 일반적으로는 사용할 필요 없다. 도커 컴포즈가 모든 서비스를 하나의 네트워크를 생성해 묶기 때문에

컨테이너는 여러 네트워크에 동시에 등록될 수 있다.

- Volumes ~ 최상위 단계 : 서비스에서 사용 중인 명명된 볼륨을 나열해야 한다. 나열된 볼륨은 다른 컨테이너가 사용할 수 있다. 익명 볼륨과 바인드 마운트는 최상위 단계에서는 나열할 필요 없다.

 

+ 리눅스는 도커 컴포즈를 따로 설치해야한다. 맥과 윈도우는 도커 설치 시 함께 설치된다.

 

3. 도커 컴포즈 업과 다운

1) 도커 컴포즈 시작

yaml 파일 위치에서 터미널로 docker compose up

-> 컨테이너 시작, 필요한 모든 이미지를 당겨와 빌드한다.

detached 모드 : docker compose up -d

docker compose down : 컴포즈로 만든 모든 컨테이너, 네트워크 자동으로 삭제

~ 볼륨은 삭제되지 않는다. -> docker compose down -v

 

4. 백엔드 yaml 작성

1) image 이미지가 없는 경우 build 옵션을 통해 빌드할 수 있다.

더보기
ex) backend:
         build: ./backend

2) 빌드 옵션의 다른 형태

더보기

build:

  context: ./backend

  dockerfile: Dockerfile ~ 도커 파일의 이름이 Dockerfile이 아닌 경우 사용할 수 있는 방법

cf) context는 복사할 폴더를 포함하는 폴더로 설정되어야 한다.

~ 만약 도커파일이 복사 대상 외부 폴더에 있는 상태라면 context는 전체 폴더가 되어야 한다.

 cf) args: 옵션 -> some-arg: 옵션을 사용해 인수를 지정할 수 있다.

3) ports: 포트를 지정할 수 있다. 목록으로 지정하기 때문에 -가 필요하다.

ex) host port = , container port= 80 ->

더보기

ports:

  - '80:80'

- 여러 포트를 지정할 수 있다.

4) volumes : 바인드 마운트의 경우 docker run에서는 절대 경로를 입력했지만 컴포즈는 그럴 필요 없다.

익명 볼륨 또한 추가해주면 된다.

5) 환경변수

6) depends_on : 도커 컴포즈 only

의존성을 부여해야 하는 경우 순서를 설정할 수 있는 옵션이다. 서버의 경우 데이터베이스 컨테이너가 먼저 실행되어야 하기 때문에 해당 옵션에 DB 컨테이너의 이름을 리스팅하면 된다.

 

서비스 이름 : 컴포즈 네트워크에서 컨테이너 간 통신 시 사용할 수 있는 이름이다.  소스 코드에 작성한 요청 정보와 다르더라도 도커가 연결할 수 있다.

 

5. 프론트엔드 yaml 작성하기

입력이 필요하므로 인터렉티브 모드가 실행되어야 한다.

- 도커 컴포즈는 동일한 이미지가 있는 경우 이미지를 재빌드하지 않는다.

stdin_open: 인터렉티브 모드 ~ true

tty: 터미널에 연결

백엔드 컨테이너를 의존하는 연결 추가 ~ 백엔드가 필요하지 않은 프론트엔드의 기능일 경우 꼭 의존성을 부여할 필요는 없다.

 

6. 도커 컴포즈 : 이미지 빌드 & 컨테이너 이름

- docker-compose up --build를 추가하면 이미지를 재빌드한다. ~ 커스텀 이미지 한정

- 컨테이너 이름의 구성 : 프로젝트 폴더 이름_서비스 이름_숫자

- 서비스에 container_name: NAME 옵션을 통해 컨테이너 이름을 강제할 수 있다.

728x90