Docker 컴포즈

GonnabeAlright·2021년 12월 31일
3
post-thumbnail

도커 컴포즈란 ?

도커 컴포즈는 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구입니다. 도커 컴포즈에는 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음 단일 명령으로 YAML 파일에 정의된 모든 서비스를 만들고 시작합니다.

도커 볼륨이란 ?

도커는 기본적으로 각 컨테이너마다 독자적인 저장소를 가지고 있다. 하지만 컨테이너 내부에 저장되는 데이터는 컨테이너가 삭제되었을 경우 함께 사라진다. 따라서 컨테이너 내부에 중요한 데이터를 두는 것은 안전한 방법이 아니다.

이러한 이슈 때문에 도커는 데이터의 영속성을 보장하기 위해 여러 방법을 지원하고 있는데 그 중 하나가 바로 도커 볼륨이다.

볼륨의 종류에는 크게 세 가지가 있다.

  • Bind Mount: 호스트 환경의 특정 경로를 컨테이너 내부 볼륨 경로와 연결하여 마운트한다. 이 방법은 보안에 영향을 미칠 수도 있다.
  • Volume (가장 일반적): 도커 볼륨은 도커 컨테이너에서 도커 내부에 도커 엔진이 관리하는 볼륨을 생성하는 것이다. 생성된 볼륨은 호스트 디렉터리의 /var/lib/docker/volumes 경로에 저장되며, 도커를 사용하여 관리가 용이하다.
  • tmpfs Mount: 이 방법은 리눅스에서 도커를 실행하는 경우에만 사용할 수 있는 기능이라고 한다. 호스트의 파일 시스템이 아닌, 메모리에 저장하는 방식을 사용한다.

볼륨 생성하기

docker volume create <volume name>: 도커 볼륨 생성
docker volume ls: 볼륨 목록 리스트 확인
docker volume inspect <volume name>: 도커 볼륨 정보 확인
  • 이렇게 생성된 볼륨은 컨테이너 시작 시 -v 옵션을 통해 마운트 할 수 있다.
  • Dockerfile 작성 시 VOLUME 명령어를 통해 설정할 수도 있다.

일반적인 서버 구성 - DB 구성

# 도커 컴포즈의 스키마 버전입니다. 이 스키마 버전은 docker의 버전에 따라 지원되는 버전이 달라집니다.
# 되도록 최근의 버전을 사용하는 것이 좋습니다.
version: "3"

# 애플리케이션의 일부로 실행하려는 서비스 목록을 정의합니다.
# 서비스 이름은 임의로 선택할 수 있습니다.

services:
   app1:
      #build를 사용하게 된다면 image 항목을 사용하지 않아도 도커 컴포즈가 실행됩니다.
      #build:
        # 빌드 명령을 실행할 디렉터리 경로
        #context: .
        # 도커 이미지를 빌드하는데 사용할 도커 파일 위치
        #dockerfile: ./Dockerfile
        
      # 이미지 셋팅입니다.
      image: demo:latest
      
      # 커맨드의 변경이 필요하다면 여기서 재 정의를 할 수 있습니다.
      #command: /bin/bash -c "java -jar demo-0.0.1-SHAPSHOT.jar
      
      # 노출시킬 포트입니다.
      # - 로 여러개의 포트를 지정해 줄 수 있습니다.
      ports:
      - 8080:8080
      # 작업 디렉토리를 지정해 줄 수 있습니다.
      # working_dir: /app
      
      # 마운트 할 볼륨입니다. 이 부분은 docker로 생성할 때 지정했던 부분과 거의 일치합니다.
      # 상대경로로 입력도 가능합니다. ex) ./:/app
      volumes:
      - C:/Users/admin/Desktop/volume/log:/volume
      depends_on:
      # 의존 관계 설정
      - database
      
      # 데이터베이스가 필요하거나 다른 컨테이너와의 통신이 필요하다면, 이 항목을 통해 연결할 수 있습니다.
      # 단, 파일내 정의된 다른 서비스여야 연결이 가능합니다.
      # 만약 버전을 도커 컴포즈 3 버전 이상을 사용했다면 docker-compose.yaml 안에 있는 서비스들은 별도로 지정하지 않으면 하나의 네트워크에 속합니다.
      
      # links:
      # - database
      
      
 database:
     # 'database' 서비스에서 참조할 이미지
     image: mariadb:latest
     ports:
     - 3306:3306
     # 만약 컨테이너가 예상치 못한 일로 kill 되어도 바로 다시 띄울 수 있는 옵션입니다.
     restart: always
     environment:
        # 환경 설정에 필요한 설정들 입니다.
        MYSQL_ROOT_PASSWORD: 123
        MYSQL_DATABASE: database
        MYSQL_USER: root
        MYSQL_PASSWORD: 1234               

자주 사용되는 커맨드들

# 도커 컴포즈 컨테이너들을 백그라운드로 띄우기
$ docker-compose up -d
  
# 도커 컴포즈 컨테이너들을 포어그라운드로 띄우기
$ docker-compose up
  
# 도커 컴포즈 컨테이너들을 내리기
$ docker-compose down
  
# 도커 컴포즈 컨테이너들을 다시 시작하기
$ docker-compose restart
  
# 도커 컴포즈 컨테이너들의 로그를 계속해서 읽기
$ docker-compose logs -f
 
# 도커 컴포즈 컨테이너들의 상태 확인
$ docker-compose ps
  
# 도커 컴포즈 설정을 확인
# 주로 -f 옵션으로 여러 개의 설정 파일을 사용할 때, 최종적으로 어떻게 설정이 적용되는지 확인해볼 때 유용하다.
$ docker-compose config
  
# 다른 경로에 있는 도커 컴포즈 파일 사용
# 도커 컴포즈로 다른 이름이나 경로의 파일을 Docker Compose 설정 파일로 사용하고 싶다면 -f 옵션으로 명시를 해줍니다.
$ docker-compose -f /app/docker-compose.yml up
  
# 여러개의 도커 컴포즈 설정 파일을 사용할 수 있습니다. 이 때는 나중에 나오는 설정이 앞에 나오는 설정보다 우선하게 됩니다.
$ docker-compose -f docker-compose.yml -f docker-compose-test.yml up

0개의 댓글