[Redmine] #2 설치_Docker Compose 작성

Docker Compose 는 Docker 컨테이너 기반 애플리케이션을 정의하고 실행하기 위한 도구이다. Docker Compose를 사용하면 여러 개의 독립적인 Docker 컨테이너를 하나의 서비스로 구성하고, 컨테이너 간의 연결 및 설정을 쉽게 관리할 수 있다. 이를 통해 복잡한 멀티 컨테이너 애플리케이션을 쉽게 관리하고 실행할 수 있다.

Docker Compose를 사용하여 애플리케이션을 정의하는 데에는 YAML 파일을 사용한다. 이 파일에서는 다음과 같은 내용을 정의할 수 있다:

  1. 서비스 (Services): 각각의 독립된 컨테이너를 정의한다. 예를 들어, 웹 서버, 데이터베이스, 백엔드 서버 등의 서비스를 개별적으로 정의할 수 있다.
  2. 네트워크 (Networks): 서비스 간 통신을 위한 네트워크를 정의할 수 있다. 이를 통해 컨테이너들 사이의 통신을 쉽게 구성할 수 있다.
  3. 볼륨 (Volumes): 데이터를 저장하기 위한 볼륨을 정의할 수 있다. 이를 통해 컨테이너 내부의 데이터를 컨테이너 외부로 유지하거나 공유할 수 있다.

Docker Compose를 사용하는 기본적인 절차는 다음과 같다:

  1. docker-compose.yml 파일 작성: Docker Compose를 사용하여 애플리케이션을 정의하는 YAML 파일을 작성한다. 이 파일에는 서비스, 네트워크, 볼륨 등을 정의한다.
  2. 애플리케이션 실행: 작성한 docker-compose.yml 파일을 이용하여 애플리케이션을 실행한다. 이때, docker-compose up 명령을 사용하면 설정에 따라 정의된 모든 서비스와 컨테이너들이 시작된다.
  3. 애플리케이션 정지: docker-compose down 명령을 사용하여 애플리케이션을 정지하고, 모든 관련된 리소스들을 삭제할 수 있다.

Docker Compose를 사용하면 개발 환경에서 간단하게 여러 컨테이너를 실행하고, 테스트하고, 애플리케이션을 배포하기 위한 설정과 작업들을 쉽게 관리할 수 있다. 이를 통해 개발과 운영 프로세스를 간소화하고 일관성을 유지할 수 있다.

2. Docker Compose 파일(yaml 형식) 작성 방법

-첫 줄에 Version 기재 (현재는 생략 가능)

-주 항목 services, networks, volumes 작성

-항목 간의 상하관계는 공백을 사용한 들여쓰기로 작성

-들여쓰기는 같은 수의 배수만큼의 공백을 사용

-이름은 주 항목 아래에 들여쓰기한 다음 기재

-컨테이너 설정 내용은 이름 아래에 들여쓰기한 다음 기재

-여러 항목을 기재하려면 줄 앞에 “-”를 추가

-이름 뒤에는 콜론(:)을 추가

-콜론 뒤에는 반드시 공백이 와야 한다. 바로 줄바꿈하는 경우는 예외

-# 뒤의 내용은 주석으로 처리됨

-문자열은 작은 따옴표(‘) 또는 끈 따옴표 (“)로 처리

3. Docker Volume 설정을 위한 공유폴더 생성

Volumes의 설정은 다음과 같다.
Synology NAS의 공유폴더 경로: Docker 이미지에서 사용되는 폴더의 경로
여기에서 Synology NAS의 공유폴더의 경로를 Docker Compose 파일의 경로와 일치시켜야 한다.

4. 작성 예시 (Redmine + PostgreSQL + pgAdmin)

Rev. 2025-11-26 : 도커 이미지 업데이트를 위해 버전을 지정하여 사용하도록 수정

version: "3.9"

services:
  db:
    image: postgres:18.1   # 필요에 따라 15/16 등 고정
    container_name: redmine-db
    hostname: redmine-db
    environment:
      POSTGRES_DB: redmine
      POSTGRES_USER: "Postgres DB Username"
      POSTGRES_PASSWORD: "Postgres DB Password"
      TZ: Asia/Seoul
    volumes:
      - /volume1/docker/redmine/db:/var/lib/postgresql:rw
    ports:
      - "55432:5432"
    restart: always

  redmine:
    image: redmine:6.1.0    # ★ Redmine 버전 고정
    container_name: redmine
    hostname: redmine
    environment:
      REDMINE_DB_POSTGRES: redmine-db
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_ENCODING: utf8
      REDMINE_DB_USERNAME: "Postgres DB Username"  # 위 POSTGRES_USER와 동일
      REDMINE_DB_PASSWORD: "Postgres DB Password"  # 위 POSTGRES_PASSWORD와 동일
      REDMINE_PLUGINS_MIGRATE: "true"
    depends_on:
      - db
    volumes:
      - /volume1/docker/redmine/data/files:/usr/src/redmine/files:rw
      - /volume1/docker/redmine/data/plugins:/usr/src/redmine/plugins
      - /volume1/docker/redmine/data/themes:/usr/src/redmine/public/themes
    ports:
      - "53000:3000"
    restart: always

  pgadmin:
    image: dpage/pgadmin4:9.10.0   # 예시 버전, 실제 최신 안정 버전으로 조정
    container_name: pgadmin
    hostname: pgadmin
    environment:
      PGADMIN_DEFAULT_EMAIL: "pgadmin login id"
      PGADMIN_DEFAULT_PASSWORD: "pgadmin loigin password"
      PGADMIN_LISTEN_PORT: 80
    volumes:
      - /volume1/docker/redmine/pgadmin:/var/lib/pgadmin:rw
    ports:
      - "55050:80"
    restart: on-failure

작성 주의사항

“postgresql user name”과 “postgresql password”를 개인에 맞게 수정하여 작성하십시오.

volumes:
– 시놀로지 공유 폴더 경로(개인에 맞게 수정하여 작성): 도커 이미지의 절대 경로 (변경 불가)

port:
– “외부 접속포트(개인에 맞게 수정하여 작성): 내부 포트(변경 불가)

5. Docker Compose 작성 예시 (Redmine + MySQL)

https://mariushosting.com/how-to-install-redmine-on-your-synology-nas/

version: "3.9"
services:
db:
image: mariadb:jammy
container_name: Redmine-DB
hostname: redmine-db
security_opt:
- no-new-privileges:true
environment:
- TZ=Asia/Seoul
- MYSQL_ROOT_PASSWORD=superstrangepass
- MYSQL_DATABASE=redmine
- MYSQL_USER=redmineuser
- MYSQL_PASSWORD=redminepass
volumes:
- /volume1/docker/redmine/db:/var/lib/mysql:rw
restart: always

redmine:
image: redmine:latest
container_name: Redmine
hostname: redmine
security_opt:
- no-new-privileges:true
healthcheck:
test: wget --no-verbose --tries=1 --spider http://localhost:3000/ || exit 1
user: 1026:100
environment:
REDMINE_DB_MYSQL: redmine-db
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmineuser
REDMINE_DB_PASSWORD: redminepass
volumes:
- /volume1/docker/redmine/data:/usr/src/redmine/files:rw
ports:
- 3434:3000
restart: always
depends_on:
db:
condition: service_started

답글 남기기