- Docker Compose 소개
- Docker Compose 파일(yaml 형식) 작성 방법
- Docker Volume 설정을 위한 공유폴더 생성
- Docker Compose 작성 예시
Docker Compose 는 Docker 컨테이너 기반 애플리케이션을 정의하고 실행하기 위한 도구입니다. Docker Compose를 사용하면 여러 개의 독립적인 Docker 컨테이너를 하나의 서비스로 구성하고, 컨테이너 간의 연결 및 설정을 쉽게 관리할 수 있습니다. 이를 통해 복잡한 멀티 컨테이너 애플리케이션을 쉽게 관리하고 실행할 수 있습니다.

Docker Compose를 사용하여 애플리케이션을 정의하는 데에는 YAML 파일을 사용합니다. 이 파일에서는 다음과 같은 내용을 정의할 수 있습니다:
- 서비스 (Services): 각각의 독립된 컨테이너를 정의합니다. 예를 들어, 웹 서버, 데이터베이스, 백엔드 서버 등의 서비스를 개별적으로 정의할 수 있습니다.
- 네트워크 (Networks): 서비스 간 통신을 위한 네트워크를 정의할 수 있습니다. 이를 통해 컨테이너들 사이의 통신을 쉽게 구성할 수 있습니다.
- 볼륨 (Volumes): 데이터를 저장하기 위한 볼륨을 정의할 수 있습니다. 이를 통해 컨테이너 내부의 데이터를 컨테이너 외부로 유지하거나 공유할 수 있습니다.
Docker Compose를 사용하는 기본적인 절차는 다음과 같습니다:
docker-compose.yml
파일 작성: Docker Compose를 사용하여 애플리케이션을 정의하는 YAML 파일을 작성합니다. 이 파일에는 서비스, 네트워크, 볼륨 등을 정의합니다.- 애플리케이션 실행: 작성한
docker-compose.yml
파일을 이용하여 애플리케이션을 실행합니다. 이때,docker-compose up
명령을 사용하면 설정에 따라 정의된 모든 서비스와 컨테이너들이 시작됩니다. - 애플리케이션 정지:
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)
version: "3.9"
services:
db:
image: postgres:latest
container_name: Redmine-DB
hostname: redmine-db
environment:
- TZ=Asia/Seoul
- POSTGRES_DB=redmine
- POSTGRES_USER="postgresql username”
- POSTGRES_PASSWORD="postgresql password”
ports:
- "54320:5432"
volumes:
- /volume1/docker/redmine/db:/var/lib/postgresql/data:rw
restart: always
redmine:
image: redmine:latest
container_name: Redmine
hostname: redmine
environment:
- REDMINE_DB_POSTGRES=redmine-db
- REDMINE_DB_DATABASE=redmine
- REDMINE_DB_ENCODING=utf8
- REDMINE_PLUGINS_MIGRATE=true
- REDMINE_DB_USERNAME="postgresql username”
- REDMINE_DB_PASSWORD="postgresql password”
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
depends_on:
db:
condition: service_started
# 아래의 pgAdmin 및 Portainer의 설치는 선택사항입니다.
pgadmin:
container_name: pgAdmin
image: dpage/pgadmin4:latest
environment:
- PGADMIN_DEFAULT_EMAIL=“PGADMIN Login ID_Email Address”
- PGADMIN_DEFAULT_PASSWORD=“PGADMIN Login Password_Email Address”
- PGADMIN_LISTEN_PORT=5050
ports:
- “50500:5050”
volumes:
- /volume1/docker/redmine/pgadmin:/var/lib/pgadmin:rw
restart: on-failure:5
portainer:
image: portainer/portainer-ce:latest
ports:
- “9443:9443”
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
작성 주의사항
“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