2 분 소요

Docker compose

도커 컴포즈는 뭐에요?

  • 여러 컨테이러를 일괄적으로 정의하고 실행할 수 있는 툴
    • 하나의 서비스를 운영하기 위해서는 여러 개의 application 이 동작해야 함
    • 컨테이너화 된 application 들을 통합 관리 할 수 있음

간단하게 말해서 한번에 연관성 있는 여러개의 서비스를 관리 및 실행 할 수 있다는 것이다. docker 를 편하게 사용 하기 위해서 나온 것이다.

기본적으로 django service 를 구성할 때 docker를 사용한다면

django ,postgres, nginx 3개의 컨테이너가 필요한데

서로의 의존성 및 환경 변수를 하나의 yml 파일로 정의 할 수 있어 상당히 유용하다.

# 기본적으로 docker는 command 실행 할 수 있다.
# But docker compose 는 yaml file 형태로 만 들 수 있다.
$ docker run --name c1 centos:7 /bin/hostname
$ docker run --name webserver -p 80:80 -v webdata:/var/www nginx:1.14

compose 파일을 구성하는 명령어들

  • 명령어는 기본적으로 docker와 상당히 유사하다.

service

컴포즈를 이용해서 실행 할 컨테이너 옵션을 정의

service:
  webserver:
    image: nginx
  db:
    image: redis

build

컨테이너 빌드

webapp:build: .

image

compose를 통해 실행할 이미지를 지정

webapp:
  image: centos:7

command

컨테이너에서 실행될 명령어 지정

app:
  image:python:3.10.0apline
    command: "python runserver 0.0.0.0:8000"""

port

컨테이너가 공개하는 포트를 나열

webapp:
  image:nginx:1.14
  port:
    -80
    -8443:443

다른 컨테이너와 연계 할 때 연계할 컨테이너 지정.

webserver:
  image: wordpress:latest
    link:
      db:mysql

volumes

컨테이너에 볼륨을 마운트

webapp:
  image: nginx:1.14
    volumes:
      - /var/www/html

environment

컨테이너에 적용할 환경변수를 정의

db:
  image:postgres
  environment:
    - POSTGRES_DB=postgres
    - POSTGRES_USER=postgres
    - POSTGRES_PASSWORD=postgres

restart

  • 컨테이너가 종료될 때 적용할 restart 정책
  • no: 재시작 되지 않음
  • always: 컨테이너를 수동으로 끄기 전까지 항상 재식작.
  • on-failure: 오류가 있을 시에 재시작.
    db:
    image:mysql:5.7
    restart:always
    

    depends_on

    컨테이너간의 종속성을 정의. 정의한 컨테이너가 먼저 동작되어야 한다.

    services:
    web:
      image:wordpress:latest
        depends_on:
          - dbß
    

docker compose feat: django 예시

# dockerFile
# docker-compose 에서 사용될 django image
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
# docker-compose yaml
services:
  db:
    image: postgres
    volumes:
      - db_data:/data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - web:/code
    ports:
      - "8000:8000"
    environment: # 환경 변수
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    depends_on: # db가 먼저 실행 되어야 한다.
      - db
volumes:
    db_data: {}
    web: {}

docker compose 의 django 기본 sample 이다.

build 및 운영

$ docker-compose up -d 
# build & run 여기서 -d 는 background mode

$ dcoker-compose ps 
# 동작 중인 컨테이너들의 현재 상태 확인

$ docker-compose sacale db=2 
# docker compose 의 정의된 service의 동작중인 서버를 늘릴 수 있다.

$ dcoker-compose down 
# 동작중인 컨테이너 들의 일괄 중지 및 삭제
명령어 설명 예시
up 컨테이너 생성/시작 $docker-compose up
ps 컨테이너 목록 표시 $docker-compose ps
logs 컨테이너 로그 출력 $docker-compose logs
run 컨테이너 실행 $docker-compose run
start 컨테이너 시작 $docker-compose start
stop 컨테이너 정지 $docker-compose stop
restart 컨테이너 재시작 $docker-compose restart
pause 컨테이너 일시 정지 $docker-compose pause
unpause 컨테이너 재개 $docker-compose unpause
port 공개 포트 번호 표시 $docker-compose port
config 구성 확인 $docker-compose config
kill 실행 중인 컨테이너 강제 정지 $docker-compose kill
rm 컨테이너 삭제 $docker-compose rm
down 리소스 삭제 $docker-compose down

이런 식으로 관리 할 수 있다. 일반적인 docker 를 사용하다 docker compose 사용하면 신세계가 열린 기분이다. 너무 편해서 … 요즘은 github에서 dockeFile, docker-compose.yml 파일을 많이 볼 수 있다.

알아야 한다.

태그:

카테고리:

업데이트:

댓글남기기