Profile picture

[Docker-Compose] 도커 컴포즈 기본

JaehyoJJAng2022년 04월 15일

도커 컴포즈

  • 단일 서버에서 여러 컨테이너를 프로젝트 단위로 묶어서 관리
  • docker-compose.yml YAML 파일을 통해 명시적 관리
  • 프로젝트 단위로 도커 네트워크와 볼륨 관리
  • 프로젝트 내 서비스 간 의존성 정의 가능 (depends_on)
  • 프로젝트 내 서비스 디스커버리 자동화
  • 손 쉬운 컨테이너 수평 확장

프로젝트

  • 도커 컴포즈에서 다루는 워크스페이스 단위
  • 함께 관리하는 서비스 컨테이너의 묶음
  • 프로젝트 단위로 기본 도커 네트워크가 생성 된다

서비스

  • 도커 컴포즈에서 컨테이너를 관리하기 위한 단위
  • scale을 통해 서비스 컨테이너의 수 확장 가능

컨테이너

  • 서비스를 통해 컨테이너 관리

버전



도커 컴포즈 설치

docker-compose 설치확인

$ docker-compose version

Linux 환경은 다음 명령어로 설치

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose" 

OR

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)"

OR

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-Linux-x86_64"

실행권한 부여

# docker-compose에 실행권한 부여
$ sudo chmod +x /usr/local/bin/docker-compose

실습

  • docker run으로 MySQL , WordPress 컨테이너 생성

Dockerfile 작성

MySQL Container

docker run -d -p 3306:3306 \
   -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
   --network=app-network \
   --name mysql \
   -v /mnt/Docker/mysql:/var/lib/mysql --user 1000 \
   mysql:5.7

WordPress Container

docker run -d -p 8080:80 \
  --network=app-network \
  --name wordpress \
  -v /mnt/Docker/wordpress:/var/www/html --user 1000 \
  -e WORDPRESS_DB_HOST=mysql \
  -e WORDPRESS_DB_NAME=wp \
  -e WORDPRESS_DB_USER=wp \
  -e WORDPRESS_DB_PASSWORD=wp \
  wordpress:latest

YAML 작성

파일 경로

$ > vim /mnt/Docker/wp_yml/docker-compose.yml

version: '2'
services:
  db:
    image: mariadb:10.5
    volumes:
      - /mnt/Docker/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:
      - /mnt/Docker/wp:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress

기존 컨테이너 삭제

쉘 스크립트 형식으로 중지해보기

# docker 컨테이너 중지
for x in $(docker ps -a | awk '{print $1}' | grep -v "[A-Z]"); do docker stop ${x}; done 

# docker 컨테이너 삭제
for x in $(docker ps -a | awk '{print $1}' | grep -v "[A-Z]"); do docker rm ${x}; done 

도커 커맨드로 간단하게 중지하기

docker kill $(docker ps -q) && docker rm $(docker ps -a -q)

컨테이너 배포

# 자동으로 docker-compose.yml 파일을 읽어서 컨테이너를 생성하게 됨
# -d : detatch : 백그라운드 실행
docker-compose up -d 

-f 옵션

Docker compose는 기본적으로 커맨드가 실행하는 디렉토리에있는 docker-compose.yml 또는 docker-compose.yaml를 설정파일로 사용한다.

다른이름이나 경로의 파일을 Docker-compose 설정파일로 사용하고 싶다면 -f 옵션사용

docker-compose -f /mnt/Docker/wp_yml/docker-compose.yml up -d

exec 옵션

docker-compose exec 커맨드는 실행중인 서비스 컨테이너를 대상으로 어떤 명령어를 날릴 때 사용

docker-compose exec db psql postgres postgres

실행 중인 컨테이너 목록

docker container ls | awk '{print $1 , $2 , $6 , $7}' | column -t

Loading script...