Docker - docker compose

업데이트:


Docker

도커 컴포즈 (docker compose)

도커 컴포즈의 기본 명령어와 문법을 이해한다.

개요

  • 도커 컴포즈의 기본 명령어와 문법에 대해 이해한다.

도커 컴포즈 설치

docker-compose version
  • Mac의 경우 Docker for Mac으로 설치 시 docker compose도 기본적으로 설치된다. (리눅스의 경우 별도로 설치가 필요)

실습 예제

version: '2'
services:
  db:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
 	wordpress:
    image: wordpress:latest
    volumes:
      - ./wp:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: wordpress
  • docker-compose.yml
  • 도커 실행 명령어를 yml 파일로 스크립트 문서화 하여 관리한다.
    • 도커 실행 명령어로 작성 시 발생하는 휴먼에러(띄어쓰기 등)를 줄이고 명확하게 파악 할 수 있다.

docker-compose 기본 명령어

1.1 컨테이너 실행 : up

docker-compose up
docker-compose up -d
docker-compose up --force-recreate
docker-compose up --build
  • 현재 디렉토리에 있는 docker-compose 파일을 실행하여, docker-compose 파일에 정의된 컨테이너를 실행한다.
  • -d 옵션을 주면 daemon(백그라운드)으로 실행한다.
  • –force-recreate 옵션으로 컨테이너를 새로 만들 수 있다.
  • –build 옵션으로 도커 이미지를 다시 빌드한다. (build로 선언했을 때만)

2.1 컨테이너 종료 : down

docker-compose down
  • docker-compose 파일에 정의된 컨테이너를 종료하고 삭제한다.

3.1 컨테이너 목록 : ps

docker-compose ps
  • docker-compose로 실행중인 목록을 출력한다.

dc

  • docker 실행 명령어로 동작시킨 컨테이너는 docker-compose 명령어에 나타나지 않는다.

4.1 멈춘 컨테이너 시작 : start

docker-compose start
docker-compose start {service}
  • stop으로 멈춘(PC 재부팅 등으로 멈춘) 컨테이너를 재개한다.
  • 특정 서비스(예제에서는 wordpress)만 재개할 수 있다.

5.1 컨테이너 재시작 : restart

docker-compose restart
docker-compose restart {service}
  • 컨테이너를 재시작한다.

6.1 컨테이너 정지 : stop

docker-compose stop
docker-compose stop {service}
  • 실행중인 컨테이너를 정지한다.

7.1 컨테이너 로그 : logs

docker-compose logs
docker-compose logs -f
  • 컨테이너의 로그를 확인하고, -f 옵션으로 로그를 follow 할 수 있다.

8.1 실행 중인 컨테이너에서 명령어 실행 : exec

docker-compose exec {service} {command}
docker-compose exec wordpress(컨테이너 이름) bash
  • 실행 중인 컨테이너에 명령어를 실행 할 수 있다.

9.1 컨테이너 build 부분에 정의된 내용대로 빌드 : build

docker-compose build
docker-compose build {service}
  • 컨테이너 build 부분에 정의된 내용대로 빌드한다.

docker-compose 기본 문법

version

version: '3'
  • docker-compose.yml 파일의 명세 버전이다.
  • docker-compose.yml 버전에 따라 지원하는 도커 엔진 버전도 다르다.

services

services:
  mysql:
  ...
  django:
  ...
  • 실행할 컨테이너의 이름 정의이다.
  • 도커 실행 명령어의 docker run –name mysql과 같다고 생각 할 수 있다.

image

services:
  mysql:
    image: mysql:5.7
  • 컨테이너에 사용할 이미지 이름과 태그를 정의한다.
  • 태그를 생략하면 최신 버전(latest)을 가져오고, 로컬 환경에 이미지가 없으면 자동으로 pull 한다.

ports

services:
  mysql:
  ...
    ports: 
      - "3306:3306"	## "{host-port}:{container-port}"
  • 호스트와 컨테이너의 포트 연결을 정의한다. port-fowarding

environment

services:
  mysql:
  ...
    environment: 
      - MYSQL_ROOT_PASSWORD: 1234
  • 컨테이너에서 사용할 환경변수를 정의할 수 있다.
  • {환경변수 이름} : {value}

volumes

services:
  mysql:
  ...
    volumes:
      - ./mysql:/var/lib/mysql	## {host-directory}:{container-directory}
  • 호스트 디렉토리와 컨테이너의 디렉토리를 마운트 할 수 있다.
  • 예제에서는 현재 디렉토리 내 mysql 디렉토리로 마운트했다.

restart

services:
  mysql:
    restart: always ## "no", always, on-failure, unless-stopped
  • 컨테이너 재시작 정책으로 “no”, always, on-failure, unless-stopped 설정이 있다.

build

services:
  mysql:
    build: 
      context: .
      dockerfile: ./compose/mysql/Dockerfile-dev
  • 이미지를 자체 빌드 후 사용할 수 있다.
  • image 속성 대신 사용하며, 여기에 사용할 별도의 도커 파일이 필요하다.

Reference

댓글남기기