공부하는 책
완벽한 IT 인프라 구축을 위한 Docker (2판)
복습을 위해 요약한 것.
목표
docker 책 7장 내용 숙지
- 여러개의 컨테이너를 운용 관리하는 방법을 설명
7.1 여러 컨테이너 관리의 개요
7.1.1 웹 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 |
여러 리소스의 일괄 삭제 |