여러개의 컨테이너를 한번에 정의하고 실행하기 위한 것이다. 주로 이 환경을 사용하여 DB + 프로그램 구동을 하는 방식으로 진행한다.
docker-compose.yaml 을 이용해서 설정하고, 실행한다.
- 주로, dockerfile 을 통해 빌드한 이미지를 실행하는걸로 구성한다.
- springboot 등 실행시, application.yaml 에서 정의한 환경변수 값을 주입하여 실행한다.
- db 접속 정보, 아이디, 비번 등은 application.yaml 에 직접 노출하면 안되므로, 도커에서 실행시 주입할 수 있다.
- 혹은, env 파일을 지정해 줄 수 있다.
- dockerfile 로 만든 이미지를 docker run 으로 실행시, 옵션값들이 복잡해 지는데, 이를 설정에 다 넣어 편리하게 실행할 수 있다.
- bridge 네트워크를 통해 각 컨테이너들이 같은 네트워크를 사용한다.
- 따라서, springboot 에서 db 접속시, db 설정에서 명시한 내부 포트번호로 접근 해야 한다.
version: '3'
services:
app:
#만일 dockerfile 을 빌드 할 거면, build: . 을 이용함.
#그러나 보통은 이미 빌드한 이미지를 실행함.
image: docker이미지명:태그명
ports:
- "8080:8080"
#env 파일을 지정해 줄 수 있다.(주석해제 필요) 혹은 아래처럼 주입해줄 수도 있다.
#env_file:
# - .env
#스프링부트 구동시 환경설정을 주입
environment:
- SPRING_PROFILES_ACTIVE=dev
#포트번호는 컨테이너 포트번호 지정해줌.
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/테이블명
- SPRING_DATASOURCE_USERNAME=계정명
- SPRING_DATASOURCE_PASSWORD=비번명
#db가 먼저 세팅된 후에 실행되도록
depends_on:
- postgres-db
postgres-db:
image: postgres:17
container_name: local_postgres
#환경설정 값을 주입
environment:
POSTGRES_USER: discodeit_user
POSTGRES_PASSWORD: discodeit1234
POSTGRES_DB: discodeit
TZ: Asia/Seoul
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
ports:
- "5432:5432"
volumes:
#init 폴더 안에 있는 sql문을 실행하는 설정. 테이블 ddl 실행이 필요할경우 이용하거나
#데모 데이터 입력시 이용
- ./init:/docker-entrypoint-initdb.d
- db_data:/var/lib/postgresql/data
#볼륨 매핑. db_data 라는 볼륨을 생성한다.
volumes:
db_data:
실행은 docker compose up -d 를 통해 백그라운드 실행이 된다.
일괄 중지는 docker compose down 을 통해 일괄 중지를 할 수 있다.
'Docker' 카테고리의 다른 글
| Docker network (0) | 2025.11.12 |
|---|---|
| docker 이미지 AWS ECR에 올리기 (0) | 2025.11.07 |
| Dockerfile 구성 및 빌드(hub에 업로드) (0) | 2025.11.06 |
| Docker 기본 명령어 (0) | 2025.11.06 |