Docker에서 환경 변수 파일 생성

David Mbochi Njonge 2023년6월20일
  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 명령을 추가하여 컨테이너의 파일을 자동으로 로드합니다.

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