Podman, Buildah and Quarkus the Latest in Linux Containers Technology
Total Page:16
File Type:pdf, Size:1020Kb
Podman, Buildah and Quarkus The Latest in Linux Containers Technology Daniel Oh Open Source Summit Japan 2019 1 About Me Daniel Oh ● Principal Technical Product Marketing Manager at Red Hat ○ Cloud Native App Development ○ Agile & DevOps practices ● CNCF Ambassador ● Java Developer ● Opensource.com Moderator ● Public Speaker & Writer [email protected] @danieloh30 danieloh30 INTRODUCTION Container tools landscape is changing. Why? Since Open Container Initiative (OCI) there are several new projects What needs do these projects address? What are these projects and when should I use them? What specific security concern does each address? 3 @danieloh30 INTRODUCTION Early concerns with Docker Since the early days enterprise users of Docker had concerns ● Build requires a “big fat” daemon on every host ● Regression for integration with container platforms Kubernetes/OpenShift ● Build has secret handling issues ● Root/privileged concerns at runtime ● Root/privileged concerns with daemon ● Build requires a running container 4 @danieloh30 INTRODUCTION ● Docker, Red Hat et al. June 2015 ● Two specifications ○ Image format ■ How to package an OCI Image with sufficient information to launch the application on the target platform ○ Runtime ■ How to launch a “filesystem bundle” that is unpacked on disk ● Version 1.0 of each released July 19th 2017 ● Distribution spec started in April, 2018. 5 @danieloh30 CONTAINERS ARE LINUX ARE CONTAINERS Containers are Linux 6 CONTAINERS ARE LINUX Container innovation continues …. buildah.io podman.io LXC Initial Docker OCI release initial CNCF Aug May Mar Mid Jun Nov Mar Apr Jun Sep May Sep May ‘08 ‘11 ‘13 ‘14 ‘15 ‘15 ‘16 ‘17 ‘17 ‘17 ‘18 ‘18 ‘19 Moby OpenShift Initial Buildah Buildah 1.0 online OpenShift release, Skopeo Podman Enterprise Buildah Podman New logo Kubernetes 3.0 RHEL 7 @danieloh30 CONTAINERS ARE LINUX How did Docker change containers? Docker Image Docker CLI Daemon Layers registry Application Docker daemon App. Package CLI Dependencies App. Package Dependencies image container Base Distro Image kernel 8 @danieloh30 SKOPEO Skopeo. The first break away. 9 SKOPEO IMAGE COPY WITH SKOPEO ● Built for interfacing with Docker registry ● CLI for images and image registries Image ツ ● Rejected by upstream Docker ¯\_( )_/¯ Registry ● Allows remote inspection of image metadata - no downloading ● Can copy from one storage to another SKOPEO SECURITY FEATURES Share securely Image No daemon Inspect remote images Repository No pulling potentially malicious images /var/lib/containers Non-root copy. Bridge between registries. or Host /var/lib/docker 10 @danieloh30 PODMAN Podman. The daemonless client for developers and beyond. 11 PODMAN The new container CLI ● @ podman.io ● Client only tool, based on the Docker CLI. (same+) Image ● No daemon! Registry ● Storage for ○ Images - containers/image ○ Containers - containers/storage PODMAN ● Runtime - runc ● Shares state with CRI-O and with Buildah! Containers Images SECURITY FEATURES Run and develop securely No daemon Run without root Kernel Isolate with user namespaces Audit who runs what 12 @danieloh30 PODMAN Developer’s experience ● Provides a familiar command line experience compatible with the Docker CLI ● Great for running, building, and sharing containers outside of Kubernetes/OpenShift ● Build and run containers as non-root (enhanced user namespaces) ● Can be wired into existing infrastructure where the docker daemon/cli are used today ● Use existing Dockerfiles ● Simple command line interface, no client-server architecture ● Docker compatible health checks @danieloh30 PODMAN DEMO PODMAN Podman Demo 14 PODMAN But there’s more : podman pod Pods are a group of one or more containers sharing the same network, pid and ipc namespaces. create Create a new empty pod start Start one or more pods exists Check if a pod exists in stats Display a live stream of local storage resource usage statistics inspect Displays a pod configuration for the containers in one or kill Send the specified signal or more pods SIGKILL to containers in pod stop Stop one or more pods pause Pause one or more pods top Display the running ps List pods processes of containers in a restart Restart one or more pods pod rm Remove one or more pods unpause Unpause one or more pods @danieloh30 BUILDAH Buildah. The secure container builder. 16 BUILDAH The separation of concerns Developer Container Platform Workstation/Laptop DataCenter $ podman build $ docker build OCI Compliant Review/ git Deliver Deploy Source Build Test Appr Repo 3rd Image Party Repo CI/CD LIFECYCLE 17 @danieloh30 BUILDAH Why use Buildah? ● Now buildah.io Application Layer ● Builds OCI compliant images ● No daemon - no “docker socket” Java Runtime Layer ● Does not require a running container ● Can use the host’s user’s secrets. OS Update Layer Java runtime and ● Single layer, from scratch images are made dependencies, and easy and it ensures limited manifest. Application Base RHEL ● If needed you can still maintain Dockerfile based workflow From base, From scratch, SECURITY FEATURES Build securely multi-layer single layer No daemon Shrink the attack surface Fine-grained control of the layers Run builds isolated Better secret management 18 @danieloh30 BUILDAH DEMO BUILDAH Buildah Demo 19 BUILDAH What does Buildah do? buildah from - Build up a container root filesystem from an image or scratch. buildah config - Adjust defaults in the image’s configuration blob. buildah run - Run a command in the container’s filesystem using runc. NOT like docker run. Like Dockerfile RUN. buildah mount - Mount the container’s root filesystem on the host. buildah commit - Commit container’s changes to a new image. 20 @danieloh30 BUILDAH What does Buildah do? buildah push - Push images to registries (Quay etc.) or a local dockerd instance buildah build-using-dockerfile (a.k.a. buildah bud) - Build images using a Dockerfile for instructions buildah unmount - Oh, it also unmounts container filesystems Provide a library API that’s used by the CLI Share libraries and on-disk storage with CRI-O 21 @danieloh30 CRI-O CRI-O. The OCI runtime abstraction for Kubernetes 22 CRI-O OCI AND CRI-O ● A Kubernetes thing ● Now part of CNCF! (April 8th) Container ● OCI daemon ● Implements Kubelet Container Runtime Interface (CRI) Container CRI-O Container READONLY Kubernetes SECURITY FEATURES Run securely in a production cluster Container No daemon Read-only containers Enable fewer capabilities User namespaces Host FIPS mode support 23 @danieloh30 WHERE DO I GO FROM HERE? WHERE Which app will be the best for the Linux Containers? 24 Supersonic Subatomic Java A Kubernetes Native Java stack tailored for GraalVM & OpenJDK HotSpot, crafted from the best of breed Java libraries and standards @danieloh30 @QuarkusIO @danieloh30 @QuarkusIO A stack to write Java apps Cloud Native, Microservices, Serverless @danieloh30 @QuarkusIO BUILDAH DEMO BUILDAH Quarkus Demo 28 Benefit No. 1: Developer Joy A cohesive platform for optimized developer joy: ● Based on standards, but not limited ● Unified configuration ● Zero config, live reload in the blink of an eye ● Streamlined code for the 80% common usages, flexible for the 20% ● No hassle native executable generation @danieloh30 @QuarkusIO Benefit No. 2: Supersonic Subatomic Java REST Quarkus + GraalVM Quarkus + OpenJDK Traditional Cloud-Native Stack 13 MB 74 MB 74 MB @danieloh30 @QuarkusIO Memory (RSS) in Megabytes Benefit No. 2: Supersonic Subatomic Java REST + CRUD Quarkus + GraalVM Quarkus + OpenJDK Traditional Cloud-Native Stack 35 MB 130 MB 218 MB @danieloh30 @QuarkusIO Memory (RSS) in Megabytes Benefit No. 2: Supersonic Subatomic Java REST Quarkus + GraalVM 0.014 Seconds Quarkus + OpenJDK 0.75 Seconds Traditional Cloud-Native Stack 4.3 Seconds REST + CRUD Quarkus + OpenJDK 2.5 Seconds Quarkus + GraalVM 0.055 Seconds Traditional Cloud-Native Stack 9.5 Seconds @danieloh30 @QuarkusIO Boot + First Response Time (in seconds) Benefit No. 3: Unifies Imperative and Reactive @Inject @Inject @Stream(”kafka”) SayService say; Publisher<String> reactiveSay; @GET @GET @Produces(MediaType.TEXT_PLAIN) @Produces(MediaType.SERVER_SENT_EVENTS) public String hello() { public Publisher<String> stream() { return say.hello(); return reactiveSay; } } ● Combine both Reactive and imperative development in the same application ● Inject the EventBus or the Vertx context ● Use the technology that fits your use-case @danieloh30 @QuarkusIO Benefit No. 4: Best of Breed Frameworks & Standards Eclipse Vert.x Hibernate RESTEasy Apache Camel Eclipse MicroProfile Netty Kubernetes OpenShift Jaeger Prometheus Apache Kafka Infinispan @danieloh30 @QuarkusIO WHERE DO I GO FROM HERE? WHERE Where do I find these projects in Red Hat products? 35 WHERE? RED HAT PRODUCTS WHERE CAN I FIND THESE AWESOME PROJECTS IN RED HAT PRODUCTS? SECURING THE PLATFORMS SMART LIGHT CONTAINERS TOOL CONTINUOUS BUILDING, SECURE RUNTIME Red Hat chose to move away from Docker to The container-tools package installs Podman, Red Hat OCP has been using Skopeo for Podman, Buildah and CRI-O in order to provide Buildah and Skopeo together. efficiency for a number of years. OCP 4 moves a more secure environment for containers on Users can use these in root or user namespace. to using Buildah by default for building both OpenShift Container Platform and RHEL container images. CRI-O is the default container runtime. Use Podman for helping to debug pods and containers. 36 @danieloh30 OPEN SOURCE WINS OPEN SOURCE Open source wins. Questions inspire community innovations. 37 OPEN SOURCE WINS ● Why do we have to pull down a container just