Docker Compose가 뭘까??
서버를 올리기 위한 문서들을 보면서 docker-compose.yml 이라는 파일을 많이 봤다.
대충 실행 파일 같은데..
언젠간 알아야 하니까.. 정리해보자 !
Docker Compose 란?
도커 컴포즈는 여러 컨테이너를 모아서 관리하기 위한 툴이다.
웹 서비스는 프론트엔드 서버, 데이터베이스 서버, 백엔드 서버로 이루어져 있는 경우가 많은데,
각각을 도커 컨테이너로 작성하고 연결하여 동작하기 때문에 Docker Compose 와 같은 컨테이너 관리 툴이 필요하다.
더 나아가서 서비스 규모가 커지면,
복수의 컨테이너를 유지하고 관리해야 하며 이를 위해 쿠버네티스 등의 관리 툴이 사용된다.
도커와 도커 컴포즈를 잘 다룰 수 있으면, 기본적인 서비스 구현이 가능하고
이를 잘 이해해야 쿠버네티스도 원활하게 익히고 활용할 수 있다고 하니 잘 공부해야겠다..
Docker Compose는 어떻게 작성할까?
도커 컴포즈는 docker-compose.yml 파일을 작성하여, 실행할 수 있다.
야믈 파일 형식을 사용하는데, YAML은 데이터 구조화 문법 중 하나이다.
YAML 문법
# : 해당 라인을 주석 처리
--- : 문서의 시작을 나타냄 (옵션)
...: 문서의 끝을 나타냄 (옵션)
key:value : key에 대한 value값
자료형은 int, string, boolean 지원
리스트 표현
key :
- item
- item
Docker Compose 파일은 다음과 같은 4가지의 큰 카테고리로 작성하며,
이 중에서 보통 version과 services만 설정하여 많이 사용한다.
# Docker Compose 파일 포맷 버전 지정
version: '3'
# 컨테이너 설정
services:
# 컨테이너에서 사용하는 volume 설정으로 대체 가능 (옵션)
volumes:
# 컨테이너간 네트워크 분리를 위한 추가 설정 부분 (옵션)
networks:
- version
- docker compose 파일 포맷 버전 지정
- 기본적으로 3을 많이 씀. 3.8과 같이 최신 버전을 사용하는 경우에는 최신 도커 버전에서만 지원이 됨.
- services
- 여러 컨테이너를 정의하는 핵심 세션이다.
- 각 컨테이너는 서비스로 정의되며, 이름으로 구분된다.
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- frontend
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
networks:
- backend
- image: 사용할 Docker 이미지를 저장, 이미지가 로컬에 없다면 Docker Hub에서 자동으로 가져온다.
- ports: 호스트와 컨테이너 간 포트를 매핑한다. 호스트의 8080 포트로 요청하면 컨테이너의 80 포트로 전달된다. [호스트포트:컨테이너포트]
- volumes: 호스트 디렉터리와 컨테이너 디렉터리를 연결하거나 데이터를 영구적으로 저장한다. [호스트경로:컨테이너경로], 컨테이너가 삭제되어도 데이터는 호스트에 남는다.
- networks: 컨테이너가 연결될 네트워크를 지정한다.
- environment: 컨테이너에 전달할 환경 변수를 설정한다.
- restart: 컨테이너가 종료된 경우 재시작 정책을 설정한다.
호스트와 컨테이너 간의 관계
항목 | 호스트 | 컨테이너 |
운영체제 | Docker 엔진을 실행하는 실제/가상 머신의 OS | Docker 이미지 기반의 경량화된 실행 환경 |
역할 | 컨테이너 실행, 외부와의 연결 관리 | 애플리케이션 실행 |
파일 경로 | 예: /home/user/data | 예: /app/data |
포트 | 외부에서 접근할 때 사용하는 포트 | 내부 애플리케이션이 사용하는 포트 |
네트워크 | 물리적 네트워크 또는 VM의 가상 네트워크를 사용 | Docker 네트워크로 서로 연결 |
- volumes: 컨테이너가 데이터를 영구적으로 저장할 수 있도록 볼륨을 정의한다.
- networks: 컨테이너 간 네트워크 분리를 설정하거나 연결을 정의한다.
'Docker' 카테고리의 다른 글
[Docker] 도커에 대한 기본 이해 (0) | 2024.11.22 |
---|