쿠버네티스 교육/강의 내용 정리

220617_4_도커_Docker Compose란

kimhope 2022. 6. 17. 20:49
728x90

Docker Compose란


Docker Compose

여러 컨테이너를 모아 관리하는 툴

  • docker-compose.yml 파일에 컨테이너의 구성 정보를 정의하여 동일 호스트상의 여러 컨테이너를 일괄적으로 관리할 수 있음
  • compose 정의 파일은 웹 애플리케이션의 의존 관계를 모아서 설정할 수 있음
  • 정의 파일을 기반으로 docker-compose 명령을 실행하면 여러 개의 컨테이너를 모아서 시작하거나 정지할 수 있음
  • 컨테이너 구성 정보를 YAML 형식의 파일로 관리할 수 있음
  • CI/CD 프로세스에서 자동 테스트를 할 때 환경 구축에 그대로 이용할 수 있음

 


 

Compose 구성 파일 작성

Docker Compose는 구성 정보를 정의 파일에서 설정함

  • Compose 정의 파일 확인
  • 'webserver'와 'redis'라는 이름의 서비스 2개 정의
  • webserver 서비스는 커런트 디렉토리에 있는 Dockerfile에 정의한 구성의 이미지를 빌드( build: . )하고, 외부에 대해 80번 포트를 공개( port: )하여 컨테이너 시작
  • 컨테이너는 redis 서비스에 의존( depends_on: )함
  • redis 서비스는 Docker Hub에 공개되어 있는 Redis의 공식 이미지인 'redis'의 버전 4.0을 베이스 이미지( image: )로 하여 컨테이너 시작
[root@localhost compose]# cat docker-compose.yml
version: '3.3'
services:
  # WebServer config
  webserver:
    build: .
    ports:
      - "80:80"
    depends_on:
      - redis

  # Redis config
  redis:
    image: redis

 


 

Docker Compose 명령

주요 서브 명령

  • docker-compose 명령은 docker-compose.yml을 저장한 디렉토리에서 실행됨
명령 설명
up 여러 Docker 컨테이너 생성/시작
stop 여러 Docker 컨테이너 정지
down 리소스 삭제
ps 컨테이너 목록 표시
logs 컨테이너 로그 출력
run 컨테이너 실행
start 컨테이너 시작
restart 컨테이너 재시작
pause 컨테이너 일시 정지
unpause 컨테이너 재개
port 공개 포트 번호 표시
config 구성 확인
kill 실행 중인 컨테이너 강제 정지
rm 컨테이너 삭제

 


 

docker-compose.yml 작성

image: 이미지 지정

  • Docker 컨테이너의 베이스 이미지 지정
  • 이미지 이름 또는 이미지 ID 지정
  • 로컬 환경에 없는 경우 Docker Hub로부터 자동 다운로드
  • 태그를 지정하지 않는 경우 최신 버전 다운로드
services:
webserver:
    image: khj/imagetest:1.0 # 태그 지정 또는
    image: ubuntu # 태그를 지정하지 않음

 

 

build: 이미지 빌드

  • 이미지의 작성을 Dockerfile에 기술하고 자동 빌드하여 베이스 이미지로 지정할 때 사용
  • Dockerfile의 파일 경로 지정
  • docker-compose.yml 파일이 있는 디렉토리를 커런트 디렉토리로 했을 때 Dockerfile의 위치를 지정함
  • build 지정
sevices:
  webserver:
    build: .

 

  • Dockerfile 작성
FROM ubuntu

 

  • 컨테이너 생성
docker-compose up --build

 

 

  • Dockerfile과 컨텍스트 지정
  • /compose에 저장되어 있는 Dockerfile-com이라는 이름의 Dockerfile을 빌드함
  • 파일 경로는 상대/절대 모두 지정 가능
services:
  webserver:
    build:
      context: /compose
      dockerfile: Dockerfile-com

 

 

 

command/entrypoint: 컨테이너 안에서 작동하는 명령 지정

  • 컨테이너 안에서 작동하는 명령 지정
command: /bin/bash

 

  • entrypoint 지정
entrypoint:
  - php
  - -d
  - memory_limit=-1

 

 

ports/expose: 컨테이너 간 통신

  • 공개 포트 지정
ports:
  - "3000"
  - "8000:8000"
  - "49100:22"
  - "127.0.0.1:8001:8001"

 

  • 컨테이너 내부에만 공개하는 포트 지정
expose:
  - "3000"
  - "8000"

 

 

 

depends_on: 서비스의 의존 관계 정의

  • 주의: 컨테이너의 시작 순서만 제어할 뿐 컨테이너상의 애플리케이션이 이용 가능해질 때까지는 제어하지 않음

 

volumes/volumes_from: 컨테이너 데이터 관리

  • 컨테이너에 볼륨을 마운트할 때 사용
  • 볼륨 지정
volumes:
  - /var/lib/mysql
  - cache/:/tmp/cache

 

  • 읽기 전용 볼륨 지정 (ro)
volumes:
  - ~/configs:/etc/configs/:ro

 

  • 볼륨 마운트 지정
  • 다른 컨테이너로부터 모든 볼륨을 마운트할 경우 사용
  • log라는 이름의 컨테이너로 마운트
volumes_from:
  - log
728x90