--- title: Cloud Native Buildpacks Tutorial - 6.1. ┗ projectriff/builder:0.5.0 BuilderでCommandアプリのOCIイメージを作成 tags: ["Cloud Native Buildpacks Tutorial", "Cloud Native Buildpacks", "Riff", "Series"] categories: ["Dev", "Infrastructure", "CloudNativeBuildpacks", "Riff"] date: 2020-04-28T13:26:32Z updated: 2020-05-11T03:35:17Z --- `projectriff/builder:0.5.0`でCommandのアプリケーション(Bash)のOCIイメージを作成します。 BuilderとStackを予めpullしておいてください。 ``` docker pull projectriff/builder:0.5.0 docker pull cloudfoundry/run:base-cnb ``` 次のコマンドで"Hello World"アプリケーションを作成します。 cat ``` mkdir hello-riff-command cd hello-riff-command cat <<'EOF' > hello.sh #!/bin/bash xargs -I '{}' echo -n 'Hello {}!' EOF chmod +x hello.sh cat <<'EOF' > riff.toml artifact = "hello.sh" EOF ``` `pack build`コマンドでイメージを作成します。 ``` pack build making/pack-riff-command --no-pull --builder projectriff/builder:0.5.0 ``` > BuilderとStackを事前にpullしていない場合は`--no-pull`を外せば、ビルド時にBuilderとStackもpullしますが、ビルドが遅くなります。 次のようなログが出力されます。 ``` ===> DETECTING [detector] io.projectriff.command 0.1.0 ===> ANALYZING [analyzer] Warning: Image "index.docker.io/making/pack-riff-command:latest" not found ===> RESTORING ===> BUILDING [builder] [builder] Command Function Buildpack 0.1.0 [builder] Command hello.sh: Contributing to layer [builder] Writing FUNCTION_URI to launch [builder] riff Command Invoker 0.1.0: Contributing to layer [builder] Reusing cached download from buildpack [builder] Expanding to /layers/io.projectriff.command/riff-invoker-command [builder] Process types: [builder] function: command-function-invoker [builder] web: command-function-invoker ===> EXPORTING [exporter] Adding layer 'launcher' [exporter] Adding layer 'io.projectriff.command:command-function' [exporter] Adding layer 'io.projectriff.command:riff-invoker-command' [exporter] Adding 1/1 app layer(s) [exporter] Adding layer 'config' [exporter] *** Images (45aa31761e16): [exporter] index.docker.io/making/pack-riff-command:latest Successfully built image making/pack-riff-command ``` > `pack build`時に`--publish`オプションをつけると、Docker Registryでのpushを行います。事前に`docker login`が必要です。 作成したイメージを`docker run`で起動します。 ``` docker run --rm -p 8080:8080 making/pack-riff-command ``` アプリケーションにアクセスします。 ``` $ curl localhost:8080 -d World -w '\n' Hello World! ``` Docker Imageのサイズを確認します。 ``` $ docker images | grep making/pack-riff-command making/pack-riff-command latest 45aa31761e16 40 years ago 87.4MB ``` `pack inspect-image`でイメージを解析します。 ``` $ pack inspect-image making/pack-riff-command Inspecting image: making/pack-riff-command REMOTE: (not present) LOCAL: Stack: io.buildpacks.stacks.bionic Base Image: Reference: 40845d52d6fb6d285a320aeac821b61cff0e2863e0ff12e12138c4775aae1828 Top Layer: sha256:f0d87426c0a82340475d73a9108b063d3d3cfbd92ef3b4af74dcd8f904475a36 Run Images: cloudfoundry/run:base-cnb Buildpacks: ID VERSION io.projectriff.command 0.1.0 Processes: TYPE SHELL COMMAND ARGS web (default) bash command-function-invoker function bash command-function-invoker ``` おわったらDocker Imageを削除します。 ``` docker rmi making/pack-riff-command ```