[docker] 여러 컨테이너 운용 관리

도커 > Compose

develop, docker
written byzuhern1zuhern

in

2021. 03. 02


공부하는 책
완벽한 IT 인프라 구축을 위한 Docker (2판)
복습을 위해 요약한 것.

목표

docker 책 7장 내용 숙지

  • 여러개의 컨테이너를 운용 관리하는 방법을 설명

7.1 여러 컨테이너 관리의 개요

7.1.1 웹 3계층 시스템 아키텍처

  1. 프론트 서버
  2. 애플리케이션 서버
  3. DB 서버

7.1.2 Docker Compose

  • 여러 컨테이너를 모아서 관리하기 위한 툴
  • docker-compose.yml 에 컨테이너 구성 정보 정의

7.2 웹 애플리케이션을 로컬에서 움직여 보자

7.2.1 Compose 구성 파일의 작성

샘플소스 chap07 https://github.com/asashiho/dockertext2

# docker-compose.yml
version: '3.3'
services:
  # WebServer config
  webserver:
    build: .
    ports:
     - "80:80"
    depends_on:
     - redis

  # Redis config
  redis:
    image: redis:4.0
% docker-compose up
# 1. pulling redis
# 2. building webserver
# 3. Dockerfile 실행
# 3. redis, webserver 컨테이너 시작
# 4. localhost:80 접속 확인
% docker-compose ps
       Name                     Command               State         Ports
--------------------------------------------------------------------------------
chap07_redis_1       docker-entrypoint.sh redis ...   Up      6379/tcp
chap07_webserver_1   python /opt/imageview/app.py     Up      0.0.0.0:80->80/tcp

7.2.2 여러 Docker 컨테이너 정지

% docker-compose stop

7.3 Docker Compose를 사용한 여러 컨테이너의 구성 관리

7.3.1 docker-compse.yml의 개요

YAML

  • YAML은 구조화된 데이터를 표현하기 위한 데이터 포맷
  • Python과 같이 들여쓰기로 데이터의 계층 구조를 나타냄
  • 들여쓰기는 탭이 아니라 반간 스페이스를 사용
  • 데이터의 맨 앞에 ’-‘를 붙이면 배열을 나타낼 수 있음. ’-’ 앞에는 반드시 반각 스페이스 넣기

complse 정의 항목

  • services:
  • networks:
  • volumes:
  • version: (default: 1.0, compose 정의 파일의 버전: Docker engine 버전과 연계)
# docker-compose.yml
# 버전을 지정
version: '3.3'
# 서비스 정의
services:
  # WebServer config
  webserver:
    image: ubuntu
    ports:
     - "80:80"
    networks:
     - webnet
# 네트워크 정의
networks:
  webnet:
# 데이터 볼륨 정의
volumnes:
  data-volume:

7.3.2 이미지 지정

  • 이미지의 이름 또는 이미지ID 중 하나를 지정
  • 태그 지정 (default: latest)

7.3.3 이미지 빌드

build

  • 이미지 작성을 Dockerfile에 기술하고 그것을 자동으로 빌드하여 베이스 이미지로 지정할 때 사용
  • Dockerfile의 파일 경로를 지정

    version: '3.3'
    services:
    webserver:
    build:
      # dockerfile이 있는 디렉토리
      context: /data   
      # dockerfile명이 'Dockerfile'이 아닐 때 지정
      dockerfile: Dockerfile-alternate 
      # 빌드할 때 인수 args로 지정 (boolean은 따옴표로 감싸기)
      args:
        projectno: 1
        user: asa

7.3.4 그 외

설정 지정
command 컨테이너에서 작동하는 명령
entrypoint 베이스 이미지에서 지정되어 있을 때는 그 명령을 덮어씀
link 컨테이너간 연결 (서비스명:앨리어스명)
port 컨테이너가 공개하는 포트 지정
expose 컨테이너 내부에만 공개하는 포트 지정
depends_on 서비스의 의존관계 정의 (컨텡너 시작 순서만 제어)
environment 환경변수 지정
env_file 환경변수 파일 지정
container_name docker compose로 생성되는 컨테이너의 이름 지정
label 컨테이너에 라벨을 지정 (확인 docker-compose config)
volumes 컨테이너에 볼륨을 마운트
volumes_from 다른 컨테이너로부터 모든 볼륨을 마운트할 때 대상 컨테이너 지정

7.4 Docker Compose를 사용한 여러 컨테이너의 운용

명령 설명
docker-compose --version 버전 확인
docker-compose up 여러 컨테이너 생성
docker-compose ps 여러 컨테이너의 상태 확인
docker-compose run 컨테이너에서의 명령 실행
docker-compose start/stop/restart 시작/정지/재시작
docker-compose pause/unpause 정지/재개
docker-compose port/config 구성 확인
docker-compose kill/rm 정지/삭제
docker-compose down 여러 리소스의 일괄 삭제