Docker Compose
1. 기본 개념
- 다수의 docker build와 docker run을 하나의 구성 파일로 정리할 수 있든 명령 셋이다.
- 도커 컴포즈 파일 작성이 가장 첫 번째 단계
Service(Containers) : 다중 컨테이너 애플리케이션을 구성하는 컨테이너
- 터미널에서 도커 명령으로 할 수 있는 모든 것을 다 할 수 있다.
2. Compose 파일 만들기
docker-compose.yaml ~ 들여쓰기 사용가능
https://docs.docker.com/compose/compose-file/
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 옵션을 통해 빌드할 수 있다.
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 옵션을 통해 컨테이너 이름을 강제할 수 있다.
'개발공부 > Docker & Kubernetes 실전 가이드 강의' 카테고리의 다른 글
Udemy : Docker & Kubernetes 실전 가이드 (8) (0) | 2023.04.13 |
---|---|
Udemy : Docker & Kubernetes 실전 가이드 (7) (0) | 2023.04.12 |
Udemy : Docker & Kubernetes 실전 가이드 (5) (0) | 2023.04.10 |
Udemy : Docker & Kubernetes 실전 가이드 (4) (0) | 2023.04.10 |
Udemy : Docker & Kubernetes 실전 가이드 (3) (0) | 2023.04.08 |