---
title: Cloud Native Buildpacks Tutorial - 3.6. ┗ gcr.io/paketo-buildpacks/builder:full-cf BuilderでStaticfileアプリ(Nginx)のOCIイメージを作成
tags: ["Cloud Native Buildpacks Tutorial", "Cloud Native Buildpacks", "Paketo", "Series"]
categories: ["Dev", "Infrastructure", "CloudNativeBuildpacks", "Paketo"]
date: 2020-04-28T09:27:24Z
updated: 2020-05-11T03:34:39Z
---

`gcr.io/paketo-buildpacks/builder:full-cf`でStaticfile(Nginx)のアプリケーションのOCIイメージを作成します。

BuilderとStackを予めpullしておいてください。

```
docker pull gcr.io/paketo-buildpacks/builder:full-cf
docker pull gcr.io/paketo-buildpacks/run:full-cnb-cf
```

次のコマンドで"Hello World"アプリケーションを作成します。

```
mkdir -p hello-nginx/public
cd hello-nginx
echo 'Hello World!' > public/index.html

cat <<'EOF' > 
worker_processes 1;
daemon off;

error_log stderr;
events { worker_connections 1024; }

http {
  charset utf-8;
  log_format cloudfoundry 'NginxLog "$request" $status $body_bytes_sent';
  access_log /dev/stdout cloudfoundry;
  default_type application/octet-stream;
  sendfile on;

  tcp_nopush on;
  keepalive_timeout 30;
  port_in_redirect off; # Ensure that redirects don't include the internal container PORT - 8080

  server {
    listen {{port}};
    root public;
    index index.html index.htm Default.htm;
  }
}
EOF
```

ここではWebServerとしてNginxを使用します。Apache HTTPDも利用可能です。

`pack build`コマンドでイメージを作成します。

```
pack build making/pack-nginx --no-pull --builder gcr.io/paketo-buildpacks/builder:full-cf
```

> BuilderとStackを事前にpullしていない場合は`--no-pull`を外せば、ビルド時にBuilderとStackもpullしますが、ビルドが遅くなります。

次のようなログが出力されます。

```
===> DETECTING
[detector] paketo-buildpacks/nginx 0.0.110
===> ANALYZING
[analyzer] Previous image with name "index.docker.io/making/pack-nginx:latest" not found
===> RESTORING
===> BUILDING
[builder] 
[builder] Nginx Server Buildpack 0.0.110
[builder]   Process types:
[builder]     web: nginx -p $PWD -c "/workspace/nginx.conf"
[builder]   Nginx Server 1.17.9: Contributing to layer
[builder]     Downloading from https://buildpacks.cloudfoundry.org/dependencies/nginx/nginx-1.17.9-linux-x64-cflinuxfs3-9efdb551.tgz
[builder]     Verifying checksum
[builder]     Expanding to /layers/paketo-buildpacks_nginx/nginx
[builder]     Writing PATH to shared
[builder]     Writing .profile.d/configure
===> EXPORTING
[exporter] Adding layer 'launcher'
[exporter] Adding layer 'paketo-buildpacks/nginx:nginx'
[exporter] Adding 1/1 app layer(s)
[exporter] Adding layer 'config'
[exporter] *** Images (19d60fa98c76):
[exporter]       index.docker.io/making/pack-nginx:latest
[exporter] Adding cache layer 'paketo-buildpacks/nginx:9efdb55180b30ee47b9fb9d91d8c80ce4150ae551785954730cd7831c82142ea'
Successfully built image making/pack-nginx
```

> `pack build`時に`--publish`オプションをつけると、Docker Registryでのpushを行います。事前に`docker login`が必要です。

作成したイメージを`docker run`で起動します。

```
docker run --rm -e PORT=8080 -p 8080:8080 making/pack-nginx
```

アプリケーションにアクセスします。

```
$ curl localhost:8080 -w '\n'
Hello World!
```

Docker Imageのサイズを確認します。

```
$ docker images | grep making/pack-nginx
making/pack-nginx                    latest              19d60fa98c76        40 years ago        1.07GB
```

`pack inspect-image`でイメージを解析します。

```
$ pack inspect-image making/pack-nginx
Inspecting image: making/pack-nginx

REMOTE:
(not present)

LOCAL:

Stack: org.cloudfoundry.stacks.cflinuxfs3

Base Image:
  Reference: 30c2fe64f46f987d570fddf1a9400c0e0f58eebe790f95557b9387e5dcfb08a2
  Top Layer: sha256:70227f7df5ee235dae16d7b6ce4a23b03bb57cadd64a00740d590fb11bbae042

Run Images:
  gcr.io/paketo-buildpacks/run:full-cnb-cf

Buildpacks:
  ID                             VERSION
  paketo-buildpacks/nginx        0.0.110

Processes:
  TYPE                 SHELL        COMMAND                                         ARGS
  web (default)        bash         nginx -p $PWD -c "/workspace/nginx.conf"
```

Nginx Buildpackの細かい設定は
https://github.com/paketo-buildpacks/nginx
を確認してください。

おわったらDocker Imageを削除します。

```
docker rmi making/pack-nginx
```
