Docker compose
도커 컴포즈는 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의하여 컨테이너의 묶음으로 관리할 수 있는 작업환경을 제공하는 관리도구를 의미한다. 여러 개의 컨테이너가 하나의 어플리케이션으로 동작할 때 도커 컴포즈를 사용하지 않는다면 일일이 하나씩 컨테이너를 만들어야하는데 해당 방법으로 한다면 관리가 쉽지 않다.
이런 단점을 보완하기 위해서 나온 것이 도커 컴포즈이며 이를 통해 여러개의 컨테이너의 옵션과 환경을 정의하는 파일을 읽어 컨테이너를 순차적으로 생성하는 형식으로 간편하게 여러개의 컨테이너를 관리 할 수 있다.
아래는 도커 컴포즈 파일의 예시이다.참고로 yaml 파일은 뛰어쓰기 2칸을 기준으로 영역을 구분한다.
🐋 docker-compose.yml
version: "3.8"
services:
mongodb:
image: "mongo"
volumes:
- data:/data/db
# environment:
env_file:
- ./env/mongo.env
# networks:
# - networkName
backend:
build: ./backend
restart: always
ports:
- "80:80"
volumes:
- logs:/app/logs
- ./backend:/app
env_file:
- ./env/backend.env
depends_on:
- mongodb
frontend:
build: ./frontend
ports:
- "3000:3000"
volumes:
- ./frontend/src:/app/src
stdin_open: true
tty: true
depends_on:
- backend
volumes:
data:
logs:
- version : 도커 컴포즈의 버전을 지정한다. 최신 버전은 3.8 이다.
- services : 컨테이너들을 제공할 서비스(vcb)를 정의한다.
- build : 해당 이미지를 빌드하기 위한 dockerfile 경로를 적는다 만약에 경로에 여러 이미지 파일이 있어 그 중 어떤 이미지를 지목하여 사용하려고 한다면 아래와 같이 코드를 작성한다.
build:
context: ./app
dockerfile: Dockerfile
context : 도커 파일이 있는 경로
dockefile : 도커 파일 이름 - image : 직접 개발하지 않는 db나 캐시같은 경우에 이미지를 직접 빌드하는 대신 저장소로 부터 이미지를 내려받아 사용한다.
- ports : 외부로 노출시킬 포트의 맵핑을 명시한다.
- restart: 컨테이너의 재시작 정책을 지정한다.
- depends_on : 서비스간의 의존관계를 지정하기 위해 사용한다. 예를 들어서 backend 컨테이너가 올라오기전에 mongodb가 먼저 올라와야 함으로 backend에 depends_on : mongodb 을 사용 할 수 있다.
- env_file : .env 파일을 사용하기 위한 경로 지정
- stdin_open, tty : 입출력 허용을 의미 docker 을 실행할때 -it 옵션과 같다.
- volumes : 볼륨 설정에 사용한다.
- network : 네트워크
참고로 도커 컴포즈로 만들어진 컨테이너들은 자체적인 네트워크를 형성하고 있어서 network 설정을 안해줘도 되지만 다른 네트워크와의 연결을 하고 싶다면 networks: 을 사용하여 표기 한다.
Docker compose 터미널 명령어
- docker compose up: 컴포즈 파일을 실행한다.
- docker compose build: dockerfile을 기반으로 이미지를 빌드하고, 정의된 서비스에 따라 컨테이너를 시작한다.
- docker compose down: 실행중인 서비스를 중지하고, 네트워크 빛 볼륨을 제거한다.
- docker logs: 서비스 로그를 확인한다.
- docker compose restart: 모든 서비스를 재시작한다.
'Cloud > Docker' 카테고리의 다른 글
docker compose로 django, nginx 연결하기 (0) | 2024.07.25 |
---|---|
docker compose을 이용하여 django, postgres 연결하기 (0) | 2024.07.25 |
Docker Hub와 이미지 버전 관리 (1) | 2024.07.25 |
Dockerfile 작성하는 방법과 Docker 명령어 사용하기 (0) | 2024.07.25 |
Docker에 대해서 알아보기 (0) | 2024.07.25 |