본문 바로가기

Docker/Docker 이미지 빌드

Docker 빌드 명령어

# 예제를 활용하여 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

 

Angular 가이드

Angular 가이드

angular.kr


# 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 플래그는 전역으로 설정하는 의미이다.)