Building Efficient Docker Container Images with BuildKit 정보
Building Efficient Docker Container Images with BuildKit관련링크
본문
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 의 최신 캐싱 및 병렬 실행 기능을 사용하여 기존 도커 빌드와의 차이점을 확인하십시오.
Fig 4a – Docker 빌드를 처음부터 기반으로하면 샘플 프로젝트를 2.5 배 빠르게 빌드 할 수 있습니다.
Fig 4b – 로컬 캐시로 동일한 빌드를 실행하면 속도가 7 배 빠릅니다.
Fig 4c – 새로운 소스 코드로 반복 가능한 도커 빌드는 빌드 속도가 2.5fx 빨라집니다.
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 컨테이너에 대한 자세한 내용은 다음 단계를 따르는 것이 좋습니다.
- "Docker on Kubernetes"로 PostgreSQL 을 배포하는 방법 이해
- Docker 에 대해 자세히 알아보십시오 "아키텍처 및 보안"
https://www.youtube.com/watch?v=kkpQ_UZn2uo
0
댓글 0개