Docker

Docker compose

Dean83 2025. 11. 6. 16:33

여러개의 컨테이너를 한번에 정의하고 실행하기 위한 것이다. 주로 이 환경을 사용하여 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