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