Docker Image build

도커 이미지 구조

ubuntulayer A > layer B > layer C 순서대로 쌓여서 이미지가 생성됩니다.

nginxubuntu 기반으로 만들어지고 마지막에 nginx만 쌓이는 구조입니다..

web appnginx 이후에 쌓이는 형태를 가집니다.

 

docker image inspect nginx:latest

// 아래와 같이 layer가 쌓인 것을 배열값으로 볼 수 있습니다.
"RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d310e774110ab038b30c6a5f7b7f7dd527dbe527854496bd30194b9ee6ea496e",
                "sha256:eb7e3384f0ab3a08dd0163ab66625d954e511e8fa112c09923e261418c8524cb",
                "sha256:1dc45c680d0f1615d45021e85028c5d2089468518ec44b7aeeb947cdf0b22364",
                "sha256:ea43d4f82a03877421d6bed1db76fd58f87555193a7921cefb22d6067d8963a7",
                "sha256:9c6261b5d19808f0feab896f5f65c0f6287aa8589f880d4af64414608e54c023",
                "sha256:a7e2a768c198ee94c3a3e8a1cc199a69510da1e39fd85beddc2d4f3200a21d1e",
                "sha256:d26d4f0eb474290793ba42d20b4880daa7c6ddf0379adeb1c121e04f2840712e"
            ]
        },

 

web app image layerread only 이며 컨테이너를 삭제하면 layer도 사라집니다. 

 

Dockerfile 없이 빌드하기 

현재 가동중인 Docker 컨테이너를 참조를 하여 새로운 이미지를 빌드를 할 수 있습니다. 

# 우분투 서버 가동
docker run -it --name my_server ubuntu:focal 

# 기존 서버 빌드 
docker commit -a fastcampus -m "First Commit" my_server my_ubuntu:v1

 

Dockerfile로 빌드 하기

도커에서 제공하는 문법으로 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"]

# 실행 시 
Sending build context to Docker daemon  4.641MB

위와 같은 메세지와 함께 빌드 시작. 여기서 build context에 대해서 주의 깊게 봐야 합니다.

 

빌드 컨텍스트

도커 빌드 명령 수행 시 현재 디렉토리를 빌드 컨텍스트라고 합니다. Dockerfile로부터 이미지 빌드에 필요한 정보를 도커 데몬에게 전달하기 위한 목적입니다. 그렇기 때문에 현재 디렉토리에 용량을 많이 차지하는 데이터가 존재하는 경우 build하는데 오래 걸리는 문제가 존재합니다. 이러한 문제점을 해결하기 위해 build context에서 제외하는 문법을 제공하는 .dockerigniore 파일을 작성을 하면 됩니다. 

 

// .dockerignore

# comment 
* /temp*
* / * /temp*
temp?

*.md
!README.md

 

그리고 기존에 이미 한번 빌드를 하였던 디렉토리를 재 빌드시 캐싱해두었던 내용을 기반으로 하여 빌드를 필요로 하지 않는 layer들을 넘어가게 됩니다. 

 

# 재빌드시 logs

Sending build context to Docker daemon  4.641MB
Step 1/6 : FROM node:12-alpine
 ---> bb6d28039b8c
Step 2/6 : RUN apk add --no-cache python3 g++ make
 ---> Using cache
 ---> 5758608a3aa9
Step 3/6 : WORKDIR /app
 ---> Using cache
 ---> 0bba026a987c
Step 4/6 : COPY . .
 ---> 48c0c7dcac64
Step 5/6 : RUN yarn install --production
 ---> Running in 18e90180e0c0

'Infra > Docker' 카테고리의 다른 글

Docker docker-compose  (0) 2023.09.26
Docker image 경량화  (0) 2023.09.26
Docker image 압축 및 풀기, Docker Hub 활용  (0) 2023.09.26
Docker Log  (0) 2023.09.25
Docker Volume 연결 방식 및 방법  (0) 2023.09.25