Docker Orientation #2.

toto9602·2022년 7월 24일
0

Docker 공부하기

목록 보기
2/10

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
logs
*.log

# Runtime data
pids
*.pid
*.seed

# Directory for instrumented libs generated by jscoverage/JScover
lib-cov

# Coverage directory used by tools like Istanbul
coverage

  • CMD
    • 컨테이너를 start할 때, 실행해야 하는 기본 명령어를 Docker에게 알려줍니다.
    • Docker에게, 이미지를 컨테이너로 실행해라! 라고 말하면, Docker는 CMD를 확인합니다.
      • node를 실행하고
      • node에게 src/server.js를 전달합니다.

Dockerfile 정리

  1. node Base Image를 사용합니다.
  2. 작업 디렉토리(WORKDIR)를 지정합니다.
  3. 환경 변수를 생성합니다.
  4. package.json(애플리케이션 dependency)를 이미지 안으로 복사합니다.
  5. npm install로 dependency를 설치합니다.
  6. 모든 소스 코드를 이미지 안으로 복사합니다.
  7. Docker에게 node -> src/server.js를 실행하라고 전달합니다.
profile
주니어 백엔드 개발자입니다! 조용한 시간에 읽고 쓰는 것을 좋아합니다 :)

0개의 댓글