1. Docker Compose란?
: 여러 컨테이너를 모아서 관리하기 위한 툴
웹서비스는 프론트엔드 서버, 데이터베이스 서버, 백엔드 서버로 이루어져 있는 경우가 많음
각각을 docker 컨테이너로 작성하고, 연결하여 동작하므로, Docker Compose와 같은 컨테이너 관리 툴이 필요함
더 나아가 서비스 규모가 커지면, 복수의 컨테이너를 유지하고 관리해야 하며, 이를 위해 쿠버네티스 등의 관리 툴이 사용됨
2. Docker Compose 작성 기본
Docker Compose는 docker-compose.yml 파일을 작성하여 실행할 수 있음
docker-compose.yml 파일은 YAML 형식으로 작성함
3. docker-compose.yml 예시로 이해하는 Docker Compose 사용법
Docker Compose 명령은 기본적으로 Dockerfile에서 익힌 명령에 기반하고 있음
( 예시 )
version : "3"
services:
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=ys
- MYSQL_DATABASE=myDb
ports:
- "3306:3306"
- 기본적으로, 다음과 같은 4가지의 큰 카테고리로 작성하며, 이 중에서 보통 version과 services만 설정하여 많이 사용함
# Docker Compose 파일 포맨 버전 저장
version: "3"
# 컨테이너 설정
services:
# 컨테이너에서 사용하는 volume 설정으로 대체 가능
volumes:
# 컨테이너간 네트워크 분리를 위한 추가 설정 부분
networks:
- version : Docker Compose 파일 포맷 버전 지정, docker 버전에 따라 지원하는 Docker Compose 버전이 있으며, 기본적으로 버전 3으로 사용하는 것이 일반적임
- services: 위 항목 아래에서 여러개 또는 하나의 컨테이너를 설정함
- image : 다음 코드에서 db는 컨테이너 이름을 정의한 것으로, db라는 이름의 컨테이너 작성 시, Docker Hub에 있는 이미지를 사용할 셩우, image를 설정하면됨
services:
db:
image: mysql:5.7
4. restart: 컨테이너가 다운되었을 경우, 항상 재시작하라는 설정
5. environment : Dockerfile의 ENV 옵션과 동일한 역할호, 패스워드 등 보안이 필요한 부분을 docker compose 보다는 별도 파일로 작성하여, env_file 옵션으로 읽어들이는 방식을 쓰는 경우도 많음
services:
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/var/lib/mysql
env_file:
- ./mysql.env
5. Docker Compose 실행/ 중지 하기
- 실행
보통 백그라운드 실행을 의미하는 -d 옵션을 사용하여 실행함
docker-compose up -d
이미지 재 빌드가 필요하면 --build 옵션을 추가해야 함
그렇지 않으면, 이미 작성된 이미지를 사용하게 됨
docker-compose up --build -d
- 중지
Docker Compose 중지 명령
docker-compose stop
- 삭제
docker-compose up으로 생성된 컨테이너 삭제 명령
docker-compose down
6. docker-compose.yml 예시로 이해하는 Docker Compose 사용법 2
기존에 작성한 docker-compose.yml에 컨테이너를 추가하여, 추가 문법 이해하기
version: "3"
services:
app:
build:
context: ./01_FLASK_DOCKER
dockerfile: Dockerfile
links:
- "db:dbcontainer"
ports:
- "80:8080"
container_name: appcontainer
depends_on:
- db
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=ys
- MYSQL_DATABASE=myDb
ports:
- "3306:3306"
container_name: dbcontainer
- build : 이미지를 Dockerfile 을 기반으로 작성 시 사용 ( context : Dockerfile 이 있는 디렉토리, dockerfile: Dockerfile 파일 명 )
- links : 컨테이너 내부에서 다른 컨테이너를 접속하고 싶을 때 사용, 위의 예시에서는 db 컨테이너를 app 컨테이너에서 사용하고 싶을 때, db라는 이름으로 컨테이너 접속 가능
- depends_on: 여러 컨테이너를 Docker Compose로 실행할 경우, 각 컨테이너가 실행을 시작하는 시점이 미묘하게 달라 에러가 날수 있다. 이때, depends_on으로 컨테이너 실행 순서를 제어할 수 있다.
7. 그 외 명령어
docker-compose logs : 각 컨테이너의 모든 로그(출력 결과) 확인
docker-compose config : 실행중인 Docker Compose와 docker-compose.yml 설정 확인
docker-compose exec 컨테이너 이름 : 실행중인 컨테이너에 명령어를 실행
'Docker' 카테고리의 다른 글
5. nginx_apache (0) | 2023.08.19 |
---|---|
3. Docker link (0) | 2023.08.13 |
2. docker 조사하기 (0) | 2023.08.12 |
1. Dockerfile 이란? (0) | 2023.08.12 |
0. Docker 란? (0) | 2023.08.12 |
댓글