- Docker Compose 소개
- Docker Compose 파일(yaml 형식) 작성 방법
- Docker Volume 설정을 위한 공유폴더 생성
- Docker Compose 작성 예시
1. 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 형식) 작성 방법
-첫 줄에 Docker Compose Version 기재 (현재는 생략 가능)
-주 항목 services, networks, volumes 작성
-항목 간의 상하관계는 공백을 사용한 들여쓰기로 작성
-들여쓰기는 같은 수의 배수만큼의 공백을 사용
-이름은 주 항목 아래에 들여쓰기한 다음 기재
-컨테이너 설정 내용은 이름 아래에 들여쓰기한 다음 기재
-여러 항목을 기재하려면 줄 앞에 “-”를 추가
-이름 뒤에는 콜론(:)을 추가
-콜론 뒤에는 반드시 공백이 와야 한다. 바로 줄바꿈하는 경우는 예외
-# 뒤의 내용은 주석으로 처리됨
-문자열은 작은 따옴표(‘) 또는 끈 따옴표 (“)로 처리
3. Docker Volume 설정을 위한 공유폴더 생성
Volumes의 설정은 다음과 같습니다.
Synology NAS의 공유폴더 경로: Docker 이미지에서 사용되는 폴더의 경로
여기에서 Synology NAS의 공유폴더의 경로를 Docker Compose 파일의 경로와 일치시켜야 합니다.
4. Docker Compose 작성 예시 (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