로컬과 서버 환경에서 다른 Docker Compose 설정 방법

0

로컬 환경과 가상 서버 환경에서 서로 다른 `command`를 사용해야 하는 경우, 환경 변수를 활용하여 `docker-compose` 파일에서 조건에 맞는 명령을 실행할 수 있습니다. 이 방법을 사용하면 동일한 `docker-compose.yml` 파일을 유지하면서, 로컬과 서버에서 다른 명령을 실행할 수 있습니다.

1. 환경 변수 파일을 이용하는 방법 (`.env`)

`docker-compose`는 환경 변수 파일을 지원합니다. 이를 이용해 환경에 따라 다른 값을 설정할 수 있습니다.

1.1 `.env` 파일 생성

로컬과 서버 환경에서 서로 다른 설정을 적용하려면, 각 환경에 맞는 환경 변수를 사용할 수 있습니다.

로컬 환경의 `.env` 파일 (로컬 환경에서 실행될 명령어를 지정):
COMMAND="npm install && npm run dev"

가상 서버 환경의 `.env` 파일 (가상 서버에서 실행될 명령어를 지정):

COMMAND="npm run start"

이 `.env` 파일을 로컬과 가상 서버 각각의 환경에 맞게 설정한 후 사용하면 됩니다.

1.2 `docker-compose.yml` 파일 수정

`docker-compose.yml` 파일에서 명령어를 환경 변수로 지정해 주면, 환경에 맞는 명령을 실행할 수 있습니다.

services:
  node-app:
    image: node:latest
    working_dir: /app
    volumes:
      - ./node-app:/app
    command: sh -c "${COMMAND}"  # 환경 변수로 명령어를 실행
    expose:
      - "3000"

이렇게 하면 로컬에서는 `.env` 파일의 `COMMAND=”npm install && npm run dev”` 값이 적용되어 개발 모드로 실행되고, 가상 서버에서는 `COMMAND=”npm run start”`가 적용되어 프로덕션 모드로 실행됩니다.

2. Docker Compose 파일을 여러 개로 분리하는 방법

또 다른 방법으로는, `docker-compose.override.yml` 파일을 이용해 로컬 환경에서만 적용되는 명령을 정의하고, 기본 `docker-compose.yml` 파일은 서버 환경에 맞추는 방법이 있습니다.

2.1 기본 `docker-compose.yml`

가상 서버 환경에 맞춘 설정을 기본 `docker-compose.yml`에 작성합니다.

services:
  node-app:
    image: node:latest
    working_dir: /app
    volumes:
      - ./node-app:/app
    command: sh -c "npm run start"  # 기본적으로 가상 서버에서 실행될 명령어
    expose:
      - "3000"

2.2 로컬용 `docker-compose.override.yml`

로컬에서 개발할 때 사용하는 명령어를 `docker-compose.override.yml` 파일에 작성합니다.

services:
  node-app:
    command: sh -c "npm install && npm run dev"  # 로컬에서 실행할 명령어

2.3 실행 방법

로컬에서는 기본적으로 `docker-compose up`을 실행하면 `docker-compose.override.yml` 파일의 설정이 자동으로 포함되어 로컬 개발 명령어가 실행됩니다. 반면, 서버에서는 `docker-compose.override.yml` 파일이 없으므로 기본 설정 파일의 명령어만 실행됩니다.

3. 환경 변수를 직접 전달하는 방법

환경 변수를 직접 커맨드라인에서 전달하는 방법도 있습니다. 이 방법을 사용하면 별도의 `.env` 파일 없이도 환경에 따라 다른 명령을 전달할 수 있습니다.

로컬에서 실행:

COMMAND="npm install && npm run dev" docker-compose up

서버에서 실행:

COMMAND="npm run start" docker-compose up

이 방법은 각 환경에서 명령어를 다르게 전달하는 가장 간단한 방법입니다.

결론

  • 환경 변수를 활용한 방법: `.env` 파일을 사용해 로컬과 서버에서 서로 다른 `command`를 설정.
  • `docker-compose.override.yml` 활용: 로컬 환경에서만 적용되는 추가 설정을 분리하여 관리.
  • 환경 변수를 직접 전달하는 방법: 각 환경에서 명령을 직접 전달하여 설정.

이 중에서 환경 변수와 `.env` 파일을 사용하는 방법이 가장 직관적이며, 로컬과 서버 환경을 쉽게 구분할 수 있는 좋은 방법입니다.

Leave a Reply