Building Efficient Docker Container Images with BuildKit > 서버관리자

서버관리자

서버관리자 모임 게시판 입니다.

Building Efficient Docker Container Images with BuildKit 정보

Building Efficient Docker Container Images with BuildKit

본문

xenonstackbuildkitkeyfeaturessolutions.png

Introduction to Building Container Images with Docker BuildKit

Docker BuildKit 은 차세대 컨테이너 이미지 빌더로 Docker 이미지를 보다 효율적이고 안전하며 빠르게 만들 수 있습니다. Docker 릴리스 버전 v18.06 에 통합되었습니다. BuildKit 은 Moby 프로젝트의 일부로 이미지 빌드 프로세스를 배우고 실패한 후에 개발되었습니다.

  • 동시
  • 캐시 효율
  • 스토리지 관리를 위한 더 나은 지원

BuildKit은 OCI 또는 Docker와 같은 여러 내보내기 형식에서 프론트 엔드 지원 (Dockerfile)과 함께 작동하며 효율적인 캐싱 및 병렬 빌드 작업 실행과 같은 기능을 제공합니다. BuildKit은 실행을 위해 컨테이너 런타임만 필요하며 현재 지원되는 런타임에는 containerd 및 runc가 포함됩니다.

BuildKit 프로젝트의 중요한 구성 요소에 도달하기 전에 제공되는 기능을 살펴 보겠습니다.

BuildKit Key Features

  • 자동 쓰레기 수거
  • 확장 가능한 프론트 엔드 형식
  • 동시 의존성 해결
  • 효율적인 명령 캐싱
  • 캐시 가져 오기/내보내기 빌드
  • 중첩 된 빌드 작업 호출
  • 분배 가능한 근로자
  • 여러 출력 형식
  • 플러그 가능 아키텍처
  • 루트 권한이없는 실행

BuildKit Architecture Overview

BuildKit은 독립형 데몬으로 또는 컨테이너와 함께 사용될 수 있습니다. BuildKit은 BuildKitd라는 빌드 데몬과 BuildKitd를 관리하기위한 CLI 도구 build ctl의 두 가지 주요 구성 요소로 구성됩니다.

Low-Level Build LLB

LLB 는 저수준 빌드 정의 형식입니다. LLB 는 복잡한 빌드 정의를 위해 함께 사용할 수있는 컨텐츠 주소 지정 가능 종속성 그래프를 정의하는 데 사용됩니다. 모든 캐싱 및 실행 작업은 하위 수준 빌더에서 설정됩니다. 캐싱 모듈은 현재 캐싱 모듈과 관련하여 완전히 다시 작성되어 원격에서의 캐싱 및 빌드 캐시 가져 오기-내보내기와 같은 많은 새로운 기능을 지원합니다. 빌드 캐시는 레지스트리로 내보내고 나중에 모든 호스트의 원격 위치에서 검색 할 수 있습니다.

LLB 는이를 실행하여 버킷으로 전달할 수있는 프론트 엔드를 예상합니다. 프론트 엔드는 사람이 읽을 수있는 Dockerfile 일 수 있으며, 여기에서 BuildKit 으로 이동하기위한 명령 세트를 작성했습니다. 우리는 LLB 가 C 에 대한 LLVM IR 이 Dockerfile 에 있다고 말할 수 있습니다.

BuildKitd and Buildctl

BuildKitd 데몬은 OCI (runc)와 Containerd 의 두 작업자 백엔드를 지원합니다. 기본적으로 OCI runc 백엔드가 사용되지만 Conatinerd Worker 백엔드를 처리 할 조항도 있습니다. 앞으로 더 많은 지원 인력이 추가 될 것입니다.

BuildKit Performance Examples

Buildkit 의 최신 캐싱 및 병렬 실행 기능을 사용하여 기존 도커 빌드와의 차이점을 확인하십시오.

xenonstackcontainerimagesbuildkit.png
Fig 4a – Docker 빌드를 처음부터 기반으로하면 샘플 프로젝트를 2.5 배 빠르게 빌드 할 수 있습니다.

xenonstackbuildingdockercontainerimagesbuildkit.png
Fig 4b – 로컬 캐시로 동일한 빌드를 실행하면 속도가 7 배 빠릅니다.

xenonstackenterprisecontainersolutions.png
Fig 4c – 새로운 소스 코드로 반복 가능한 도커 빌드는 빌드 속도가 2.5fx 빨라집니다.

xenonstackbuildkitkubernetesusecases.png
Fig 4d – 새로운 빌드 캐싱 – 캐시에서 원격 소스를 사용하면 캐싱 속도가 9 배 빨라집니다. 위 시나리오에서는 로컬에 캐시가 없었으며 원격 소스에서 캐시 된 컨텐츠를 가져오고 있습니다.

What are the various BuildKit Use Cases?

Building Docker Images in Kubernetes

현재 Kubernetes 클러스터에서 Docker 이미지를 빌드하는 동안 /var/run/docker 를 실행하는 포드가 필요합니다. 양말 hostPath 마운트. 따라서 docker 는 양말을 호스트와 공유하거나 다른 방법으로 docker:dind (docker in docker) 이미지를 Kubernetes 의 docker 빌드 프로세스에 대한 기본 이미지로 실행할 수 있습니다.

이 두 가지 솔루션은 전혀 안전하지 않습니다. 그러나 BuildKit 을 사용하면 루트가 아닌 사용자로 실행할 수 있으며 보안 컨텍스트 구성을 정의해야 합니다. BuildKit 은 루트없는 모드에서 작동합니다.

Custom Outputs

BuildKit 은 도커 이미지 구축 이상의 기능을 활용합니다. 출력 디렉토리 플래그를 추가할 수 있으며 결과 바이너리 또는 결과를 로컬에 출력합니다. 예를 들어 시스템에 Go Environment 설정이 없지만 빌드 환경이 포함된 도커 파일이 있으며 Dockerfile 을 실행하면 빌드 프로세스에서 다른 Dockerfile 이 사용할 수 있는 이진 파일을 로컬로 출력할 수 있습니다. 출력 디렉토리 기능은 버전 v19.03 베타에 통합되었습니다.

Concurrent build process and execution

BuildKit 은 DAG 스타일의 저수준 중급 언어 LLB 를 사용하여 정확한 종속성 분석 및 캐시 무효화를 얻을 수 있습니다. 또한 여러 수직을 동시에 확인하고 실행합니다. 따라서 Dockerfile 또는 모든 프론트 엔드 백엔드의 모든 명령이 병렬로 실행될 수 있습니다.

Remote caching

이 기능은 –cache-from에서 업그레이드된 버전으로, 이미지를 미리 풀링해야 하거나 다단계 빌드를 지원하지 않는 등의 문제가 있었지만 이제 최신 v19.03 릴리스에서는 캐시를 가져올 수 있습니다 원격 소스에서 전체 도커 이미지를 가져 오는 대신 원격 위치에서 도커 이미지에서 캐시 가능한 내용만 가져옵니다.

Frontend Support

BuildKit 은 Dockerfile 프론트 엔드를 지원할뿐만 아니라 Dockerfile 이 아닌 파일에서도 BuildKit LLB 를 컴파일 할 수 있습니다. 다음과 같은 몇 가지 새로운 언어가 제안되고 있습니다.

  • Buildpacks
  • Mockerfile
  • Gockerfile

A Holistic Startegy

BuildKit 은 Dockerfile 을보다 효율적이고 안전하게 구축하는 데 매우 유용합니다. 더 많은 새로운 기능으로 실제로 사용하는 것이 좋습니다. 또한 Windows 컨테이너 빌드 프로세스 지원에서 더 많은 작업을 수행해야합니다. Docker 컨테이너에 대한 자세한 내용은 다음 단계를 따르는 것이 좋습니다.

 

https://www.youtube.com/watch?v=kkpQ_UZn2uo

 

https://www.youtube.com/watch?v=JofsaZ3H1qM

공감
0

댓글 0개

전체 637 |RSS
서버관리자 내용 검색

회원로그인

진행중 포인트경매

  1. 참여1 회 시작24.03.28 11:15 종료24.04.04 11:15
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT