Docker에서 환경 변수 파일 생성

  1. Nginx 프로젝트 생성
  2. Nginx 이미지 정의
  3. 환경 변수 파일 생성
  4. 이미지 구축
  5. docker run을 사용하여 Nginx 컨테이너 실행
  6. docker-compose를 사용하여 .env 파일 설정
  7. docker-compose를 사용하여 Nginx 컨테이너 실행
  8. 결론
Docker에서 환경 변수 파일 생성

환경 변수는 키-값 쌍의 형태로 애플리케이션에 제공됩니다. 이러한 변수를 응용 프로그램을 구성하거나 실행하기 위한 정보를 제공하는 메타데이터로 볼 수 있습니다.

예를 들어 Twilio 또는 Vonage와 같은 통신 서비스와 통합되는 애플리케이션을 개발할 때 통신 서비스가 작동하려면 API 키를 제공해야 합니다.

이러한 API 키는 환경 변수로 제공될 수 있으며 애플리케이션은 .env 파일에서 키 값을 읽습니다.

이 자습서에서는 docker에서 환경 변수 파일을 만드는 데 사용할 수 있는 다양한 방법을 배웁니다.

Nginx 프로젝트 생성

WebStorm IDE를 열고 파일>새로 만들기>프로젝트를 선택합니다. 그런 다음 빈 프로젝트를 선택하고 프로젝트 이름을 dockerfile-env-file로 변경하거나 원하는 이름을 입력합니다.

현재 폴더 아래에 index.html 파일을 만들고 이 코드를 복사하여 파일에 붙여넣습니다.

<!doctype html>
<html lang="en">
<head>
    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
          rel="stylesheet"
          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
          crossorigin="anonymous">

</head>
<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-3">
        </div>
        <div class="col-md-6">
            <form class="mt-5">
                <div class="mb-3">
                    <label for="exampleInputEmail1" class="form-label">Email address</label>
                    <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
                    <div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
                </div>
                <div class="mb-3">
                    <label for="exampleInputPassword1" class="form-label">Password</label>
                    <input type="password" class="form-control" id="exampleInputPassword1">
                </div>
                <div class="mb-3 form-check">
                    <input type="checkbox" class="form-check-input" id="exampleCheck1">
                    <label class="form-check-label" for="exampleCheck1">Check me out</label>
                </div>
                <button type="submit" class="btn btn-primary">Submit</button>
            </form>
        </div>
        <div class="col-md-3">

        </div>

    </div>

</div>


</body>
</html>

이 파일에서는 부트스트랩 5를 사용하여 두 개의 입력 필드, 확인란 및 버튼이 포함된 양식을 표시하는 웹 페이지를 만들었습니다. 이 웹 페이지는 컨테이너를 실행할 때 표시됩니다.

Nginx 이미지 정의

현재 폴더 아래에 Dockerfile이라는 파일을 만들고 다음 지침을 복사하여 파일에 붙여넣습니다.

FROM nginx:1.22.0-alpine
COPY . /usr/share/nginx/html
  1. FROM - 이 명령의 지침에 따라 사용자 지정 이미지를 만듭니다. 이것은 Dockerfile의 첫 번째 명령이어야 합니다.
  2. COPY - 호스트의 현재 디렉토리에 있는 모든 파일과 폴더를 이미지 파일 시스템으로 복사합니다. Nginx 이미지를 사용하는 경우 파일과 디렉토리를 /usr/share/nginx/html에 복사해야 합니다.

환경 변수 파일 생성

현재 폴더 아래에 env-file.list라는 파일을 만들고 다음 키-값 쌍을 복사하여 파일에 붙여넣습니다.

VERSION=1.0.0
FOO=bar
DESC=This is an Nginx service
DATE=12/11/2022

이 파일을 사용하여 실행 중인 컨테이너에 환경 변수를 로드합니다. 파일의 내용은 <variable>=value 구문을 사용하여 변수를 할당된 값으로 설정하거나 로컬 환경에서 값을 읽어야 합니다.

Dockerfile을 사용하여 컨테이너를 실행할 때 콘텐츠가 구문을 준수하는 한 모든 파일 확장자를 사용할 수 있습니다. 언급한 바와 같이 이 파일은 .list 확장자를 사용합니다.

이미지 구축

위에 정의된 Dockerfile을 사용하여 Nginx 이미지를 빌드하려면 머신에서 새 터미널 창을 열고 다음 명령을 사용하여 이미지를 빌드하십시오.

~/WebstormProjects/dockerfile-env-file$ docker build --tag env-image:latest .

이 명령은 Dockerfile을 순차적으로 실행하여 env-image:latest 태그가 있는 이미지를 빌드합니다. 프로세스는 아래와 같이 터미널 창에서 볼 수 있습니다.

 => CACHED [1/2] FROM docker.io/library/nginx:1.22.0-alpine@sha256:addd3bf05ec3c69ef3e8f0021ce1ca98e0eb21117b97ab8b64127e3ff6e444ec                                              0.0s
 => [internal] load build context                                                                                                                                                0.3s
 => => transferring context: 2.45kB                                                                                                                                              0.0s
 => [2/2] COPY . /usr/share/nginx/html                                                                                                                                           0.8s
 => exporting to image                                                                                                                                                           1.0s
 => => exporting layers                                                                                                                                                          0.7s
 => => writing image sha256:de1d72539dd9f36eea4a73d47c07d5aa27bb5f693104c00d9d55a52fba4c26a6                                                                                     0.1s
 => => naming to docker.io/library/env-image:latest

docker run을 사용하여 Nginx 컨테이너 실행

같은 창에서 아래 명령을 사용하여 env-container라는 이름의 컨테이너를 실행합니다.

~/WebstormProjects/dockerfile-env-file$ docker run --name env-container -d -p 80:80 --env-file ./env-file.list env-image:latest

출력:

62fdc85504a2632e5d96aacec4c66c3087a6c1254afadf41bf629b474ceac90c

이 명령은 --env-file 플래그를 사용하여 컨테이너에서 env-file.list의 내용을 로드합니다.

이 플래그의 값은 환경 변수 파일의 위치입니다. 이 경우 파일은 현재 폴더에 있습니다. 따라서 ./env-file.list 값을 전달했습니다.

파일의 환경 변수가 컨테이너에 로드되었는지 확인하려면 다음 명령을 사용하여 컨테이너의 대화형 셸을 엽니다.

~/WebstormProjects/dockerfile-env-file$ docker exec -it env-container /bin/sh

출력:

/ #

새 셸 터미널에서 다음 명령을 사용하여 이 컨테이너의 모든 환경 변수를 인쇄합니다.

/ # printenv

출력:

HOSTNAME=62fdc85504a2
SHLVL=1
HOME=/root
PKG_RELEASE=1
DATE=12/11/2022
DESC=This is an Nginx service
VERSION=1.0.0
TERM=xterm
NGINX_VERSION=1.22.0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
FOO=bar
NJS_VERSION=0.7.6
PWD=/

env-file.list에 추가한 환경 변수가 컨테이너에 로드되었습니다. 변수에는 DATE, DESC, VERSIONFOO가 포함됩니다.

docker-compose를 사용하여 .env 파일 설정

이전 섹션에서는 docker run 명령을 사용하여 docker에서 .env 파일을 설정하는 첫 번째 접근 방식을 배웠습니다. 이 섹션에서는 docker-compose를 사용하여 .env 파일을 설정하는 방법을 배웁니다.

가장 먼저 해야 할 일은 env-file.list의 확장자를 env-file.env로 변경하는 것입니다. Docker는 .env 확장자를 가진 파일을 예상합니다. 이것은 환경 변수의 기본 확장자입니다.

파일 확장자를 변경한 후 현재 폴더 아래에 compose.yml이라는 파일을 만들고 다음 지침을 파일에 복사하여 붙여넣습니다.

services:
  nginx-app:
    restart: on-failure
    build: ./
    hostname: nginx-app-service
    env_file:
      - ./env-file.env
    ports:
      - '80:80'

docker-compose를 사용하여 Nginx 컨테이너 실행

새 터미널 창을 열고 다음 명령을 사용하여 docker-compose를 사용하여 Nginx 컨테이너를 실행합니다.

~/WebstormProjects/dockerfile-env-file$ docker compose up -d

출력:

[+] Building 12.4s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                 0.2s
 => => transferring dockerfile: 31B                                                  0.0s
 => [internal] load .dockerignore                                                    0.2s
 => => transferring context: 2B                                                      0.0s
 => [internal] load metadata for docker.io/library/nginx:1.22.0-alpine               9.6s
 => [auth] library/nginx:pull token for registry-1.docker.io                         0.0s
 => [internal] load build context                                                    0.2s
 => => transferring context: 476B                                                    0.0s
 => CACHED [1/2] FROM docker.io/library/nginx:1.22.0-alpine@sha256:addd3bf05ec3c69e  0.0s
 => [2/2] COPY . /usr/share/nginx/html                                               1.1s
 => exporting to image                                                               1.0s
 => => exporting layers                                                              0.7s
 => => writing image sha256:e4bd638d4c0b0e75d3e621a3be6526bfe7ed4543a91e68e4829e5a7  0.1s
 => => naming to docker.io/library/dockerfile-env-file_nginx-app                     0.1s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 2/2
 ⠿ Network dockerfile-env-file_default        Created                                0.2s
 ⠿ Container dockerfile-env-file-nginx-app-1  Started                                2.9s

docker compose.yamlenv_file을 지정했으므로 컨테이너를 실행할 때 명령을 지정할 필요가 없습니다.

이 명령은 docker-compose 파일을 사용하여 컨테이너를 실행하고 자동으로 현재 디렉터리의 env-file.env 파일을 사용하여 컨테이너의 변수를 로드합니다.

.env 파일의 변수가 컨테이너에 로드되었는지 확인하려면 다음 명령을 사용하여 컨테이너에서 대화형 셸을 실행합니다.

~/WebstormProjects/dockerfile-env-file$ docker exec -it dockerfile-env-file-nginx-app-1 /bin/sh

출력:

/ #

새 셸 터미널에서 다음 명령을 사용하여 새 컨테이너의 모든 환경 변수를 인쇄합니다.

/ # printenv

출력:

HOSTNAME=nginx-app-service
SHLVL=1
HOME=/root
PKG_RELEASE=1
DATE=12/11/2022
DESC=This is an Nginx service
VERSION=1.0.0
TERM=xterm
NGINX_VERSION=1.22.0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
FOO=bar
NJS_VERSION=0.7.6
PWD=/

.env 파일에 추가한 모든 변수가 컨테이너에 성공적으로 로드되었음을 출력에서 확인할 수 있습니다. 변수에는 DATE, DESC, VERSIONFOO가 포함됩니다.

결론

이 자습서에서는 환경 변수 파일을 사용하여 환경 변수를 설정하는 방법을 배웠습니다. 첫 번째 접근 방식에서는 docker run 명령과 함께 --env-file 플래그를 사용하여 변수를 컨테이너에 로드했습니다. 두 번째 접근 방식에서는 compose.yaml 파일에 env_file 명령을 추가하여 컨테이너의 파일을 자동으로 로드합니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

관련 문장 - Docker Environment Variable