도커 이미지 다루기 - 이미지 빌드

Junghun Park·2022년 7월 11일

Dev-Ops

목록 보기
5/9

도커 이미지 구조

Docker Image

  • nginx - 우분투 기반으로 이루어 졌다고 가정
  • web app - nginx 기반으로 이루어 졌다고 가정

layer A,B,C - 새로운 변경사항이 위에 쌓이는 레이어 구조

  • nginx는 우분투 기반으로 구성되었기 때문에 layer C 위에 nginx 레이어가 쌓임
  • web-app 도 마찬가지로 nginx레이어 위에 web 레이어가 쌓임

Docker Container

  • web-app image 기반으로 컨테이너를 구성
  • 이미지가 web-app image layer라는 이름으로 컨테이너가 실행될 때 복사됨
  • 이 레이어는 Read Only layer로 생성됨 (내부 파일 변경 불가)
  • 추가로 컨테이너가 생성될 때 마다 컨테이너 레이어가 생성됨 (R/W layer)
  • 컨테이너가 종료될 때 컨테이너 레이어도 삭제됨

Dockerfile 없이 이미지 생성

기존 컨테이너를 기반으로 새 이미지를 생성할 수 있다.

  • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • ubuntu 컨테이너의 현재 상태를 my_ubuntu:v1 이미지로 생성

$ docker commit -a fastcampus -m “First Commit” ubuntu my_ubuntu:v1

Dockerfile 이용하여 이미지 생성

도커 명령어를 이용한 Dockerfile 작성

FROM node:12-alpine
RUN apk add --no-cache python3 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

docker bulid 명령어를 이용하여 이미지 생성

-t 태그 옵션
docker build -t my-app:v1 ./

-f 도커파일의 경로 나타냄
docker build -t my-app:v1 -f app/Dockerfile

도커 빌드 과정중 재사용이 가능한 layer는 cache를 이용하여 빌드함

빌드 컨텍스트

도커 빌드 명령 수행 시 현재 디렉토리를 빌드 컨텍스트라고 함
Dockerfile로부터 이미지 빌드에 필요한 정보를 도커 데몬에게 전달하기 위한 목적
때문에 해당 디렉토리에 파일이 너무 많거나 용량이 큰 경우 빌드에 필요한 시간이 늘어남

.dockerignore

.gitignore와 동일한 문법을 가지고 있음
특정 디렉토리 혹은 파일 목록을 빌드 컨텍스트에서 제외하기 위한 목적

0개의 댓글