OS/Docker

docker-compose

MellowHoney 2024. 4. 1. 20:46
728x90
반응형

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/

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 : 읽기 전용
반응형