fastcampus-devops/3-docker-kubernetes/3-dockerfile/nodejs-server$ vim Dockerfile
#
# nodejs-server
#
# build:
# docker build --force-rm -t nodejs-server .
# run:
# docker run --rm -it --name nodejs-server nodejs-server
#
FROM node:16
LABEL maintainer="FastCampus Park <fastcampus@fastcampus.com>"
LABEL description="Simple server with Node.js"
# Create app directory
WORKDIR /app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
FROM: 어떤 베이스 이미지를 사용하느지를 결정
LABEL: 이미지의 메타데이터 지정
WORKDIR: 인자를 working dierctory로 설정
COPY: COPY SRC DEST
호스트 os 이미지 상에서의 경로
COPY package*.json ./ => package로 시작해서 .json으로 끝나는 모든 파일을 현재 디렉토리에 복사하라.
/app 에 복사됨(WORKDIR)
RUN: 이미지 build 상에서 해당 명령어 실행
COPY . . -> 현재 디렉토리의 모든 파일을 app 디렉토리로 복사
EXPOSE: PORT NUMBER 지정
CMD: 해당 이미지를 가지고 container를 실행할 때 어떤 명령어를 실행할지를 결정
$ docker build --force-rm -t nodejs-server .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nodejs-server latest 1c6460fadeaa 18 minutes ago 916MB
$ docker run -d nodejs-server
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b9e9407b3e0 nodejs-server "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 8080/tcp admiring_lalande
$ curl localhost:8080
curl: (7) Failed to connect to localhost port 8080 after 0 ms: Connection refused
8080 포트가 default로 열려있기는 하지만 접근 불가능
$ docker run -d -p8080:8080 nodejs-server
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9173cd6b7dac nodejs-server "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp mystifying_gagarin
$ curl localhost:8080
Hello World
포트를 지정하고 정상적으로 출력됨