Docker 공식문서 중 Get Started Part 1: Getting Started의 영상을 보고 정리한 글입니다.
Dockerfile
- Dockerfile은 이미지를 build하는 데 사용됩니다.
- Dockerfile은, Docker 엔진에 보내지는 명령의 모음입니다.
=> Docker 엔진은, Dockerfile을 위에서부터 읽어 내려가며 명령을 수행하고, 이미지를 build합니다!
Dockerfile
FROM node:12.16.3
WORKDIR /code
ENV PORT 80
COPY package.json /code/package.json
RUN npm install
COPY . /code
CMD ["node", "src/server.js"]
- From
- 이미지를 build할 때는, 주로 Base Image로 시작합니다.
- Base Image는 Hub에 위치하는 검증된 이미지를 뜻합니다.
- 필요한 모든 내용을 갖추고 있는, Base Image로 시작하여, 그 이미지 위에서 build하는 것입니다!
- 가령, node 애플리케이션이라면 node Base Image를 사용합니다.
- node Base Image는 node, npm, yarn 등을 포함합니다.
- WORKDIR
- 디렉토리 아래에 /code라는 디렉토리를 생성하고, 해당 디렉토리를 작업 디렉토리로 사용하도록 합니다.
- 이후 실행되는 명령은 모두 이 디렉토리를 사용합니다!
-
ENV
- 환경 변수를 설정합니다.
- 해당 코드는, PORT라는 이름으로 80을 할당했습니다.
- 이 값은, 이 이미지에서 실행되는 모든 프로세스에서 접근할 수 있습니다.
-
COPY
- 해당 코드는, package.json 파일을 이미지 안으로 복사합니다. (경로는 /code/package.json이 됩니다.)
-
RUN
- Docker가 실행할 내용을 말합니다.
- 해당 코드는, dependency들을 모두 다운로드하여 이미지 안에 넣어줍니다.
- COPY
- 로컬 디렉토리의 WORKDIR(작업 디렉토리)에 있는 모든 것(.으로 표기합니다.)을 code 디렉토리에 복사합니다.
! 참고 : .dockerignore
- .gitignore 파일과 유사합니다.
- 이미지에 포함되지 않았으면 하는 폴더들을 지정합니다.
.dockerignore
.DS_Store
.vscode
test_users.txt
nodemon.json
/scripts/*.json
/tmp/*
logs
*.log
pids
*.pid
*.seed
lib-cov
coverage
- CMD
- 컨테이너를 start할 때, 실행해야 하는 기본 명령어를 Docker에게 알려줍니다.
- Docker에게, 이미지를 컨테이너로 실행해라! 라고 말하면, Docker는 CMD를 확인합니다.
- node를 실행하고
- node에게 src/server.js를 전달합니다.
Dockerfile 정리
- node Base Image를 사용합니다.
- 작업 디렉토리(WORKDIR)를 지정합니다.
- 환경 변수를 생성합니다.
- package.json(애플리케이션 dependency)를 이미지 안으로 복사합니다.
- npm install로 dependency를 설치합니다.
- 모든 소스 코드를 이미지 안으로 복사합니다.
- Docker에게 node -> src/server.js를 실행하라고 전달합니다.