발표자
- Ryan Moran: VMware Engineer, committee for paketo buildpacks.
- Sophie Wigmore: Technical staff at VMware, maintainer on the paketo buildpacks.
Cloud-Native Buildpacks
Paketo Buildpacks
- Cloud Foundry Foundation 산하 Project
- kpack / pack을 사용해서 Docker image를 생성할 수 있도록 지원함.
- Implementation of the Upstream cloud-native buildpack projects -> for containerizing your application.
일반적으로 애플리케이션의 Containerizing을 위해서 Dockerfile을 생성하고 관리함. Buildpack을 사용하면 소스코드만 있으면 된다.
- 소스코드
- 소스코드를 빌드할 플랫폼 : 소스코드와 빌드팩을 실행해서 container image를 생성하는 영역. 일종의 integration point.
- pack: Upstream Cloud-native buildpack Project
- kpack
- 사용할 builder 선택
- cloud-native buildpack implementation인 여러 빌드팩 사용 가능.
- simplist way = paketo builder 라고 생각함
- builder는 크게 buildpack / stack 로 구성됨.
- buildpack : 다양한 언어로 된 소스코드를 지원할 용도
- stack: 애플리케이션이 빌드 / 구동될 base OS. OS 레벨에서 필요한 여러 패키지 포함.
- 소스코드 + builder -> OCI (open container initiative) Compliant / Production-Ready 컨테이너 이미지 생성.
- 여러 개의 레이어로 구분됨. 맨 아래의 OS Layer부터 Application Dependency Layer / Application Layer까지.
기존 Dockerfile 문법에 매칭되는 builder 컴포넌트는 위와 같다. 간단한 Python Application으로 예를 들면
- 맨 처음 From으로 Base OS image 정의
- builder에서 base OS에 해당하는 Stack
- base 이미지에 python 설치 / Python PATH 지정
- python 언어로 쓰인 애플리케이션임을 Detect -> CPython Buildpack에서 어떤 버전을 설치하고 환경변수 지정할 것인지 결정
- 애플리케이션에 필요한 dependency를 설치할 package manager 사용 (pip in python)
- Pip install buildpack에서 동일한 작업 수행
- layer caching을 지원하므로, rebuild 시 시간절약 가능
- CMD로 애플리케이션 시작
- Python Start Buildpack에서 작업 수행
위 예시에서는 크게 세 개의 빌드팩이 사용된 걸 볼 수 있음
- Cloud Native Buildpack (CNB)은 문제해결에 자유롭게 사용할 수 있도록 모듈화되어 있음. Old School v2b 빌드팩과의 차이점이라고 함.
- 필요한 부분 포크해서 자유롭게 커스터마이징 -> 변경된 부분만 기존 모듈을 대체해서 쓰면 된다.
What's New?
프로젝트 자체에 그동안 꽤 많은 발전이 있었다.
- ubuntu 22.04 LTS 지원하도록 빌드팩 업데이트
- Stack Creation tool
- Reproducible build..
Alpine 이미지 사용해서 이미지 경랑화 / 빌드속도 향상 등을 근미래 목표로 잡고 있음.
이번에 새로 추가된 기능들을 몇 가지 소개함
JS Frontend WebServer buildpack 지원
자바스크립트 Frontend 애플리케이션 지원.
- Static file buildpack 사용 가능해짐
- 브라우저에서 실행되는 React / NextJS (NestJS? 발음 헷갈림.) 애플리케이션을 Serving 할 때.
- 기존에는 css / asset과 nginx / httpd 설정값을 전부 bundle up -> static file declaration & push that on cloud Foundry.
- Web Server Buildpack 사용 -> 소스코드만 있으면 됨.
- 소스코드 detect -> install node & all the dependencies -> webserver에 serve 가능한 minified gzip bundle 생성.
- Get rid of "static file" entirely.
- 환경변수 두 개만 설정하면 됨. "this is a frontend javascript application", "I want you to serve with nginx"
Demo 영상으로 시연. (8:57 ~ 12:30)
Stack Tooling
Declarative Way of Specifying "What actually should go into a stack"
- toml 파일에 base image / dependency needed 를 정의하면 Build image / Run image를 생성해준다.
- M1 / M2 맥 쓰는 사람들을 위한 ARM64도 지원 예정
What is a Stack?
Stack은 build image / run image 두 개의 이미지로 구성됨.
- 둘 다 Base OS 이미지를 가지고 있음. paketo에서는 ubuntu bionic / jammy 지원.
- base OS image 위에, 각 이미지 동작에 필요한 package layer가 있음.
- build image: 소스코드 컴파일 / 빌드에는 필요하지만 애플리케이션 동작에는 불필요한 packages가 포함됨. i.e. gcc
- run image: runtime 시점에 필요로 하는 packages
Demo - Stack creating process (15:11 ~ 19:05)
간단한 stack 생성하기
- 간단한 go 애플리케이션 (jammy-tiny-stack 디렉토리)
- /stack 디렉토리를 보면 build.Dockerfile, run.Dockerfile, stack.toml 파일이 있다.
stack.toml 파일을 확인해보면
[build]
가 build image 영역. 아래의 내용이 정의되어 있다.
- 어떤 dockerfile을 쓸 것인지
- base OS는 무엇인지
- 필요한 packages는 어떤 것들인지
[run]
이 run image 영역. build와 비슷한 구조이고, args에 있는 packages가 build보다 확연히 적다.
build.Dockerfile 내부.
- ubuntu jammy로 image 설정
- install packages / setup labels / cleanup 명령어들.
jam
이라는 cli로 stack을 cli로도 구성할 수 있다.
- build output, run output cli로 지정해서 oci output을 만들 수 있음.
- 만들어진 oci 이미지는 container registry에 등록하거나, docker run으로 실행해서 볼 수 있음.
SBOM Support
Secure Software Supply Chain을 지원하기 위해서는 SBOM Suppport 여부가 중요했는데, paketo buildpack에서 이제 지원함.
- internally use Anchore's Syft library to generate the SBOM during the build.
- Can access to the build time / dependencies -> source code scanning 중이거나 final app image만으로는 이 정보를 볼 수 없음
- CycloneDX, SPDX, Syft Schema를 지원한다고 함
Demo (20:00 ~ 24:37)
커뮤니티 / 프로덕트 자랑
우리 커뮤니티 활발하다
우리 프로덕트 많이 쓴다. knative functions에서 paketo buildpack 쓰고 있음
'강연' 카테고리의 다른 글
AWS Startup BootCamp Essential - Serverless 개발 프레임워크 SAM 빠르게 감 잡기 (0) | 2023.05.13 |
---|---|
KubeCon 2022 NA - How to build a Distributed System (0) | 2022.12.11 |
Cloud Foundry Summit 2020 North America - Paketo Buildpack from Source code to Application Image 정리 (0) | 2022.11.17 |
WoowaCon 2022 - 회원 시스템 이벤트 아키텍처로 구축하기 (0) | 2022.10.27 |
if kakao 2021 - 스마트 메시지 서비스 개발기 (kafka Streams) (0) | 2022.07.12 |