FROM node:12-alpine
RUN apk add --no-cache python3 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
Dockerfile 예시
# comment 주석은 # ~~
[INSTRUCTION] [arguments]
[지시어] [인자]
ENTRYPOINT ["executable", "param1", "param2"]
CMD를 쓰기에 앞서 시작프로그램을 지정
USER <user>[:<group>]
USER <UID>[:<GID>]
컨테이너가 사용하게 될 기본 사용자 지정
FROM busybox
ENV FOO=/bar
WORKDIR ${FOO} # WORKDIR /bar
ADD . $FOO # ADD . /bar
COPY \$FOO /quux # COPY $FOO /quux
ENV 지시어를 사용해서 FOO
라는 환경변수에 /bar
라는 스트링을 입력
ARG <name>[=<defulat value>]
FROM busybox
ARG user1
ARG buildno
# ...
ARG 지시어를 통해 빌드에서 사용할 변수명을 정의할 수 있다.
이렇게 정의한 변수에 값을 넣는 방법은 2가지인데
docker build --build-arg user=what_user .
도커빌드 명령어 시 --build-arg
를 함께 쓰는 방법과
ARG user1=someone
변수와 값을 함께 정의하는 방법이다.
FROM ubuntu
ARG CONT_IMG
ENV CONT_IMG=v1.0.0
RUN echo $CONT_IMG
ENV와 ARG가 같은 변수명을 사용할 경우 항상 ENV가 값을 덮어쓰게된다.
FROM node:16
LABEL maintainer="Simon Jo <ghdud0503@gmail.com>"
LABEL description="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 node:16
베이스 이미지
LABEL maintainer="Simon Jo <ghdud0503@gmail.com>"
LABEL description="Server with Node.js"
이미지의 메타데이터
추후 컨테이너 관리용
WORKDIR /app
지시어 다음에 오는 경로를 워킹디렉토리로 사용
COPY package*.json ./
COPY [호스트의 경로][이미지내에서의 경로]
RUN npm install
해당 명령어를 실행
COPY . .
현재 디렉토리의 모든 파일을 app디렉토리(워킹디렉토리)에 모두 복사
COPY가 두개 있는 이유는 레이어 구분을 하기 위함
첫번째 COPY는 package.json에 있는 depecdency를 다운로드받고
두번째 COPY는 소스코드의 변경사항을 감지하기 위함이다.
EXPOSE 8080
8080 포트를 사용
CMD ["node", "server.js"]
컨테이너를 실행할 때 사용될 명령어