| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- CJ UNIT
- 백준 알고리즘
- 코딩봉사
- 백준알고리즘
- 소프티어
- docker
- 백준
- 문제풀이
- kotlin
- 코틀린
- C++
- MYSQL
- SW봉사
- 자바
- 데이터베이스
- 코딩교육봉사
- 파이썬
- java
- python
- softeer
- 공부일지
- 정보처리산업기사
- SQL
- 알고리즘
- 프로그래머스
- 회고
- 도커
- BFS
- programmers
- 1과목
- Today
- Total
JIE0025
[Docker] 도커 컴포즈의 정의와 yaml파일 구성요소 본문
이전에 도커에 대한 개념을 잡고 실습을 해봤었다.
[Docker] 도커의 기본 개념과 전체 흐름 이해하기
https://jie0025.tistory.com/736
[Docker] 도커 Hub / 자주 사용되는 도커 CLI 명령어
https://jie0025.tistory.com/737
[Docker] 외부에서 접속시 컨테이너 네트워크로 포트 연결
https://jie0025.tistory.com/738
오늘은 도커 컴포즈에 대해 알아보자.
✅ Docker Compose
도커 컴포스는 다수의 컨테이너를 관리하기 위해 활용한다.
컨테이너를 띄우는 상황을 생각해보자.
1개 2개의 컨테이너 관리는 문제가 없다.
근데 관리해야할 컨테이너의 개수가 100개 200개 500개가 되는순간은 ?
도커로 한계가 발생한다.
여러개의 컨테이너가 하나의 어플리케이션으로 동작하는 상황을 생각하자.
웹서버 컨테이너와 DB컨테이너 2개의 컨테이너가 구성되어있다.
이때 두 서버가 모두 제대로 동작하는지 확인하기 위해 두개의 컨테이너를 모두 접속하여
실행해보고 확인해볼수있기는한데....
이런 절차가 매우 번거로우며,
차라리 두 컨테이너가 묶음으로 관리되면 좋겠다는 생각을 하게 된다.
이런 상황에서 도커 컴포즈를 사용한다.
컨테이너를 이용한 서비스 개발과 CI를 위하여 여러개의 컨테이너를 하나의 프로젝트로서 다룰수 있는 환경을 제공해준다.
결국 도커 컴포즈 한 업무를 구성하는 여러개의 컨테이너를 한번에 관리하는 기술이다.
✅ 도커 컴포즈 파일 정의
도커에서 자체 제공하며 yaml 파일로 작성한다.
version, services, volumns, networks 4가지 항목으로 구성된다.
⚠️ yaml파일은 탭을 인식하지 못하여 2개의 공백을 사용해 하위 항목을 작성해주면 된다.
# example
version: '2.10'
services:
tomcat1:
image: tomcat1 //사용할 컨테이너 이미지 이름
container_name: tomcat3 ////컨테이너 이름을 정해야 name오류가 안뜸
ports:
- 8080:8080 //컨테이너 포워딩 설정
mysql2:
image: mysql2
container_name: mysql2
ports:
- 3307:3306
environment: //환경변수 설정
MYSQL_PASSWORD: root
version:
버전을 정의하는 부분이다.
services :
애플리케이션의 각 컨테이너를 정의하는 섹션이다.
서비스 내부에 컨테이너를 정의하는데
컨테이너의 이미지/ 명령 / 환경변수 / 네트워크 설정등을 포함할수있따>
아래 예시를 보면 web으로 엔진엑스 서버를 실행하고
db로 postgre 를 실행한다; .
엔진엑스 서버는 컨테이너 내부에서 80포트로 동작하며
볼륨쪽에선 로컬의 ./html 디렉터리를 /usr/share/nginx/html 디렉터리로 마운트한다.
DB는 Postgre SQL을 실행하는데 환경변수를 통해 데이터베이스 설정을 지정한다.
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- my-network
db:
image: postgres:13
environment:
POSTGRES_USER: example
POSTGRES_PASSWORD: example
POSTGRES_DB: example_db
volumes:
- db-data:/var/lib/postgresql/data
networks:
- my-network
volumes
volumes:
mydata:
- 데이터를 영구적으로 저장할 수 있는 도커 볼륨을 정의한다
- 컨테이너가 삭제되더라고 데이터가 유지될수 있게 하는 것이다.
networks
networks:
mynetwork:
networks
도커 네트워크를 정의하는 부분인데
각 서비스가 이 네트워크를 통해 서로 통신 할 수 있다.
references
https://seosh817.tistory.com/387#google_vignette
https://cozy-dev-area.tistory.com/75
'Infra > Cloud, Docker, Kubernetes' 카테고리의 다른 글
| [Docker] 외부에서 접속시 컨테이너 네트워크로 포트 연결 (0) | 2025.10.30 |
|---|---|
| [Docker] 도커 Hub / 자주 사용되는 도커 CLI 명령어 (1) | 2025.10.29 |
| [Docker] 도커의 기본 개념과 전체 흐름 이해하기 (0) | 2025.10.28 |
| [Docker] 컨테이너 만들고, 내부로 설치파일 옮기기 (0) | 2025.03.15 |
| [Docker] 도커 환경의 이해 - 도커허브, 레지스트리 (0) | 2025.01.29 |