이 글은 Udemy의 "【한글자막】 Docker & Kubernetes : 실전 가이드" 강의의 학습 노트입니다.
https://www.udemy.com/course/docker-kubernetes-2022/
.gitignore과 유사하게 image를 build시에 제외할 파일 목록이다.
.dockerignore 안에 작성하면 된다.
COPY 명령어를 사용시 제외된다.
node_modules, .git, 민감한 파일 등 빌드와 관련 없는 파일에 대해서 작성한다.
인수는 이미지 빌드 시에 설정할 수 있고, 환경변수는 컨테이너 실행 시 설정할 수 있다.
이미지나 소스코드에 하드 코딩하지 않고 유연한 이미지나 컨테이너를 생성할 수 있다. ex) port 번호 설정 등
Dockerfile을 통해 설정한다.
...
ARG DEFAULT_PORT=8000
EXPORT ${DEFAULT_PORT}
...
기본값을 설정하고 이미지 빌드 시에 --build-arg
옵션을 통해 변경시킬 수 있다.
docker build -t <image name> --build-arg DEFAULT_PORT=3000
물론 여러개도 가능. 항상 key-value pair로 작성.
주의점 : image 내부에 해당 값이 저장되기 때문에 api key와 같은 중요한 정보는 이렇게 넣으면 안된다.
docker history <image name>
으로 조회 가능
사실 위의 방법만으로는 어플리케이션의 코드를 수정시킬 수 없다. 위의 방법은 Dockerfile 내부에서만 존재한다고 생각해도 된다. 결국 이를 소스코드로 연결시키려면 환경변수를 사용해야 한다. (물론 포트 번호를 바꾸는 역할말고는 다른 역할에서는 단독으로 사용해도 의미가 있을 수 있다.)
컨테이너을 run할 때 설정할 수 있다.
어플리케이션의 사용법에 따라 환경변수를 소스코드에 포함시켜 사용한다.
nodejs 예시에서는
app.listen(process.env.PORT);
기본 값 설정
Dockerfile
ENV PORT=80
EXPOSE ${PORT}
위의 인수와 같이 사용하면
Dockerfile
ARG DEFAULT_PORT=80
ENV PORT=${DEFAULT_PORT}
EXPOSE ${PORT}
그리고 컨테이너 생성 시 사용하는 방법이 두개가 있다.
1. --env PORT=8000
옵션을 통해 실행
2. .env 파일을 만들고
(파일명은 자유지만 일반적으로 .env 사용)
.env
PORT=8000
--env-file ./.env
를 통해 파일로 관리할 수 있다.
.env 파일에 api key값과 같은 중요한 정보를 파일로 따로 모아서 .gitignore하여 관리할 수 있다.
docker image build 시에는 자동으로 ignore해서 image에는 파일이 포함되지 않는 것 같다. 하지만 혹시 모르니 .dockerignore에도 포함시키는게 좋을 것 같다.