[Docker] Docker Compose

·2024년 2월 7일

Start Docker!

목록 보기
8/9

Docker Compose란?

  • 다중 컨테이너의 설정을 보다 쉽게 사용하기위한 툴
  • 여러개의 컨테이너를 한개의 파일에 정의해서 사용
  • 사용한 컨테이너는 모두 같은 네트워크에 포함됨

Docker Compose 구성하기

  • docker-compose.yml / docker-compose.yaml
version: "3.8"
services: 
  mongodb:
    image: 'mongo'
		volumes:
			- data:/data/db
		container_name: mongodb # 컨테이너 이름 지정
		environment:
			# MONGO_INITDB_ROOT_USERNAME: max
			- MONGO_INITDB_ROOT_USERNAME=max
		env_file:
			- ./env/mongo.env
		networks: # compose는 같은 네트워크에 포함이기 때문에 사용안하는거 권장!
			- goals-net
  backend:
		# 도커 파일 찾아서 빌드 후 이미지로 사용
		build: ./backend
		# build:
		#  context: ./backend
		#  dockerfile: Dockerfile
    #  args:
    #    somne-arg: 1
		restart: always # 재시작
		ports:
			- '80:80'
		volumes:
			- logs:/app/logs # Named Volume
			- ./backend:/app # Binds Mount
			- /app/node_modules # Anonymous Volume
		env_file:
			- ./env/backend.env
		depends_on:
			- mongodb
volumes: # 키 값만 추가
	data: 
	logs:

version

  • Docker Compose의 버전을 명시

Service

  • 사용할 컨테이너들을 명시

image vs build

  • image는 Docker Hub에서 이미지를 찾아서 사용
  • build는 작성한 Dockerfile을 빌드해서 사용

volumes

		volumes:
			- logs:/app/logs # Named Volume
			- ./backend:/app # Binds Mount
			- /app/node_modules # Anonymous Volume

환경변수

		environment:
			# MONGO_INITDB_ROOT_USERNAME: max
			- MONGO_INITDB_ROOT_USERNAME=max
		env_file:
			- ./env/mongo.env
  • 파일을 이용하거나 다음과 같이 선언 가능

-it 옵션이 필요할때

		stdin_open: true # -it
		tty: true # -it

실행이 필요할때

command: sh -c "yarn install && yarn run dev"

depends_on

		depends_on:
			- backend
            - mongodb
  • 순서를 정하는 것
  • 해당 컨테이너들을 실행한 후 실행한다.
  • 실행순서를 정하는 것일뿐, 실행을 완료하지는 않음

restart

		restart: always # 재시작

port

		ports:
			- '80:80'

실행순서로 인한 문제

depends_on을 활용해서 컨테이너를 실행하여도 컨테이너가 완전히 실행한 후 다음 컨테이너를 실행하지 않는다.

  1. restart를 이용하여 해결
  2. wait-for-it이나 dockerize 이용
  3. DB의 실행을 기달리는 코드를 작성하는등의 코드에서 해결

구성한 파일 실행하기

# 실행 -d: detach
# --build: rebuild
docker-compose up -d

# 이미지 build
docker-compose build

# 종료 및 삭제
docker-compose down -v

0개의 댓글