# 예제를 활용하여 Docker build 명령어 내용을 살펴본다.
예제1. Dockerfile 전체
# BUILD
FROM node:14.15-alpine AS build
ARG MODE=operation
ENV APP_ENV ${MODE}
RUN mkdir -p /app
WORKDIR /app
COPY . /app/
RUN apk add --update nodejs nodejs-npm && apk add bash
RUN apk -U add curl jq bash nodejs nodejs-npm python3 py3-pip && \
npm install && \
npm install -g @angular/cli && \
rm -rvf /var/cache/* /root/.npm /tmp/*
RUN ng build --configuration operation
# RUN
FROM nginx:1.17.1-alpine
COPY --from=build app/web /usr/share/nginx/html/
# optional
COPY default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
위의 Dockerfile을 쪼개서 확인해 보자.
# BUILD (빌드를 한다는 의미로 주석으로 막아 놓았다.)
FROM node:14.15-alpine AS build (Docker 이미지, node:14.15-alpine 에서 레이어를 생성한다. 이 이미지는 알파인 OS에 node 14.15를 설치한 버전이다.)
ARG MODE=operation (ARG는 변수이다. MODE라는 변수에 operation이 담겨있다고 보면 된다.)
ENV APP_ENV ${MODE} (APP_ENV에 위의 ARG 변수값이 담겨 있다고 보면 된다.)
RUN mkdir -p /app (mkdir -p /app 을 실행한다. root 경로 밑에 /app 이라는 폴더가 생성 된다.)
WORKDIR /app (작업 디렉토리를 지정한다. 해당 디렉토리가 없으면 새로 생성한다. 작업 디렉토리를 지정하면 그 이후 명령어는 해당 디렉토리를 기준으로 동작한다.)
COPY . /app/ (Docker 밖에 있는 파일을 Docker 안으로 복사한다.)
(필요한 라이브러리들을 설치한다. 설치는 WORKDIR 기준으로 진행 된다.)
RUN apk add --update nodejs nodejs-npm && apk add bash
RUN apk -U add curl jq bash nodejs nodejs-npm python3 py3-pip && \
npm install && \
npm install -g @angular/cli && \
rm -rvf /var/cache/* /root/.npm /tmp/*
RUN ng build --configuration operation (앵귤러를 빌드할때 사용하는 명령어이다.)
아래는 앵귤러 공식 가이드
https://angular.kr/guide/build
# RUN (두번째 이므로 멀티 빌드이다. 빌드를 한다는 의미로 주석으로 막아 놓음)
FROM nginx:1.17.1-alpine (알파인 os에 nginx를 설치한 os라는 의미)
COPY --from=build app/web /usr/share/nginx/html/ (build로 지정한 환경에서 파일을 복사하여 최종 이미지에 추가)
# optional (추가적 실행사항)
COPY default.conf /etc/nginx/conf.d/default.conf (default.conf 파일을 해당 경로로 복사)
EXPOSE 80 (80포트로 서비스)
CMD ["nginx", "-g", "daemon off;"] (컨테이너 안에서 실행할 커맨드, foreground로 실행되도록 daemon off 옵션 추가, -g 플래그는 전역으로 설정하는 의미이다.)
'Docker > Docker 이미지 빌드' 카테고리의 다른 글
실행중인(customed) 도커 이미지를 commit 및 실행하기 (0) | 2023.07.07 |
---|---|
직접 도커 이미지를 빌드하기 (0) | 2021.09.03 |