Docker에서 환경 변수 설정
환경 변수는 애플리케이션 개발을 돕기 위해 추가 구성 또는 메타데이터를 추가하는 데 사용되며 다양한 형태로 존재할 수 있습니다.
예를 들어 Java 애플리케이션을 개발할 때 일반적으로 애플리케이션을 컴파일하고 실행할 수 있도록 Java 개발 키트 위치를 가리키는 환경 변수를 설정합니다.
마찬가지로 Docker를 사용하여 애플리케이션을 개발할 때 컨테이너에 대한 환경 변수를 설정할 수 있습니다. 이 튜토리얼에서는 ENV
변수를 설정하는 방법과 필요한 경우 실행 중인 컨테이너에서 변수에 액세스하는 방법을 배웁니다.
새 프로젝트 만들기
WebStorm IDEA
를 열고 파일
> 새로 만들기
> 프로젝트
를 선택합니다. 열리는 창에서 Node.js를 선택하고 프로젝트 이름을 제목 없음
에서 docker-env-variables
로 변경하거나 원하는 이름을 사용하십시오.
노드 인터프리터
및 패키지 관리자
섹션이 컴퓨터에서 자동으로 추가될 수 있도록 노드 런타임 환경을 설치했는지 확인하십시오. 마지막으로 만들기
버튼을 눌러 프로젝트를 생성합니다.
우리 애플리케이션은 expressjs
를 사용하므로 다음 명령을 사용하여 애플리케이션에 expressjs
를 설치합니다.
~/WebstormProjects/docker-env-variables$ npm install express
expressjs
를 설치한 후 docker-env-variables
폴더에 index.js
라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.json(
[{
name: 'Lenovo Legion 5 pro',
type: 'electronic',
price: 1500
},
{
name: 'Xiaomi pro 14',
type: 'electronic',
price: 1300
},
])
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
이 파일에서 우리는 전자 상거래 환경에서 일련의 제품을 반환하는 애플리케이션을 시뮬레이트했으며 이 애플리케이션을 사용하여 이 튜토리얼에서 다루는 예제를 테스트할 것입니다.
Dockerfile 만들기
docker-env-variables
폴더에 Dockerfile
이라는 파일을 만듭니다. Dockerfile
은 사용자 지정 이미지에 대한 구성을 정의하는 데 도움이 되는 파일입니다.
환경 변수를 설정하는 데 사용할 수 있는 두 가지 방법이 있습니다: ARG
명령 및 ENV
명령.
이 두 명령의 차이점은 실행 중인 컨테이너는 ARG
명령을 사용하여 설정된 환경 변수에 액세스할 수 없다는 것입니다. 이러한 변수는 이미지를 빌드할 때만 사용할 수 있기 때문입니다. 다음 섹션에서는 이러한 지침을 사용하여 목표를 달성하는 방법을 보여줍니다.
ARG
명령을 사용하여 환경 변수 설정
이전 섹션에서 만든 Dockerfile
이라는 파일에 다음 지침을 복사하여 붙여넣습니다.
FROM node:16.17.0-alpine
ARG APP_NAME
ARG APP_VERSION=1.0.0
RUN echo "build an image of ${APP_NAME} version ${APP_VERSION}"
WORKDIR /com/ecommerce
ADD package*.json ./
RUN npm install
COPY . .
CMD node index.js
FROM
명령은 사용자 정의 이미지를 생성할 기본 이미지를 설정합니다. 우리의 경우에는 Node.js의 경량 버전을 가져오는 alpine
을 사용했습니다.
ARG
는 Docker 빌더가 이미지를 빌드하는 데 사용할 수 있는 변수를 정의합니다. 이 명령을 사용하여 제공되는 변수는 필수 또는 선택 사항일 수 있습니다.
Docker 설명서는 다른 지침을 읽을 수 있는 참조를 제공합니다.
이 경우 APP_NAME
이라는 선택적 변수와 APP_VERSION
이라는 필수 변수를 제공했습니다.
이러한 변수는 이미지를 빌드할 때만 사용할 수 있습니다. 다음 섹션에서 이를 확인합니다.
이미지 만들기
아래 명령을 사용하여 docker-env:latest
태그가 있는 이미지를 빌드합니다.
~/WebstormProjects/docker-env-variables$ docker build --tag docker-env:latest .
이 명령은 Dockerfile
을 순차적으로 실행하며 아래와 같이 실행되는 각 단계를 볼 수 있습니다.
=> [1/6] FROM docker.io/library/node:16.17.0-alpine@sha256:2c405ed42fc0fd6aacbe5730042640450e5ec030bada7617beac88f742b6 0.0s
=> CACHED [2/6] RUN echo "build an image of ${APP_NAME} version 1.0.0" 0.0s
=> [3/6] WORKDIR /com/ecommerce 0.6s
=> [4/6] ADD package*.json ./ 0.8s
=> [5/6] RUN npm install 6.7s
=> [6/6] COPY . .
이미지를 빌드할 때 아래와 같이 --build-arg
명령을 사용하여 빈 환경 변수의 값을 제공하거나 기본 환경 값을 재정의할 수 있습니다.
~/WebstormProjects/docker-env-variables$ docker build --build-arg APP_NAME=ecommerce-app --tag docker-env:latest .
컨테이너 실행
아래 명령을 사용하여 호스트에서 포트 3000
을 노출하는 docker-env-prod
라는 컨테이너를 실행합니다.
~/WebstormProjects/docker-env-variables$ docker run --name docker-env-prod -d -p 3000:3000 docker-env:latest
이 명령은 응용 프로그램의 인스턴스를 실행하며 localhost:3000
(http://localhost:3000/)의 브라우저에서 액세스할 수 있습니다. 그러나 ARG
명령을 사용하여 설정한 환경 변수에 액세스할 수 있는지 확인하는 것을 목표로 합니다.
이를 확인하려면 아래 명령을 사용하여 대화식 모드에서 컨테이너 파일 시스템에 액세스하십시오.
~/WebstormProjects/docker-env-variables$ docker exec -it docker-env-prod /bin/sh
출력:
/com/ecommerce #
현재 환경 변수를 표시하려면 아래 명령을 사용하고 ARG
명령어를 사용하여 설정한 두 변수가 표시되지 않음에 유의하십시오.
/com/ecommerce # printenv
출력:
NODE_VERSION=16.17.0
HOSTNAME=1bbf5ec4141e
YARN_VERSION=1.22.19
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/com/ecommerce
ENV
명령을 사용하여 환경 변수 설정
Dockerfile
의 이전 Docker 지침을 주석으로 만들고 주석 뒤에 다음 지침을 복사하여 파일에 붙여넣습니다.
FROM node:16.17.0-alpine
ENV APP_NAME=ecommerce-app
ENV APP_VERSION=1.0.0
RUN echo "build an image of ${APP_NAME} version ${APP_VERSION}"
WORKDIR /com/ecommerce
ADD package*.json ./
RUN npm install
COPY . .
CMD node index.js
이 Dockerfile
의 지침은 이전 지침과 동일하며 변경 사항은 ARG
지침을 ENV
지침으로 바꾸는 것뿐입니다.
ENV
는 Docker 빌더가 이미지를 생성하는 데 사용할 수 있는 환경 변수를 설정합니다. 환경 변수는 키-값
쌍의 형식입니다.
이러한 변수는 선택적이 아니며 선언된 각 값은 선택적 변수를 허용하는 이전 명령어와 비교한 값을 가져야 합니다.
이전 예제에서 컨테이너를 만들고 실행하는 방법을 설명했으므로 이 예제에서도 동일한 접근 방식을 사용하여 동일한 결과를 얻습니다. ENV
명령어를 사용하여 아래와 같이 두 가지 환경 변수 APP_NAME
및 APP_VERSION
에 액세스할 수 있습니다.
NODE_VERSION=16.17.0
HOSTNAME=0cca1ee1340d
YARN_VERSION=1.22.19
SHLVL=1
HOME=/root
APP_NAME=ecommerce-app
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/com/ecommerce
APP_VERSION=1.0.0
환경 변수를 동적으로 설정
명령줄에서 이미지를 빌드할 때 ARG
명령을 사용하여 ENV
명령을 사용하여 정의된 변수에 값을 동적으로 할당할 수 있습니다.
이를 실제로 보려면 Dockerfile
의 이전 지침을 주석으로 만들고 다음 지침을 복사하여 파일에 붙여넣으십시오.
FROM node:16.17.0-alpine
ARG HOST_MACHINE
ENV APP_NAME=ecommerce-app
ENV APP_VERSION=1.0.0
ENV DEV_ENV=$HOST_MACHINE
RUN echo "build an image of ${APP_NAME} version ${APP_VERSION}"
WORKDIR /com/ecommerce
ADD package*.json ./
RUN npm install
COPY . .
CMD node index.js
변수 이름 $HOST_MACHINE
을 참조하여 변수 이름 DEV_ENV
가 있는 ENV
명령에 동적으로 할당되는 HOST_MACHINE
변수가 있는 ARG
명령어를 추가했습니다.
변수 이름 HOST_MACHINE
에 대한 기본값을 생성할 수 있으며 이 값은 DEV_ENV
변수에 할당되거나 명령줄에서 --build-arg
명령을 사용하여 HOST_MACHINE
에 값을 할당하고 동일한 결과를 얻을 것입니다.
결론
이 자습서에서는 환경 변수를 설정하는 방법과 실행 중인 컨테이너에서 이러한 변수에 액세스하는 방법을 배웠습니다. ARG
명령, ENV
명령을 사용하는 방법과 환경 변수를 동적으로 설정하는 방법을 배웠습니다.
여기에서 주목해야 할 주요 사항은 ARG
명령을 사용하여 설정한 환경 변수는 실행 중인 컨테이너에서 액세스할 수 없다는 것입니다.
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