Amazon Web Services 한국 블로그
Finch – 오픈 소스 기반 컨테이너 빌드 클라이언트 프로젝트 출시
Finch는 Linux 컨테이너를 구축, 실행 및 게시하기 위한 새로운 명령줄 클라이언트를 만드는 오픈 소스 프로젝트입니다. Lima, nerdctl, containerd, BuildKit을 포함하여 선별된 사실상 표준 오픈 소스 구성 요소 세트와 함께 기본 macOS 클라이언트의 간단한 설치를 제공합니다. Finch를 사용하면 로컬에서 컨테이너를 생성 및 실행하고 OCI(Open Container Initiative) 컨테이너 이미지를 빌드 및 게시할 수 있습니다.
Finch는 아직 기본 기능 만을 갖춘 신규 프로젝트로 처음에는 macOS만 지원하지만, 향후 Windows 및 Linux 플랫폼 지원 로드맵을 만들고 계속해서 커뮤니티를 통해 발전하고자 합니다. Docker의 CTO인 Justin Cormack은 “우리는 Finch의 containerd 및 BuildKit 채택에 대해 낙관적이며 AWS가 업스트림 기여를 위해 우리와 협력하기를 기대합니다.”라고 기대를 표시했습니다. Finch는 Apache 2.0 라이선스에 따라 자유롭게 사용 가능하며, 질문이나 의견 또는 버그 리포트, 코드 기여 등을 기대합니다.
Finch 프로젝트 개요
Finch는 컨테이너가 실행되는 리눅스 호스트가 아닌 개발 환경에서 리눅스 컨테이너를 구축하기 위한 기존 상용제품이나 오픈 소스 프로그램을 대체하는 게 아니라 협력을 하고자 합니다. 특히, CNCF(Cloud Native Computing Foundation)에 샌드박스 프로젝트로 포함된 Lima는 Mac 사용자에게 containerd 및 nerdctl을 사용하며, Finch에서도 이를 이용합니다. nerdctl 및 Lima를 만든 Akihiro Suda는 “AWS가 nerdctl 및 Lima에 기여하고, 이를 중심으로 커뮤니티가 성장하면서, Finch와 함께 Lima 및 nerdctl을 개선하기 위해 AWS와 협력할 수 있기를 기대합니다.”라고 표시했습니다.
Finch는 Lima 및 nerdctl에 직접 의존하는 구성 요소를 의존성과 함께 간단한 macOS용 설치 프로그램으로 패키징해주어 사용자가 쉽게 사용 가능합니다. 뒷단 오픈 소스 구성 요소와 해당 의존성을 관리해 주게 됩니다. 앞으로 Finch 클라이언트는 벤더 중립적인 오픈 소스 프로젝트로만 구성된 선별된 배포판이 만들고, 사용자들이 필요한 확장 기능이나 부가 기능을 추가할 수 있도록 할 예정입니다. Finch를 사용하는 데 AWS 계정이 필요하지는 않지만 AWS 고객인 경우 AWS 서비스와 함께 Finch를 사용할 때 현재 AWS Support 플랜에 따라 지원을 해 드립니다.
Finch 시작하기
MacOS용 Finch 배포판을 설치하면 바로 컨테이너 빌드 및 실행을 시작할 수 있습니다. Finch는 nerdctl과 직접 통합되기 때문에 익숙해진 모든 일반적인 명령과 옵션은 기본적으로 Linux에서 실행하는 것과 동일하게 작동합니다. 기존 Dockerfile을 사용하여 amd64 또는 arm64 아키텍처용 이미지를 빌드하고 실행할 수 있습니다.
설치 후 Finch의 가상 환경을 초기화하고, 바로 리눅스 가상 머신을 실행할 수 있습니다.
channy ~ % finch vm init
channy ~ % finch vm start
INFO[0000] Starting existing finch virtual machine..
INFO[0000] Using the existing instance "finch"
INFO[0000] Starting vmnet daemon for "finch-shared" network
INFO[0000] Attempting to download the nerdctl archive from "https://github.com/containerd/nerdctl/releases/download/v0.22.0/nerdctl-full-0.22.0-linux-arm64.tar.gz"
INFO[0002] SSH Local Port: 58946
INFO[0002] [hostagent] Waiting for the essential requirement 1 of 5: "ssh"
INFO[0023] [hostagent] Waiting for the essential requirement 2 of 5: "user session is ready for ssh"
INFO[0082] [hostagent] Waiting for the essential requirement 3 of 5: "sshfs binary to be installed"
INFO[0082] [hostagent] Waiting for the essential requirement 4 of 5: "/etc/fuse.conf (/etc/fuse3.conf) to contain \"user_allow_other\""
INFO[0082] [hostagent] Waiting for the essential requirement 5 of 5: "the guest agent to be running"
INFO[0094] READY. Run `limactl shell finch` to open the shell.
INFO[0095] finch virtual machine started successfully
이제 Amazon Elastic Container Registry (Amazon ECR) 퍼블릭 레지스트리에서 Amazon Linux 2022를 설치할 수 있습니다.
channy ~ % finch run --rm public.ecr.aws/amazonlinux/amazonlinux:2022 uname -a
public.ecr.aws/amazonlinux/amazonlinux:2022: resolved |++++++++++++++++++++++++++++++++++++++|
index-sha256:549759288ea88d4f0069efe695401fb62c56d8aac: done resolved |++++++++++++++++++++++++++++++++++++++|
...
Linux e98a72c2f1f8 5.17.5-300.fc36.aarch64 #1 SMP Thu Apr 28 15:22:08 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
이제 샘플 애플리케이션을 만들어 봅시다! Docker 리포지토리에서 복제한 후 finch CLI에서 docker build
와 동일한 명령을 사용할 수 있습니다.
channy ~ % git clone https://github.com/docker/getting-started.git
channy ~ % cd getting-started/
channy@ getting-started % finch build -t getting-started .
[+] Building 28.0s (1/24)
=> => sha256:c1118cb56dd21f4f49f2d8 0B / 1.40kB 19.4s
=> => sha256:7f968361d21dcbfdbe48f1 0B / 957B 18.9s
=> => sha256:907a82648d83d31d9ee525 0B / 625B 18.8s...
unpacking docker.io/library/getting-started:latest (sha256:e35ed865221d6f711a73396f9fa8)...done
빌드된 컨테이너 이미지를 로컬에서 실행할 수 있습니다!
channy@ getting-started % finch run -dp 3000:3000 getting-started
AWS 고객인 경우 Amazon Linux에 구축된 기본 컨테이너 이미지를 Amazon ECR에서 가져와서 컨테이너 이미지 구축을 시작할 수 있습니다. 그런 다음 컨테이너 이미지를 Amazon ECR에 게시한 후, 이를 Amazon ECS나 Amazon EKS 같은 컨테이너 관리도구나 AWS App Runner 및 AWS Lambda 같은 서버리스 서비스에 컨테이너 애플리케이션을 배포합니다
알아두시면 좋은 점
다음은 Finch 기능에 대해 염두에 두어야 할 몇 가지 사항입니다.
- 이미지 호환성: Finch로 만든 이미지는 클라우드 환경 및 온프레미스에서 실행되는 모든 주요 상용 및 오픈 소스 컨테이너 제품을 포함하여 거의 모든 컨테이너 솔루션과 호환됩니다. 이를 통해 이미지가 로컬에서 실행되는 것과 동일한 방식으로 프로덕션에서 실행될 것이라는 확신을 가지고 로컬에서 빌드하고 테스트할 수 있습니다.
- 업스트림 기여: Finch는 nerdctl CLI, containerd 런타임 및 lima 가상 머신 관리자와 같은 몇 가지 핵심 오픈 소스 구성 요소와 이러한 업스트림 구성 요소 위에 특정 개선 사항 및 기능을 통합합니다. Finch CLI의 패키징, 배포 및 설치 시스템과 같은 주요 기능을 제외하고, 오픈 소스 의존성에 업스트림을 제공할 것입니다.
- 보안 업데이트: 기업 및 개인 개발자는 관리자가 적시에 보안 패치 및 업데이트 릴리스를 제공할 것이라는 확신을 가지고 Finch를 사용할 수 있습니다. AWS를 포함한 오픈 소스 관리자는 프로젝트 및 해당 종속성의 취약점 패치를 담당합니다. 그러나 공동 책임 모델에 따라 업데이트된 버전의 Finch를 사용하는 모든 위치에 설치하는 것은 고객의 책임입니다.
- AWS 고객 지원 – Finch는 GitHub에서 설명서를 제공하고, AWS 설명서에서 사본을 제공합니다. 또한 AWS 고객에게는 Amazon ECS, Amazon EKS, Amazon ECR 등과 같은 AWS 서비스에 적용되는 것과 동일한 AWS Support Plan의 적용을 받습니다.
지금 커뮤니티에 참여해 주세요!
Finch 오픈 소스 커뮤니티는 누구에게나 열려 있습니다. 한 번 시도해 보시고, 관심 있는 향후 출시에 대한 작업에 참여하실 수 있습니다. 제가 말씀 드렸듯이 버그 리포트, 새로운 기능, 수정 또는 추가 문서와 같은 다양한 기여를 환영합니다. Finch Github 레포지터리에서 시작하세요!
– Channy(윤석찬)
이 글은 AWS Open Source Blog의 Introducing Finch: An Open Source Client for Container Development에서 일부 인용하여 편집하였습니다.