[ Udemy : Docker & Kubernetes 실전가이드 (5) ] : Docker로 다중 컨테이너 구축하기 & docker compose
1. React 컨테이너 설정
React를 Docker 컨테이너에서 실행할 때는 -it 태그를 추가해 한다. 이는 밑에서 배우는 Docker Compose 문서에서는 stdin_open: true 및 tty: true 옵션을 설정하여 해결할 수 있다.
2. Node 백엔드 컨테이너 실시간 변경 적용
Node.js 기반의 백엔드 컨테이너에서 코드 변경이 실시간으로 반영되도록 하려면 nodemon을 활용해야 한다. 이를 통해 컨테이너를 재시작하지 않아도 코드 변경 사항이 즉시 적용이 가능하다.
3. Docker 빌드 속도 개선
이미지 빌드 속도가 느리다면 .dockerignore 파일을 추가하고 불필요한 파일을 제외해야 한다. 예를 들어 node_modules, .git, Dockerfile 등을 .dockerignore에 등록하면 불필요한 파일이 컨테이너 이미지에 포함되지 않아 빌드 속도가 확실히 빨라진다.
4. Docker Run 명령어 단축 문제
docker run 명령어가 너무 길어지는 문제가 발생할 수 있는데, 이는 밑에서 추가로 배운 Docker Compose를 사용해 해결 할 수 있다.
5. Docker Compose 활용하기
Docker Compose는 docker build 및 docker run 명령을 하나의 구성 파일로 관리하여 실행을 간편하게 만드는 도구. 다중 컨테이너 환경을 효율적으로 관리할 수 있지만, 다중 호스트 환경에서는 적합하지 않을 수 있다.
5.1 docker-compose.yaml 파일 작성
docker-compose.yaml 파일의 예제.
version: "3.8" # 도커 컴포즈 버전 지정
services: # 사용할 컨테이너 구성
mongodb:
image: 'mongo'
volumes:
- data:/data/db # 명명된 볼륨 사용
env_file:
- ./env/mongo.env
backend:
build: ./backend # Dockerfile이 위치한 경로 지정
ports:
- '80:80'
volumes:
- logs:/app/logs # 명명된 볼륨 사용
- ./backend:/app # 바인드 마운트 사용
- /app/node_modules # 익명 볼륨 사용
env_file:
- ./env/backend.env
depends_on:
- mongodb
frontend:
build: ./frontend
ports:
- '3000:3000'
volumes:
- ./frontend/src:/app/src # 코드 변경 반영을 위한 바인드 마운트
stdin_open: true # -i 옵션과 동일
tty: true # -t 옵션과 동일
depends_on:
- backend
volumes:
data:
logs:
5.2 Docker Compose 실행 명령어
$ docker-compose up # 컨테이너 빌드 및 실행
$ docker-compose down # 컨테이너 중지
이와 같이 docker-compose.yaml 파일을 작성하면 docker-compose up 명령어 하나로 모든 컨테이너를 실행할 수 있어 보다 효율적인 개발 환경을 구축할 수 있다.
🙄 느낀점
실습 위주로 수업이 진행되서 생각보다 재밌게 들을 수 있었다. 이론만 배우다 실습을 하니 뭔가 감을 잡는 느낌..?