도커 컴포즈는 무엇이고
어떻게 사용할까?
도커 컴포즈란?
--
도커 컴포즈는
여러 개의 도커 컨테이너를 하나의 파일에 정의하여
복잡한 애플리케이션의 구조를 파일로 관리할 수 있다.
즉, 여러 개의 컨테이너들을 관리하는 도구이다.
도커 컴포즈는 도커 데스크답을 설치 하면 기본으로 같이 설치된다.
도커 컴포즈를 사용하는 가장 큰 장점 중에 하나는
로컬 개발환경(PC)에서 아주 편리하게 활용할 수 있다.
도커 컴포즈를 사용하지 않았을 때에는
웹 서버, 백엔드 서버, DB 서버, 볼륨 등
각자 빌드, 컨테이너 실행, 볼륨 생성 등의 작업을 직접 동작시켜서 애플리케이션을 구현했다.
- "docker create network"로 네트워크 생성
- "docker run"으로 데이터베이스 서버 실행
- "docker run"으로 백엔드 서버 실행
- "docker run"으로 프론트엔드 서버 실행
- 등등
도커 컴포즈르 사용하게 되면
빌드, 컨테이너 실행, 볼륨 생성 등의 작업을
하나의 파일에 정의하여 해당 파일을 실행시키면 한 번에 모든 작업이 자동으로 실행되어
애플리케이션을 구현할 수 있게 된다.
- 도커 컴포즈 실행하는 명령어
--
도커 컴포즈 파일 작성 방법
--
도커 컴포즈는
"docker-compose.yml" 파일을 생성하여 정의한다.
내 로컬PC에서 소스코드로 이미지를 빌드하는 과정도 필요하다면
해당 소스코드가 존재하는 (정확히는 dockerfile이 존재하는) 디렉터리는 "docker-compose.yml"파일이 존재하는 경로와
동일한 곳에 있는 것이 "docker-compose.yml"파일에서 경로를 지정할 때 편하다.
데이터베이스, 백엔드, 프론트 프로젝트를 한 번에 이미지빌드, 컨테이너 실행을 동작하게 하는 도커 컴포즈
도커 컴포즈를 통해 여러 프로젝트 소스코드와 dockerfile을 가지고
볼륨 생성, 이미지 빌드와 컨테이너 실행까지 모두 정의하여 해당 도커 컴포즈를 실행하게 되면 모든 동작이 자동으로 이루어진다.
- version 필드는 해당 도커 컴포즈의 API 버전을 정의한다. (자바 버전처럼 도커 컴포즈도 버전이 존재함)
- services 필드는 실제로 실행할 컨테이너들의 리스트를 정의한다.
(services 필드의 바로 아래 단계 목록이 컨테이너를 의미) - rm-postgres처럼 외부 이미지만 사용하는 경우에는 build필드 없이 image필드의 값만 채워주면 된다.
- build 필드에 값을 정의해 주어서 이미지 빌드를 해야 하지만 이미 해당 이미지 존재 한다면 build는 자동으로 생략된다.
- network 필드가 생략되어 있다면 자동으로 default 네트워크가 생성되어 해당 네트워크에 연결된다.
- volumes 필드를 생성 후 마운트 생략 시 자동으로 해당 볼륨으로 마운트 된다.
- depends_on 필드는 컨테이너의 실행 순서를 정의하는 필드로 해당 필드에 정의한 컨테이너가 실행되면 현재 컨테이너를 실행하겠다는 의미이다. (이미지 빌드는 상관없음)
network 필드를 정의하여 직접 network에 연결하는 도커 컴포즈
volumes 필드를 정의하고 직접 볼륨에 마운트 하는 도커 컴포즈
컨테이너의 리소스 사용량 제한하는 도커 컴포즈
예상치 못하게 컨테이너가 종료되었을 때 재실행 여부를 의미하는 도커 컴포즈 필드
공통 환경 변수를 정의할 때 묶어서 정의하는 도커 컴포즈
"x-environment" 필드에서 "&"표시와 함께 환경 변수 그룹명을 지정하고
해당 환경 변수 그룹을 사용하려면
"<<" 꺽쇠 기호와 함께 ":" 콜론을 사용하고 "*" 아스타와 함께 공통 변수 그룹명을 사용하면 된다.
해당 기능은 컴포즈 3버전 이상부터 지원한다.
--
도커 컴포즈 조작 명령어
--
도커 컴포즈 명령어를 작성하는 위치는 항상 도커 컴포즈 파일이 존재하는 위치에서 명령어를 작성해야 한다.
도커 컴포즈를 동작하는 명령어
docker compose up
백그라운드에서 실행시키는 명령어 (-d 옵션을 추가로 사용)
docker compose up -d
현재 실행 중인 서비스 상태 조회 명령어
docker compose ps
도커 컴포즈에 정의된 서비스의 이미지 빌드하는 명령어 (컨테이너를 실행하지 않고 이미지 빌드까지만 동작시킴)
docker compose build
실행 중인 서비스의 로그 조회 명령어
docker compose logs
도커 컴포즈로 실행시킨 모든 환경을 종료 및 제거시키는 명령어
docker compose down
도커 컴포즈를 동작할 때 이미 이미지를 가지고 있어도 다시 이미지를 재빌드하는 명령어
(원래 이미 이미지가 있으면 빌드는 건너뛴다.)
docker compose up --build
docker compose up -d --build
이러한 경우 기존 이미지를 제거하고 새로운 이미지로 빌드 동작
--
참고 및 출처
'Docker' 카테고리의 다른 글
컨테이너 최적화하기 (컨테이너에 CPU, 메모리 한도 지정) (0) | 2024.07.02 |
---|---|
3Tier 아키텍처 구성 방법 (+Nginx 설정) (0) | 2024.07.01 |
이미지 빌드시 캐싱 활용하기 (0) | 2024.06.30 |
이미지 레이어 관리하기 (0) | 2024.06.29 |
도커 볼륨, 마운트, 바인드 마운트 (+명령어) (0) | 2024.06.28 |