---
# System prepended metadata

title: 也來玩玩 skaffold 好了

---

# 也來玩玩 skaffold 好了

## 事前準備工作

1. 安裝 kubectl
2. 安裝 kind
3. 安裝 skaffold
4. clone skaffold 專案

```
git clone https://github.com/GoogleContainerTools/skaffold
```

## 快速開箱

* 使用 skaffold 的 examples 範例
* 看起來好方便捏！我們也來試試 Java 唄！

## 實驗的專案

來源：

* https://start.spring.io/
* https://code.quarkus.io/


觀察一下問題

* maven/gradle 下載地獄
* openjdk image 低消 600 MB

# maven/gradle 下載地獄

## build cache

https://docs.docker.com/develop/develop-images/build_enhancements/

> Docker Build enhancements for 18.09 release introduces a much-needed overhaul of the build architecture. By integrating BuildKit, users should see an improvement on performance, storage management, feature functionality, and security.

```
$ DOCKER_BUILDKIT=1 docker build .
```
```json
{
  "debug" : true,
  "experimental" : true,
  "features": {"buildkit": true}
}
```

如果沒有效果，試著在 Dockerfile 第 1 行加上：

```
# syntax=docker/dockerfile:experimental
```

## 使用 custom build

如果不想開 BuildKit 的話，修改 building 的流程

https://skaffold.dev/docs/tutorials/custom-builder/

修改打包 image 流程，先在 host 編譯好，Dockerfile 只做 `COPY` 的動作。

PS. 這不適用編譯工具在 image 內的情境，例如 GraalVM。

# OpenJDK Runtime


## 常見的解法

1. jlink
2. native-image (GraalVM)
3. 面對它、接受它、處理它、放下它 (投䧏!?)

## 反思 containerization

1. 為了 docker 的容器化
2. 為了 kubernetes 的容器化


