docker-compose란?
•
복수 개의 컨테이너를 실행시키는 도커 애플리케이션이 정의를 하기 위한 툴
•
yaml 파일을 이용해 서비스 구성 가능
구조
# docker-compose.yml
version: '3' # docker-compose 버전
services: # 서비스 관리
frontend: # 서비스 명
build: # dockerfile 이용 build 및 생성이미지 base로 사용
context: ./frontend # Dockerfile 빌드 경로
# 또는
dockerfile: dockerfile-server ## dockerfile이 아닐시 파일명 입력필요
ports:
- "172.16.250.245:8080:80" # 포트 번호
# 또는
- target: 8080 ## 컨테이너 내부 포트
published: 8080 ## 호스트 OS에서 공개할 포트
protocol: ## 포트 프로토콜
container_name: pms-frontend
expose: # dockerfile에 expose가 명시되있을 경우 작성X
- 8080 #도커 내부 포트
backend:
build:
context: ./pms_backend
ports:
- "172.16.250.245:3000:3000"
container_name: pms-backend
nginx:
image: nginx:stable-alpine # 사용할 이미지 명
container_name: pms-proxy # 컨테이너 이름
ports:
- "80:80"
depends_on:
- frontend
- backend
volumes:
- ./mysql/mysql_data:/var/lib/mysql
- ./mysql/sqls/:/docker-entrypoint-initdb.d/
Bash
복사
version : 버전
services : 컨테이너 관리
image : 이미지 지정
•
이미지가 로컬 환경에 없다면 해당 이미지를 다운받아서 base 이미지로 사용
•
<이미지 이름>:<버전>
build : Dockerfile 빌드
•
context <Dockerfile 빌드 경로> : 해당 경로에 있는 Dockerfile이 실행
•
+ dockerfile <파일명> : dockerfile의 파일명이 dockerfile이 아닐 경우 파일명 입력
ports : 외부 통신
•
호스트 OS와 컨테이너의 포트를 바인딩 시키는 포트포워딩 역할
•
컨테이너의 포트번호만 지정한 경우, 호스트 머신의 포트는 랜덤한 값으로 설정
•
container:host (protocol)
◦
target : 컨테이너 내부 포트
◦
published : 호스트OS의 포트
◦
protocol : 포트 프로토콜
expose : 내부 통신
•
컨테이너-컨테이너간의 통신만이 필요한 경우에 사용 (호스트 접근X)
•
일반적으로 로그 서버와 같이 호스트 머신에서 직접 액세스하지 않고, 웹 애플리케이션 서버 기능을 갖고 있는 컨테이너를 경유해서만 액세스하고 싶은 경우 등에 사용
•
dockerfile에 expose가 명시되어 있다면 docker-compose에는 작성X
depends_on : 종속
•
services간 종속 설정
container_name : 컨테이너 이름
volumes : 볼륨
dockerfile에서 사용되는 volume과 같이 컨테이너에 볼륨을 마운트할 때 사용
<호스트>:<컨테이너>
•
:ro : 읽기 전용