반응형

본 내용은 인프런의 데브위키님의 강의 "개발자를 위한 쉬운 도커" 내용을 바탕으로 정리한 내용입니다.

도커의 레이어 관리

  1. Dockerfile에 작성된 지시어 하나 당 레이어가 한 개 추가되는데 불필요한 레이어가 많아지면 이미지의 크기가 늘어나고 빌드 속도가 느려질 수 있다.

그림 1) 레이어 관리 1


 

  1. RUN 지시어는 &&을 활용해 최대한 하나로 처리해야 하고 불필요한 명령어를 추가해서 레이어의 개수를 늘리지 않아야 한다.

그림 2) 레이어 관리 2


 

  1. 애플리케이션의 크기는 가능한 작게 관리한다.

그림 3) 레이어 관리 3


 

  1. 베이스 이미지는 가능한 작은 이미지를 사용해야 하므로 alpine OS를 사용하는 것이 좋다.
    • 도커의 nginx나 ubuntu 같은 다른 이미지 사용시에도 태그에 alpine이 붙어있는 버전을 사용하는 것이 좋다.

그림 4) 레이어 관리 4


 

  1. .dockerignore 파일을 사용해서 불필요한 파일을 제거한다.

그림 5) 레이어 관리 5


 

예시 1) 스크래치 이미지를 사용한 빌드 실습

easydocker/go-scratch/Dockerfile

# git build 폴더 다운로드
git clone https://github.com/daintree-henry/build.git

# 0. 소스 코드 변경사항 초기화
git reset --hard HEAD && git clean -fd

# 1. 실습 폴더 easydocker/build 이동 및 브랜치 변경
git switch 02-practice

# 2. 실습 폴더 easydocker/build/05.go-scratch 이동 및 브랜치 변경
cd 05.go-scratch

# 3. helloworld 이미지 빌드
docker build -t helloworld .

# 4. 컨테이너 실행
docker run -d -p 8080:8080 --name go-helloworld helloworld

# 이미지가 7MB로 작게 생성되어 있다.
# 정적 바이너리 파일로 빌드할 수 있는 go언어는 이미지를 작게 생성하는데 유리한 언어이다.
docker image ls helloworld

go 언어로 개발한 웹 애플리케이션 소스 (easydocker/go-scratch/main.go)

package main
import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Go, Scratch World!")
    })

    fmt.Println("Server is running on port 8080")
    http.ListenAndServe(":8080", nil)
}

 

easydocker/go-scratch/Dockerfile

FROM golang:alpine AS builder
WORKDIR /app
COPY main.go . ----------------소스코드 복사
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o helloworld main.go --------------애플리케이션 빌드

FROM scratch
COPY --from=builder /app/helloworld .  --------------빌드스테이지에서 애플리케이션 복사
EXPOSE 8080
ENTRYPOINT ["./helloworld"] -------------------------애플리케이션 실행
반응형

'Docker' 카테고리의 다른 글

[Docker] 도커 실무(3 Tier 아키텍처 구성)  (0) 2024.07.19
[Docker] 도커 실무(캐싱을 활용한 빌드)  (0) 2024.07.19
[Docker] 도커 볼륨  (0) 2024.07.19
[Docker] 상태없음(Stateless)  (0) 2024.07.19
[Docker] 도커 네트워크  (0) 2024.07.19

+ Recent posts