테스트 사이트 - 개발 중인 베타 버전입니다

Building Efficient Docker Container Images with BuildKit

· 5년 전 · 1366

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

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

게시판 목록

서버관리자

서버관리자 모임 게시판 입니다.
글쓰기
🐛 버그신고