Page 25 -
P. 25
세 번째로 유의할 사항은 도커 이미지를 최대한 경량으로 만드는 것이다. 컨테이너를 실행할 때
노드상에서 사용할 도커 이미지가 없다면 외부에서 이미지를 풀(다운로드)하여 가지고 와야 한다.
그러므로 도커 이미지는 가급적 경량인 상태로 만들어야 한다. 바로 실행 가능한 방법으로 dnf/ 1
yum이나 apt로 패키지를 설치한 후 저장소 패키지 목록 등의 캐시 파일을 삭제하는 것을 생각해
볼 수 있다. 나중에 설명할 멀티 스테이지 빌드를 활용하면 이미지에 필요한 파일만 추가할 수 있
다. 또 기본 이미지가 경량인 배포판 이미지를 사용하는 것도 하나의 방법이다. 이러한 경량 배포 도커 복습과 Hello, Kubernetes
판으로는 알파인 리눅스(Alpine Linux)나 Distroless가 있다. 여기서 자세한 설명은 생략하지만,
도커 파일 최적화에 따라 레이어를 줄이거나 도커 이미지를 생성할 때 스쿼시(squash)를 사용하여
이미지를 경량화할 수도 있다.
마지막 포인트는 컨테이너 내부에서 프로세스를 기동하는 실행 계정 권한을 최소화하는 것이다.
특히 root 사용자를 사용하면 큰 보안 사고로 이어질 수 있으므로 최대한 사용하지 않도록 한다.
1.1.3 도커 파일 작성법
도커 이미지는 도커 파일을 기반으로 이미지가 빌드된다. 도커 파일은 코드 1-1과 같은 형태
로 작성하는 컨테이너 이미지 작성 매뉴얼 같은 것이다. 여기서는 HTTP 요청이 오면 ‘Hello,
Kubernetes’라고 응답하는 Go 언어 애플리케이션(main.go)을 실행하는 컨테이너 이미지의 생
성 방법을 예로 들어 설명한다.
코드 1-1 도커 파일 예제(Dockerfile)
# Alpine 3.11 버전 golang 1.14.1 이미지를 기반 이미지로 사용
FROM golang:1.14.1-alpine3.11
# 빌드할 머신에 있는 main.go 파일을 컨테이너에 복사
COPY ./main.go ./
# 빌드 시 컨테이너 내부에서 명령어 실행
RUN go build -o ./go-app ./main.go
# 실행 계정을 nobody로 지정
USER nobody
# 컨테이너가 기동할 때 실행할 명령어 정의
ENTRYPOINT ["./go-app"]
33
쿠버네티스_04.indd 33 2021-07-20 오후 1:32:57