Docker Building Efficient Docker Container Images with BuildKit 페이지 정보 작성자 Docker 댓글 0건 조회 9,570회 작성일 20-03-10 01:43 목록 본문  ## Introduction to Building Container Images with Docker BuildKit Docker BuildKit 은 차세대 컨테이너 이미지 빌더로 Docker 이미지를 보다 효율적이고 안전하며 빠르게 만들 수 있습니다. Docker 릴리스 버전 v18.06 에 통합되었습니다. BuildKit 은 Moby 프로젝트의 일부로 이미지 빌드 프로세스를 배우고 실패한 후에 개발되었습니다. * 동시 * 캐시 효율 * 스토리지 관리를 위한 더 나은 지원 `BuildKit` 은 OCI 또는 [Docker](https://www.docker.com/) 와 같은 여러 내보내기 형식에서 프론트 엔드 지원 (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**"](https://www.xenonstack.com/blog/deploy-postgresql-kubernetes-docker/)로 PostgreSQL 을 배포하는 방법 이해 * Docker 에 대해 자세히 알아보십시오 ["**아키텍처 및 보안**"](https://www.xenonstack.com/blog/docker-application-solutions/) https://www.youtube.com/watch?v=kkpQ_UZn2uo https://www.youtube.com/watch?v=JofsaZ3H1qM 이전글Compose file version 3 reference #1 20.03.10 다음글Dockerfile Reference #3 20.03.10 댓글 0 댓글목록 등록된 댓글이 없습니다.