#주석(comment)
명령어(INSTRUCTION) 인자(arguments)FROM 명령문은 base이미지를 지정해주기 위해 사용된다 FROM node:16-alpinecd 명령문처럼 컨테이너 상에서 작업 디렉토리 전환을 위해 사용WORKDIR /usr/appDockerfile은 layer 시스템으로 구성되어 있기 때문에, 빈번히 변경되는 파일일수록 맨 마지막에 작성해주는게 좋다. 예를 들어, service는 package.json보다 빈번히 변경되기 때문에 나중에 작성해주는게 좋다
WORKDIR /app
COPY . . RUN npm install
npm install 보다 npm ci를 사용하면 좋은 이유!
- npm install은 버전 3이상은 괜찮다는 의미여서 실행할때 최신버전 5가 나왔다면 5를 설치함. 그래서 프로젝트 개발로 쓰인 버전과 설치한 버전이 조금 달라질 경우가 발생하고 그로 인해 에러가 발생할 수도 있음
- npm ci은 package-lock.json에 명시되어 있는 정확한 그 버전으로 설치해줌
ENTRYPOINT 명령문으로 지정된 커맨드가 실행되고, 이 커맨드로 실행된 프로세스가 죽을 때, 컨테이너도 종료됨ENTRYPOINT ["npm", "start"]
ENTRYPOINT 명령문으로 지정된 커맨드에 디폴트로 넘길 파라미터를 지정할 때 사용ENTRYPOINT와 CMD로 이미지 유연하게 사용하기
node커맨드로 디폴트로는 index.js를 실행하고,docker run커맨드에 인자가 있는 경우, 해당 인자를 실행하고 싶으면 다음과 같이 작성
ENTRYPOINT ["node"]
CMD ["index.js"]
그러면docker run커맨드의 인자 유무에 따라 node 커맨드로 다른 파일이 실행되게 할 수 있다.
docker run test로 하면 node index.js가 실행되고
docker run test main.js로 하면 node main.js가 실행된다
RUN
RUN 명령문 선언 가능CMD
docker run 커맨드에 인자를 넘길 경우 상실CMD ["echo", "Hi"] 이렇게 Dockerfile에 Hi를 출력하는 CMD명령문이 있을 때, 인자 없이 이미지를 실행하면 Hi가 출력되지만, 인자로 대신 실행될 커맨드를 넘기면 해당 인자가 출력됨$ docker run test
Hi
$ docker run test echo Bye
Bye
EXPOSE로 지정된 포트는 해당 컨테이너 내부에서만 유효하고 호스트 컴퓨터에서는 이 포트에 바로 접근할 수 없다.docker run 커맨드를 -p 옵션을 통해 컴퓨터의 특정 포트를 포워딩(forwarding)시켜줘야 함docker build -f Dockerfile -t 도커태그 .
. : build context라고 불리는 것으로 도커 파일이 최상위 경로에 있음을 나타냄 -> 명령어를 수행하는 현재 경로를 지정-f : 어떤 도커파일을 실행할 건지 도커 파일 이름-t : 도커 이미지에 이름 부여docker run -d -p 3000:3000 도커태그
-d : detach. 도커가 백그라운드에서 동작해야 함으로-p : 포트 지정. 호스트 머신 포트 : 컨테이너 포트