[Docker] scratch 이미지 경량화

2024. 10. 28. 16:06·OS/Docker

 

이번에는 scratch를 이용해서 애플리케이션을 최대한 경량화된 상태로 도커 이미지를 만들어 보는 실습을 통해 scratch에 대한 이해를 하고자 한다. 먼저 scratch를 통해 애플리케이션 이미지 생성을 위한 실행파일 생성, c 컴파일러 gcc를 설치하고자 한다.

 

ubuntu@docker:~/ch11$ mkdir lightweight2 && cd $_
ubuntu@docker:~/ch11/lightweight2$ sudo apt install -y gcc

# C 프로그램으로 정적 바이너리 생성(실행시 go to lightweight image! 메시지 출력)

ubuntu@docker:~/ch11/lightweight2$ vim go-to-lightweight-image.c
#include <stdio.h>
int main()
{
 printf("Go to lightweight image!\n");
 return 0;
}

 

ubuntu@docker:~/ch11/lightweight2$ gcc --static -o go-to-lightweight-image go-to-lightweight-image.c
ubuntu@docker:~/ch11/lightweight2$ ./go-to-lightweight-image
Go to lightweight image!

 

명령어를 통해 정적 바이너리로 컴파일 할 수 있다. 정적 바이너리는 실행에 필요한 라이브러리를 포함하므로, scratch 같은 최소한의 docker 이미지에서도 독립적으로 실행할 수 있다.


 

#Ubuntu 기반 Docker image 생성

ubuntu@docker:~/ch11/lightweight2$ vim dockerfile ubuntu
FROM ubuntu:20.04
COPY go-to-lightweight-image /
CMD /go-to-lightweight-image

 

우분투 이미지를 기반으로 go-to-weight-image 파일을 컨테이너의 루트 디렉토리에 복사했다.  기본 실행 명령어로 설정하여 컨테이너가 시작될 때 go-to-lightweight-image 파일이 자동으로 실행된다.

 

# Docker 빌드 및 실행

ubuntu@docker:~/ch11/lightweight2$ docker build -t lightweight:1.0 -f dockerfile-ubuntu .

 

이렇게 해주면 lightweight1.0 이미지에서 c프로그램이 우분투 기반으로 실행이 된다.


#scratch 이미지를 활용하여 Docker image 생성

 

scratch 이미지는 아무것도 포함하지 않은 빈 베이스 이미지로, 기본적인 실행파일과 필요한 라이브러리까지 사용자가 모두 제공해야한다.

ubuntu@docker:~/ch11/lightweight2$ vim dockerfile-scratch
FROM scratch
COPY go-to-lightweight-image /
CMD ["/go-to-lightweight-image"]

앞서 만든 정적 바이너리 파일을 컨테이너 루트 디렉토리에 복사를 해주고 scratch 이미지는 기본 운영체제가 없으므로 파이을 추가하려면 반드시 정적 바이너리 파일이 필요하다. 컨테이너가 실행될 때 /go-to-lightweight-image 파일을 실행하도록 설정하였다.

 

# Docker 빌드 및 실행

ubuntu@docker:~/ch11/lightweight2$ docker build -t lightweight:1.0 -f dockerfile-scratch .

# 이미지 크기 비교

 

scratch 이미지는 매우 가벼운 컨테이너 환경을 제공하는 것 같다. 용량을 줄이고 보안을 강화할 때 효과적인 것 같다.

 

# 도커 이미지 파일 결과 확인

ubuntu@docker:~/ch11/lightweight2$ docker run -it lightweight:1.0
Go to lightweight image!
ubuntu@docker:~/ch11/lightweight2$ docker run -it lightweight:2.0
Go to lightweight image!
저작자표시 비영리 변경금지 (새창열림)

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

[Docker(go, shell-scr)] Multi-stage Build 이미지 경량화  (0) 2024.11.04
[Docker] 데이터 지속성을 위한 Volume 구성  (0) 2024.10.30
[Docker] 이미지 경량화  (1) 2024.10.28
[Docker] Dokerfile 빌드 (개발 & 배포 과정)  (0) 2024.10.28
[Docker] Dockerfile 및 명령어  (0) 2024.10.28
'OS/Docker' 카테고리의 다른 글
  • [Docker(go, shell-scr)] Multi-stage Build 이미지 경량화
  • [Docker] 데이터 지속성을 위한 Volume 구성
  • [Docker] 이미지 경량화
  • [Docker] Dokerfile 빌드 (개발 & 배포 과정)
Kouji
Kouji
Journey to Becoming a Data & Server Engineer
  • Kouji
    Kouji's Data & Server Journey
    Kouji
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Programming
        • Python
        • SQL
      • Data & AI
        • Data Analysis
        • Ai
      • Cloud(AWS)
      • OS
        • Linux
        • Docker
        • Jenkins
        • Ubuntu
        • Window
        • Kubernates
        • Ansible
      • Network
        • NVIDIA
        • Network[이론]
        • Network[GNS3, Packet]
        • Network[On-Premise]
        • Network [L2, L3]
      • 트러블 슈팅
      • Life
        • My Career Stories
        • Personal
      • 개발 + OS 지식 함양
  • 블로그 메뉴

    • 홈
    • 관리 페이지
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ubuntu
    티스토리챌린지
    인프라
    클라우드엔지니어
    웹
    화이팅
    오블완
    서버
    AWS
    서버엔지니어
    docker
    보안
    dns
    L3
    라우팅
    VMware
    CISCO
    네트워크엔지니어링
    네트워크
    스위치
    OS
    리눅스
    네트워크엔지니어
    Linux
    알고리즘
    도커
    네트워크관리사
    인프라엔지니어
    시스템엔지니어
    IT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kouji
[Docker] scratch 이미지 경량화
상단으로

티스토리툴바