📖 학습주제
개발환경 구축을 위한 Docker와 K8S 실습 (4)
Docker-Compose로 다수 Container로 실행해보기
Docker-Compose
- 다수의 Container로 소프트웨어가 구성되는 경우 사용할 수 있는 툴 + 환경설정파일
- docker-compose.yml로 설정
- 여기서 다양한 테스트등도 수행가능
- 다양한 버전을 만드는 것도 일반적 (dev, test, prod 등등)
- 개별 Container를 따로 관리하는 것보다 훨씬 더 생산성이 높음
- 환경설정 파일의 이름은
docker-compose.yml이나 docker-compose.yaml
- 하지만 배워야할 것도 많고 복잡해짐
- 사용법 자체는 간단 : 소프트웨어를 구성하는 모든 컨테이너에게 적용됨
- docker-compose build
- docker-compose up
- docker-compose pull
- docker-compose ps
- docker-compose down
- docker-compose start
- docker-compose stop
- docker-compose rm
docker-compose.yml 작성
- 다양한 버전이 존재하는데 우리는 v2와 v3가 합쳐진 버전 사용 예정
- services: 다음으로 프로그램을 구성하는 서비스들을 지정
- 각 서비스는 별개의 Docker Image 지정과 Docker Container 실행으로 구성됨
- 즉 각 서비스는 자신의 Dockerfile을 갖고 있어야함 아니면 docker hub등에서 이미지를 다운로드
- 서비스별로 포트번호, 환경변수, 디스크 볼륨등을 지정해야함
- 서비스 이름은 아무 이름이나 가능
- volumes: 앞서 사용된 docker volume들을 지정
- networks: 앞서 사용된 network들을 지정
- network은 지정하지 않으면 같은 docker-compose 그룹 내에서는 모두 연결이 됨
- “default”라는 이름으로 기본 네트웍이 만들어짐
docker-compose.yml 작성 예
services:
frontend:
build: ./frontend
ports:
- 3000:3000
backend:
build: ./backend
ports:
- 3001:3001
environment:
DB_URL: mongodb://database/vidly
database:
image: mongo:4.0-xenial
ports:
- 27017:27017
volumes:
- vidly: /data/db
volumes:
vidly:
docker-compose로 이미지 생성과 관리
docker-compose build : build 키로 지정된 것들 대상
docker-compose pull : docker hub에서 이미지들을 읽어오려고 함
docker images : 각 개별 이미지 앞에 폴더 이름을 prefix로 붙임 (docker hub에서 읽어온 것 제외)
docker-compose images : 컨테이너에 의해 실행되고 있는 이미지들만 보여줌
docker-compose push : docker hub으로 이미지들을 푸시하려고 함
docker-compose로 소프트웨어 시작과 중단
docker-compose up : build => create => start
- cker-compose create
- docker-compose start
docker-compose down
docker-compose stop
docker-compose rm
docker-compose ls : docker-compose를 그룹별로 보여줌
docker-compose ps
docker-compose 네트워킹
- docker끼리 네트워크 연결이 필요한 경우
- services에 준 이름으로 호스트 이름이 생성됨
- 내부에 DNS 서버가 하나 생성되어 이름을 내부 IP로 변환해줌
- 별도로 네트워크를 구성하고 싶다면
- networks에 네트워크를 나열하고 네트워크를 적절하게 서비스에 지정해주어야함