현제의 현재이야기

[DevOps] Docker compose 환경변수 본문

Infra

[DevOps] Docker compose 환경변수

현재의 현제 2023. 5. 22. 14:19
  • docker compose.yml에 키 값을 추가할 때마다 하드코딩을 하면 번거롭기 때문에 .env 파일을 두어서 관리하고자 한다.
version: '3'

services:
  green:
    container_name: green
    image: hjdeploy/test
    ports:
      - "8080:8080"  # green은 8080 포트를 열어줍니다.
    env_file:
      - .env
    command: ["--spring.profiles.active=prod"]
  blue:
    container_name: blue
    image: hjdeploy/test
    ports:
      - "8081:8080"  #blue는 8081 포트를 열어줍니다.
    env_file:
      - .env
    command: ["--spring.profiles.active=prod"]
  • env_file: -.env 추가하고, 같은 디렉토리에 .env 작성
DATASOURCE_URL=
DATASOURCE_USERNAME=
DATASOURCE_PASSWORD=
  • 이렇게 키, 값 쌍으로 저장해둔다.
  • .env 를 여러가지 두고 관리하면 될 것 같은데 이것도 보안 문제와(ec2 서버에 그대로 노출) 키 값이 바뀔 때마다 ssh 접속해서 수동으로 고쳐주어야 한다는 단점이 있음. 깃헙 secrets를 사용하는 방안을 생각해보아야겠다.
  • command로 스프링의 profile을 prod로 실행하게 두었다. 그리고나서 스프링 서브모듈로 연결한 application.yml은 dev 프로파일로 설정하여서 도커 이미지 빌드시 테스트를 통과하게 하였다.

applicatioin.yml

spring:
  profiles:
    active: dev
  jpa:
    open-in-view: false
    hibernate:
      ddl-auto: create
---
spring:
  config:
    activate:
      on-profile: local
    import: application-local.yml

---
spring:
  config:
    activate:
      on-profile: dev
  import:
    - classpath:sub-config/application-dev.yml
---
spring:
  config:
    activate:
      on-profile: prod
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${DATASOURCE_URL}
    username: ${DATASOURCE_USERNAME}
    password: ${DATASOURCE_PASSWORD}
  • 그리고 docker-compose pull시, command로 prod 프로파일로 실행하여서 datasource를 불러온다. 저기서 ${}는 깃 시크릿에서 받아온다.
  • 이렇게 한 이유는 docker compose에서는 서브모듈이 잘 안 불러와지는 것 같아서 이렇세 env_file로 변수들을 docker-compose.yml에 설정해야된다고 하더라.

재밌다~

Comments