[프로그래머스] 데브코스 데이터엔지니어링 TIL Day 49

주재민·2023년 12월 21일
0
post-thumbnail

📖 학습주제

개발환경 구축을 위한 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에 네트워크를 나열하고 네트워크를 적절하게 서비스에 지정해주어야함

0개의 댓글