프로젝트

Docker Compose란 무엇인가요?

Docker Compose는 Docker를 위해 특별히 설계된 도구로, 다중 컨테이너 애플리케이션을 정의하고 관리하여 복잡한 애플리케이션의 배포 및 관리를 간소화합니다. 간단히 말해, 하나의 YAML 파일로 애플리케이션의 여러 서비스, 네트워크 및 스토리지 구성을 기술한 후 단일 명령어로 모든 서비스를 시작할 수 있게 해줍니다. UGOS Pro에서 여러 애플리케이션을 실행 중이거나 배포 프로세스를 효율화하려는 경우 Docker Compose는 필수 도구입니다.

적용 가능한 시나리오

UGOS Pro에서 Docker Compose 사용은 일반적으로 다음과 같은 시나리오에 적합합니다:

다중 서비스 애플리케이션 관리

웹 서버, 데이터베이스, 캐시, 리버스 프록시 등 여러 서비스로 구성된 복잡한 애플리케이션을 NAS에서 실행하는 경우, Docker Compose를 사용하면 이러한 서비스를 단일 구성 파일에 통합하여 통합 관리 및 유지보수가 가능합니다.

  • 예시: 일반적인 WordPress 프로젝트에는 WordPress 컨테이너와 MySQL 컨테이너가 포함될 수 있습니다. Compose를 사용하면 두 서비스를 동시에 시작하면서 연결 설정이 올바르게 구성되도록 보장할 수 있습니다.

간소화된 애플리케이션 배포

Docker Compose 파일을 사용하면 컨테이너화된 애플리케이션에 필요한 모든 서비스, 네트워크 및 스토리지를 정의할 수 있습니다. 정의된 모든 서비스를 단일 명령어로 시작함으로써 Docker Compose는 서비스 종속성을 자동으로 관리하여 Docker 인터페이스를 통한 복잡한 애플리케이션 배포 프로세스를 간소화합니다.

애플리케이션 이동성

Docker Compose는 컨테이너화된 애플리케이션의 높은 이식성을 가능하게 합니다. 애플리케이션의 전체 구성을 Compose 파일에 패키징하여 다양한 UGOS Pro 장치에 신속하게 배포할 수 있으며, 일관성과 효율성을 보장합니다.

Docker Compose 파일 구조

Docker Compose 파일은 일반적으로 docker-compose.yaml로 명명되며, YAML 구문을 사용하여 서비스, 네트워크 및 스토리지를 정의합니다. 기본 Compose 파일 구조는 다음과 같습니다:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "90:80"
    volumes:
      - ./html:/usr/share/nginx/html

  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - ./data:/var/lib/mysql
  • version: Docker Compose 파일의 버전을 정의합니다.

  • services: 애플리케이션의 서비스를 지정합니다. 이 예시에서는 web과 db가 두 개의 서비스로 정의됩니다.

  • image: 서비스에 사용되는 Docker 이미지를 나타냅니다(예: nginx, mysql).

  • ports: 호스트와 컨테이너 간 포트 매핑을 지정합니다. 예를 들어, 90:80은 NAS 호스트의 포트 90을 컨테이너의 포트 80에 매핑하여 NAS_IP:90을 통해 컨테이너에 접근할 수 있게 합니다 .

  • volumes: 데이터 지속성을 위해 NAS 저장소 디렉터리를 컨테이너 디렉터리에 매핑합니다.

  • environment: 컨테이너 내 서비스에 대한 환경 변수를 설정합니다. 데이터베이스 비밀번호, API 키 및 기타 구성 옵션 등이 포함됩니다.

환경 변수 설명

이 예시에서:

  • MYSQL_ROOT_PASSWORD: MySQL 데이터베이스의 루트 비밀번호를 example로 설정합니다 .

  • MYSQL_DATABASE: mydatabase라는 이름의 데이터베이스를 생성합니다 .

  • MYSQL_USER: user라는 데이터베이스 사용자를 생성합니다 .

  • MYSQL_PASSWORD: 위 사용자의 비밀번호를 password로 설정합니다 .

이러한 환경 변수는 컨테이너 시작 시 MySQL 서비스로 전달되어 데이터베이스 초기화에 사용됩니다.

볼륨 마운팅 작동 방식

Docker Compose 파일에서 ./html:/usr/share/nginx/html은 볼륨 구성으로, ./는 Docker Compose 파일이 위치한 디렉터리를 나타냅니다.

  • ./html: 이 문맥에서 ./는 Docker Compose 파일이 위치한 디렉터리를 나타냅니다. 구체적으로 ./html은 UGOS Pro 상의 디렉터리, 즉 Docker Compose 파일과 동일한 디렉터리 아래의html 하위 디렉터리를 가리킵니다 .

  • /usr/share/nginx/html: 컨테이너 내부의 디렉터리를 가리킵니다. Nginx 컨테이너의 경우 정적 웹사이트 파일의 기본 경로입니다.

이 설정으로 Docker는 호스트의 ./html 디렉터리를 컨테이너 내부의/usr/share/nginx/html에마운트하여 다음을 가능하게 합니다:

  • 호스트의 ./html 디렉터리에서 변경된 내용이 컨테이너의 /usr/share/nginx/html에즉시 반영됩니다 .

  • 컨테이너 내부에서 변경된 내용이 호스트의 ./html 디렉터리로다시 동기화됩니다 .

관련 링크: Docker Compose 구성 파일에서 볼륨 마운트 경로를 올바르게 지정하는 방법?

UGOS Pro에서 Docker Compose 사용 방법

UGREEN NAS에서 홈 미디어 센터를 운영 중이라고 가정해 보겠습니다. Docker Compose를 사용하면 Jellyfin (미디어 서버), MariaDB (데이터베이스), Redis (캐시)와 같은 서비스를 관리할 수 있습니다. 단일 docker-compose.yml 파일로 이러한 서비스의 종속성, 볼륨 마운트, 네트워크 구성을 정의하고 간단한 명령어로 전체 미디어 센터를 관리할 수 있습니다.

운영 단계:

1. 프로젝트 생성

UGOS Pro에서 Docker 애플리케이션을 열고 "프로젝트" > "생성" 을 클릭한 후 다음 세부 정보를 입력하세요:

  • 이름: 프로젝트 이름을 입력합니다.

  • 저장 경로: Docker Compose 구성 파일(docker-compose.yaml) 저장될경로를 지정합니다.

  • Compose 구성: YAML 구성을 직접 입력하거나 기존 docker-compose.yaml 파일을가져옵니다 .

2. PUID 및 PGID 설정

  • 필요한 경우 PUIDPGID 값을 설정합니다.

  • 컨테이너 오류의 원인이 될 수 있는 권한 문제를 방지하기 위해 현재 사용자의 사용자 ID 및 그룹 ID를 사용하는 것이 좋습니다.

3. 프로젝트 배포

  • 구성 확인 후 "배포"를 클릭하여 프로젝트를 빌드합니다.

이 단계를 따르면 Docker Compose를 사용하여 전체 홈 미디어 센터를 시작하고 관리할 수 있습니다. 모든 서비스는 종속성이 올바르게 구성된 상태로 백그라운드에서 실행되어 원활한 작동을 보장합니다.