4.1 docker build 명령어 기초
docker build
명령어는 Dockerfile로부터 Docker 이미지를 생성하는 기본 방법이야. 이 명령어는 Dockerfile에서 명령어를 가져와 단계별로 실행하면서 레이어로 이루어진 이미지를 만들어. 이번 강의에서는 docker build
명령어가 어떻게 동작하는지, 어떤 옵션이 있는지, 그리고 실무에서 어떻게 사용하는지 알아볼 거야.
docker build
명령어는 Dockerfile과 빌드 컨텍스트로부터 이미지를 생성해. 빌드 컨텍스트는 Docker가 이미지를 생성하기 위해 사용하는 파일들이야. 로컬 머신의 디렉토리일 수도 있고, 예를 들어 GitHub의 저장소일 수도 있어.
문법
docker build [OPTIONS] PATH | URL | -
설명:
-
PATH
: Dockerfile과 빌드 컨텍스트를 포함한 디렉토리 경로. URL
: 원격 저장소의 URL 주소.-
: 표준 입력(stdin)에서 Dockerfile을 읽음.
기본 사용 예제
이 예제에서는 Docker가 현재 디렉토리 (.)
에서 Dockerfile을 사용해서 myimage
라는 이름과 latest
라는 태그를 가진 이미지를 생성할 거야.
docker build -t myimage:latest .
4.2 build
명령어 커스터마이징
docker build
명령어의 주요 매개변수들
docker build
명령어는 빌드 프로세스를 조정할 수 있는 다양한 옵션을 지원해.
1. -t
, --tag
매개변수
-t
또는 --tag
매개변수는 생성된 이미지에 이름과 태그를 할당하는 데 사용돼.
docker build -t myimage:latest .
2. -f
, --file
매개변수
-f
또는 --file
매개변수는 기본 Dockerfile과 다른 Dockerfile을 지정할 수 있게 해 줘.
docker build -f Dockerfile.dev -t myimage:dev .
3. --build-arg
매개변수
--build-arg
매개변수는 Dockerfile에서 ARG 지침을 사용해 정의된 빌드 인수를 전달하는 데 사용돼.
docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .
4. --no-cache
매개변수
--no-cache
매개변수는 캐시를 사용하지 않고 빌드를 수행하게 해 줘. 이 옵션은 모든 명령이 다시 실행되도록 확인하고 싶을 때 유용해.
docker build --no-cache -t myimage:latest .
5. --target
매개변수
--target
매개변수는 멀티스테이지 빌드에서 타겟 단계(stage)를 지정하는 데 사용돼.
docker build --target builder -t myimage:builder .
6. --rm
매개변수
--rm
매개변수는 Docker가 이미지 빌드가 성공적으로 완료된 후 중간 컨테이너를 삭제하도록 지정해 (기본적으로 활성화됨).
docker build --rm -t myimage:latest .
4.3 docker build 예시
예제 1: 기본 빌드
Node.js로 간단한 애플리케이션이 있다고 가정하고 이를 배포하기 위한 Docker 이미지를 생성하고 싶다고 해보자.
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
빌드 명령:
docker build -t mynodeapp:latest .
이 예시에서는 현재 디렉토리에 있는 Dockerfile을 사용해 mynodeapp
이미지를 latest
태그로 생성한다.
예제 2: 빌드 아규먼트 사용
빌드 아규먼트를 사용하면 빌드 중 Dockerfile에 변수를 전달할 수 있다.
Dockerfile
FROM node:14
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
빌드 명령:
docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .
이 예시에서는 APP_VERSION
아규먼트를 Dockerfile에 전달하여 빌드 중 애플리케이션 버전을 설정할 수 있다.
예제 3: 다단계 빌드
다단계 빌드는 필요한 구성 요소만 포함된 이미지를 생성하는 데 사용된다. 이는 최종 이미지의 크기를 줄일 수 있다.
Dockerfile
# 빌드 단계
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 필요한 파일로만 구성된 최종 이미지 생성
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
빌드 명령:
docker build -t mywebapp:latest .
이 예시에서는 먼저 애플리케이션 빌드가 수행되는 중간 이미지 builder가 생성된다. 빌드 완료 후, 애플리케이션은 Nginx를 사용하여 준비된 콘텐츠를 제공하는 최종 이미지로 이동된다.
4.4 실용적인 팁들
1. 명령어 순서 최적화
Docker cache를 효과적으로 사용하려면 명령어를 올바르게 정렬하는 게 중요해. 예를 들어, 자주 변경되지 않는 파일(package.json
같은)을 먼저 복사해서 종속성 재빌드를 최소화하고, 나머지 파일들을 그 이후 복사하는 게 좋아.
COPY package*.json ./
RUN npm install
COPY . .
2. .dockerignore
사용하기
.dockerignore
파일을 추가해서 빌드 컨텍스트에 불필요한 파일과 디렉토리를 제외시켜봐. 이러면 컨텍스트 크기를 줄이고 이미지 빌드 속도를 높일 수 있어.
예시 .dockerignore
:
node_modules
dist
*.log
3. 멀티스테이지 빌드
멀티스테이지 빌드를 사용해서 단순하고 가벼운 이미지들을 만들어봐. 이 접근법은 애플리케이션 실행에 정말로 필요한 파일과 종속성만 포함하도록 하고, 최종 이미지에서 불필요한 데이터(예: 임시 파일이나 소스 코드를 제거)들을 제외할 수 있어.
GO TO FULL VERSION