Docker Compose 란?
Docker Compose 는 여러개의 도커 컨테이너를 정의하고 실행하기 위한 도구이다.
Docker Compose 를 사용하면 복잡한 멀티 컨테이너 도커 애플리케이션을 쉽게 관리할 수 있다. 여러개의 서비스가 함께 동작하는 애플리케이션을 개발, 테스트, 배포할 때 특히 유용하다.
Docker Compose 는 yaml 파일을 사용하여 도커 애플리케이션의 구성을 정의한다. 이 yaml 파일에는 애플리케이션에 필요한 서비스, 네트워크, 볼륨 등의 설정이 포함된다. 또한, 여러 서비스간의 의존성, 실행순서, 환경변수 등을 지정할 수 있다.
Docker Compose 파일의 구성요소
간단한 docker-compose.yml 파일의 예시를 살펴보자.
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
이 예시에서는 web 과 db 라는 두개의 서비스를 정의하고 있다.
web 은 nginx 이미지를 사용하며 host 의 8080 포트와 컨테이너의 80 포트를 매핑하고 있다.
db 는 postgres 이미지를 사용하며 환경변수에서 비밀번호를 설정해주고 있다.
Docker Compose 파일의 구성요소를 좀더 자세히 살펴보면 아래와 같다.
1. 버전(version)
Docker Compose 파일의 버전을 지정한다. 다양한 버전이 존재하며, 사용하는 Docker Compose 의 버전에 따라 파일의 구조가 달라질 수 있다.
version: '3'
2. 서비스(services)
여러개의 서비스를 정의한다. 각 서비스는 도커 이미지를 기반으로 하며, 해당 서비스의 설정 및 의존성을 정의한다.
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
3. 네트워크(networks)
도커 네트워크를 정의한다. 여러 서비스 간에 통신이 필요한 경우 네트워크를 정의하여 그 안에서 서비스 간 통신이 가능하게 할 수 있다.
networks:
my_network:
services:
web:
networks:
- my_network
db:
networks:
- my_network
4. 볼륨(volumnes)
도커 볼륨을 정의한다. 도커 컨테이너의 데이터를 영속적으로 저장하거나 공유하기 위해 사용된다.
volumes:
my_volume:
services:
web:
volumes:
- my_volume:/app/data
5. 환경변수(environment)
서비스의 환경변수를 설정한다. 도커 이미지가 환경변수를 지원하는 경우, 해당 환경변수를 정의하여 사용할 수 있다.
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
Docker Compose 를 사용하면 이러한 설정을 기반으로 여러 컨테이너를 쉽게 실행하고 관리할 수 있다. 일반적으로 사용되는 몇가지 명령어는 다음과 같다.
1. `docker-compose up`
docker-compose.yml 파일에 정의된 모든 서비스를 시작한다. 필요한 이미지가 없는 경우 자동으로 이미지를 빌드한다.
$ docker-compose up
2. `docker-compose down`
docker-compose.yml 파일에 정의된 모든 서비스를 중지하고 관련된 컨테이너를 제거한다.
$ docker-compose down -v
옵션:
- `-v` 또는 `--volumne`: 관련된 볼륨도 함께 제거한다.
3. `docker-compose ps`
현재 실행중인 서비스의 상태를 표시한다. 서비스의 이름, ID, 상태, 포트 매핑 등의 정보를 제공한다.
$ docker-compose ps
4. `docker-compose logs`
실행 중인 서비스의 로그를 표시할 때 사용한다. 이 명령어를 실행하면 모든 서비스의 로그가 출력되거나, 특정 서비스의 로그만 출력할 수 있다.
# 모든 서비스의 로그 출력
$ docker-compose logs
# 특정 서비스의 로그 출력
$ docker-compose logs web
옵션:
- service_name: 특정 서비스의 로그만 표시한다.
- `-f` 또는 `--flow`: 로그를 실시간으로 출력한다. 새로운 로그가 생성될 때마다 업데이트된다.
- `--tail={숫자}`: 최근 {숫자}개의 로그 라인만 출력한다.
- `-t` 또는 `--timestamps`: 각 로그 라인에 타임스탬프를 표시한다.
'Docker' 카테고리의 다른 글
[Docker-compose] 서버의 DB 연결 지연 이슈 (0) | 2024.10.30 |
---|---|
[Docker] 바인드 마운트(bind mount) (0) | 2021.09.19 |
[Docker] Docker 컨테이너 로그 관리 (0) | 2021.06.16 |
[Docker] Timezone 설정하기 (0) | 2021.06.02 |
[Docker] docker 설치하기 (0) | 2021.04.27 |