본문 바로가기
개발공부 개발새발/Docker

Docker ) ARG 와 ENV

by 휴일이 2024. 3. 18.

.dockerignore

COPY . .
  • 해당 명령은 모든 파일을 복사한다.
  • 하지만 복사하지 않아도 되는 (안 하고 싶은) 파일이 있을 땐 ?
    • .dockerignore 를 사용하자!
# npm install 을 실행한다면, 로컬 node_module 폴더를 굳이 복사할 필요가 없겠지?
node_modules
# Dockerfile 은 도커 이미지를 만드는 명령어 파일이니 프로젝트에 복사될 필요는 없다.
Dockerfile
# git 관련 파일도 추가가 필요 없당.
.gitignore
  • .dockerignore 이름으로 루트 프로젝트 폴더(Dockerfile 이 존재하는) 파일을 생성한다.
  • 복사하고 싶지 않은 파일들의 경로 이름을 써준다.

환경 변수

도커는 빌드 타임 인수arg와 런타임 환경 변수env를 지원해요! → 컨테이너와 이미지에 하드코딩 하지 말아요!

ARG 빌드 타임 인수

실행 중인 애플리케이션에 인수를 줄 수 있음. --bulid-arg

ENV 환경 변수

Dockerfile 내부에서 ENV 옵션 후, --env사용 가능

환경 변수를 사용해보자! feat: node.js

app.listen(process.env.PORT);
  • 환경 변수 PORT 를 사용하도록 코드에 설정.
FROM node:14

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

# 환경변수 PORT 기본 값을 80 으로 설정
ENV PORT 80

# PORT 환경 변수 값을 사용하도록 수정
EXPOSE $PORT

CMD [ "npm", "start" ]
# 환경 변수에 포트 번호 맞춰 주기
docker run -d --rm -p 3000:8000 --name feedback-app
# 환경 변수 설정 (기본값 사용 X)
--env PORT=8000
-v feedback:/app/feedback -v "/Users/holidayk/Desktop/docker-study/data-volumes-03/Docker-Volume:/app:ro" -v /app/node_modules -v /app/temp feedback-node:env

# 이렇게도 사용 가능
-e PORT=8000

.env 파일 사용

.env 추가 후, 해당 파일에 있는 값 읽어오기도 가능

.env

PORT=8000

명령어

# 현재 터미널에 있는 폴더의 .env 파일이 환경 변수 파일이니 참고하라고 알려주기
--env-file ./.env
  • docker run 명령어 대신 환경 변수 파일을 추가해서 설정 가능.

ARG 사용해보기!

이미지를 빌드할 때 다른 값을 플러그인(끼워넣기) 할 수 있음.

FROM node:14

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

# 도커파일에서만 사용 가능한 인수
# CMD 에서 사용 불가 : 컨테이너가 실행될 때 사용되는 런타임 명령이기 떄문
ARG DEFAULT_PORT=80

# ARG 인수 env 에 사용 가능
ENV PORT $DEFAULT_PORT

EXPOSE $PORT

CMD [ "npm", "start" ]
  • Dockerfile 에서만 사용 가능
  • ARG : 컨테이너가 실행될 때 사용되는 런타임 명령이라 → CMD 에서 사용 불가
  • ENV 에서 사용 가능
# 이미지 빌드 명령어에서 다른 인수 주기 가능
docker build -t 이미지 --build-arg DEFAULT_PORT=8000 .

 

728x90

'개발공부 개발새발 > Docker' 카테고리의 다른 글

Docker ) 다중 컨테이너  (0) 2024.04.02
Docker ) Network  (0) 2024.03.29
Docker ) 도커 볼륨과 바인드 마운트  (0) 2024.03.18
Docker ) 이미지, 컨테이너 관리.  (0) 2024.03.03
Docker ) 도커 이미지 기초  (1) 2024.02.28