개발자

Docker compose 파일 작성시 local환경과 production환경 구분

2024년 01월 27일조회 106

Docker compose를 이용해서 로컬 환경과 프로덕션환경을 따로 구분해서 만들려고 합니다 그 이유는 db이름도 local환경에서 사용하는 db이름과 production에서 사용하는 db이름도 달라야하고 그 외 로컬환경과 프로덕션환경이 다른부분이 좀 있어서 구별해서 만들려고 합니다 어떻게 시작해야할지 모르겠습니다 Docker compose파일을 두개 만들어야하나요? DockerFile을 만들때 두개를 만들어서 하나는 build까지 Run하고 하나는 로컬에서 실행될꺼니까 COPY까지만 진행하도록 해야하나요? 이렇게 고민하다보니 도커를 제대로 이해하고 있는지도 모르겠습니다 ㅠㅠ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

박범수님의 프로필 사진

로컬 환경과 운영 환경에서 다른 면이 있다고 해서 이미지를 두 개를 만들게 되면, 코드가 변경될 때마다 이미지 두개를 빌드해야 합니다. 변수를 이미지에 넣는 것이 아니라 실행 시에 주입하는 것이 편리한 방법입니다. 로컬 환경과 프로덕션의 차이가 말씀하신 db 이름의 예처럼 잘 변하지 않는 것이라면, 환경 변수를 이용하면 됩니다. 시시때때로 값이 변하는 변수라면 별로 좋지 않은 방법이나, compose 파일을 두 개 만들 생각을 하신 걸로 보아 이 케이스는 아닐 것 같습니다. docker-compose 파일 두 개를 만들어서 환경 변수를 다르게 줘도 되긴 하는데요. 이 역시 공통 수정 사항이 발생했을 때 작업을 두 번 해야 하는 단점이 있습니다. 그래서 저라면 env 파일을 두 개 만들어두고 환경에 따라 다르게 사용하겠습니다. 검색해보니 잘 설명해둔 글이 있어 공유드리겠습니다. '다른 환경에서 사용할 .env 파일' 파트를 눈여겨 보시면 됩니다. https://blog.leocat.kr/notes/2021/05/15/docker-use-env-file

profile picture

익명

작성자

2024년 01월 28일

감사합니다

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 01월 27일

Docker Compose 파일을 로컬과 프로덕션 환경에 맞게 분리해서 작성하는 방법은 아래와 같습니다. (1) Docker Compose 파일 두 개를 사용하는 방법: docker-compose.yml 파일이 디폴트로 로컬 환경을 위한 설정을 포함하게 하고, docker-compose.prod.yml 파일은 프로덕션 환경에서 오버라이드할 설정들만을 포함하도록 합니다. 여기서 주의해야 할 점은 동일한 서비스 이름으로 설정해야 오버라이딩됩니다. 예를 들어, local용 docker-compose.yml는 다음과 같습니다: ```yaml version: '3' services: db: image: postgres environment: POSTGRES_DB: my_local_dbname ``` 그리고 production용 docker-compose.prod.yml는 이렇게 작성합니다: ```yaml version: '3' services: db: environment: POSTGRES_DB: my_production_dbname ``` 실행 시에는 이렇게 입력합니다: ```bash $ docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d ``` (2) `.env`파일 사용하기: Docker Compose에서 .env파일을 사용하여 환경 변수를 정의할 수 있습니다. `.env` 파일 내에 다음과 같이 정의될 수 있습니다. ``` POSTGRES_DB=my_local_dbname ``` docker-compose.yml에선 이런 식으로 사용할 수 있습니다: ```yaml version: '3' services: db: image: postgres environment: POSTGRES_DB: ${POSTGRES_DB} ``` 그러면 로컬 환경과 프로덕션 환경에 따라 .env 파일만 바꿔주면 됩니다. Dockerfile에 대해서는 일반적으로 한 개를 사용합니다. 다른 설정이 필요한 경우는 Dockerfile을 분리하거나, build argument등을 사용하여 분기처리할 수 있습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!