docker compose
여러 개의 docker 컨테이너를 관리하는 도구
- docker-compose.yaml 파일에 컨테이너들을 정의
- 모든 컨테이너를 실행하거나 종료할 수 있는 기능을 제공
docker compose 명령어
- docker compose up: 모든 컨테이너를 실행
- docker compose down: 모든 컨테이너 중지
- docker compose ps: 실행 중인 서비스 확인
- docker compose restart <서비스명>: 특정 서비스만 재시작
docker-compose.yaml 예시
services:
app:
image: node:18-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 127.0.0.1:3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:8.0
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
serivces: 서비스(컨테이너)를 정의하는 부분으로 여기에는 두 개의 서비스가 정의됨
- app: Node.js 앱
- mysql: MySQL DB
serivces.[service name].images: 사용할 이미지
serivces.[service name].command: 컨테이너가 실행될 때 실행할 명령어
serivces.[service name].ports: 호스트 머신의 포트와 컨테이너의 포트를 연결
serivces.[service name].working_dir: 컨테이너 내부에서 작업할 디렉터리
serivces.[service name].volumes: 볼륨 마운트
- ./:/app 은 호스트의 현재 디렉터리를 app 컨테이너의 /app 디렉터리에 연결하는 것을 의미
- todo-mysql-data:/var/lib/mysql 은 todo-mysql-data 볼륨을 mysql 컨테이너의 /var/lib/mysql 디렉터리에 연결하는 것을 의미
serivces.[service name].environment: 환경변수를 설정
volumes: 생성할 볼륨을 지정
- todo-mysql-data라는 볼륨을 생성
docker compose 네트워크
docker compose로 실행되는 컨테이너는 같은 네트워크 영역에 존재하며, 서로 서비스 이름으로 통신이 가능함
docker-compose.yaml 파일 생성하기
- frontend: node.js 기반 웹페이지
- backend: Django 기반 api 서버
services:
frontend:
image: simple-web-frontend
backend:
image: simple-web-backend
컨테이너 실행하기
- docker-compose.yaml 파일에서 네트워크가 정의되지 않은 경우 기본 네트워크를 자동으로 생성
$ docker compose up -d

네트워크 목록 확인
- bridge 네트워크가 생성됨
- docker compose up 시 자동으로 생성되는 네트워크로 인해 서비스 끼리 서로 통신이 가능
$ docker network ls

backend와 frontend의 컨테이너 내부에 접속해서 ip 대역을 확인해보면, 같은 네트워크에 포함된 것을 확인할 수 있음
- backend: 192.168.107.3/24
- frontend: 192.168.107.2/24
$ docker exec -it my-website-dockerfile-backend-1 /bin/sh
backend$ ip a
$ docker exec -it my-website-dockerfile-frontend-1 /bin/sh
frontend$ ip a

같은 네트워크에 있는 서비스들은 서비스 이름을 도메인처럼 사용 가능함
- backend에서 frontend로 요청시 192.168.107.2로부터 응답을 받음
- frontend에서 backend로 요청시 192.168.107.3로부터 응답을 받음
backend$ ping frontend
frontend$ ping backend

'DevOps > Docker' 카테고리의 다른 글
[Docker] 투표 앱 docker compose로 배포해보기 (0) | 2024.12.31 |
---|---|
[Docker] Multi-stage build (0) | 2024.12.31 |
[Docker] Volume (0) | 2024.12.31 |
[Docker] Dockefile (0) | 2024.12.31 |
[Docker] 이미지 (0) | 2024.12.31 |