Docker에서 환경 변수 파일 생성
- Nginx 프로젝트 생성
- Nginx 이미지 정의
- 환경 변수 파일 생성
- 이미지 구축
-
docker run
을 사용하여 Nginx 컨테이너 실행 -
docker-compose
를 사용하여.env
파일 설정 -
docker-compose
를 사용하여 Nginx 컨테이너 실행 - 결론
환경 변수는 키-값 쌍의 형태로 애플리케이션에 제공됩니다. 이러한 변수를 응용 프로그램을 구성하거나 실행하기 위한 정보를 제공하는 메타데이터로 볼 수 있습니다.
예를 들어 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
FROM
- 이 명령의 지침에 따라 사용자 지정 이미지를 만듭니다. 이것은Dockerfile
의 첫 번째 명령이어야 합니다.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
, VERSION
및 FOO
가 포함됩니다.
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.yaml
에 env_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
, VERSION
및 FOO
가 포함됩니다.
결론
이 자습서에서는 환경 변수 파일을 사용하여 환경 변수를 설정하는 방법을 배웠습니다. 첫 번째 접근 방식에서는 docker run 명령과 함께 --env-file
플래그를 사용하여 변수를 컨테이너에 로드했습니다. 두 번째 접근 방식에서는 compose.yaml
파일에 env_file
명령을 추가하여 컨테이너의 파일을 자동으로 로드합니다.
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