Docker 공부노트 - Multi-container apps -docker-compose

코변·2022년 10월 23일
0

도커 공부노트

목록 보기
5/5
post-thumbnail

Photo by Rubaitul Azad on Unsplash

—network 설정을 통해서 다중 컨테이너 사용이 가능하다. 그러나 일일히 네트워크 설정을 해가며 컨테이너를 하나씩 띄워야 한다는 번거로움이 있다.

다중 컨테이너 설정을 더 쉽게 만들기 위해서 도커 컴포즈를 제공한다.

  • 도커 컴포즈는

    • 다수의 docker build명령과 docker run 명령어를 하나의 구성파일로 가진다.
    • 즉 하나의 구성파일로 다수의 이미지를 빌드하고 다수의 컨테이너를 띄울 수 있다.
    • 마찬가지로 하나의 명령어로 모든 컨테이너(묶여있는)를 종료할 수 있다.
  • 더 알아야 할 것들

    • docker-compose는 docker파일을 대체하지 않는다.
    • 이미지나 컨테이너를 대체하지 않는다.
    • 다중 호스트에 다중 컨테이너를 관리하는데 적합하지 않다.
  • docker-compose.yaml

# 버전을 명시하는 것으로 시작한다.
# 코드의 버전이 아니고 도커 컴포즈의 버전이다.
version: "3.8"
# 컨테이너들을 명시하기 위한 명령어
services:
# 원하는 컨테이너 이름을 만들어준다. 강의에서는 몽고디비, 백엔드 프론트엔드로 나누었다,
  mongodb:
# 몽고db라는 컨테이너에서 사용할 이미지 이름을 적어준다.
    image: 'mongo'
#  -v 태그로 볼륨을 선언했던 것과 같은 값을 넣어주면 된다.
# 아래와 같이 -로 구분하여 여러개의 볼륨을 선언할 수도 있다.
		volumes:
			- data:/data/db
		environment:
# 아래와 같이 환경변수를 설정할 수도 있고
			MONGO_INITDB_ROOT_USERNAME: root
# 아래와 같이 설정할 수도 있다.
			- MONGO_INITDB_ROOT_USERNAME=root
# env파일을 명시해줄 수도 있다.
		env_file:
			- ./env/mongo.env
# networks를 통해서 네트워크를 설정할 수 있으나 services내에 있는 컨테이너는
# 도커가 알아서 네트워크로 묶어준다.
		networks:
  backend:
# 이미지를 가져오는 것도 가능하지만 직접 작성한 dockerfile을 통해 빌드도 가능하다.
# 빌드 명령어와 도커파일이 있는 위치를 명시해주면 이미지를 빌드할 수 있다.
		build: ./backend
# 도커파일의 이름이 다를 경우 아래와 같이 빌드할 수 있다.
		build:
			context: ./backend
			dockerfile: Dockerfile
# 아래와 같이 아규먼트 값도 넣어줄 수 있다.
			args:
				some-arg:1
	ports:
		- '80:80'
	volumes:
		- logs:/app/logs
		- ./backend:/app
    - /app/node_modules
	env_files:
		- ./env/backend.env
# 한 컨테이너가 다른 컨테이너에 의존할 수가 있다. 이 이 yaml파일을 예로들면 백엔드는 mongodb에 의존한다.
	depends_on: 
		- mongodb
  frontend:
		build: ./frontend
		ports:
			- '3000:3000'
		volumes:
			- ./frontend/src:/app/src
# 리액트의 특성상 docker run에 -it 태그를 추가해주어야 하는데 이 it 모드는 아래와 같이 추가해줄 수 있다.
		stdin_open: true
		tty: true
		depends_on: 
			- backend

# 서비스 안쪽이 아닌 서비스 아래쪽 인덴트에 named volume을 명시해주어야 한다.
volumes:
# 콜론 뒤에 무언가 적어줄 필요는 없다. 도커가 named volume을 인식할 수 있게 하는 구문이다.
	data:
	logs:
  
  • 도커컴포즈 실행하기
# 컴포즈 파일에서 찾을 수 있는 모든 서비스가 한꺼번에 시작된다.
# -d 태그를 통해서 디태치 모드로 서비스를 시작할 수 있다.
# --build 태그를 추가해주면 이미지 리빌드를 강제로 실행할 수 있다.
docker-compose up

# 모든 컨테이너가 삭제되고 생성된 디폴트 네트워크가 종료된다.
# -v 태그를 추가해서 볼륨도 삭제해줄 수 있다.
docker-compose down
profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글