IK.AM

@making's tech note


Cloud Native Buildpacks Tutorial - 3.5. ┗ gcr.io/paketo-buildpacks/builder:full-cf BuilderでPHPアプリのOCIイメージを作成

🗃 {Dev/Infrastructure/CloudNativeBuildpacks/Paketo}
🏷 Cloud Native Buildpacks Tutorial 🏷 Cloud Native Buildpacks 🏷 Paketo 🏷 Series 
🗓 Updated at 2020-05-11T03:34:34Z  🗓 Created at 2020-04-28T09:12:54Z   🌎 English Page

gcr.io/paketo-buildpacks/builder:full-cfでPHPのアプリケーションの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-php/htdocs
cd hello-php
cat <<'EOF' > htdocs/index.php
<?php
echo 'Hello World!';
EOF

cat <<'EOF' > buildpack.yml
---
php:
  webserver: nginx
EOF

ここではWebServerとしてNginxを使用します。その他Apache HTTPD、PHP Built-inサーバー(php -S)が利用可能です。

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

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

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

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

===> DETECTING
[detector] 3 of 5 buildpacks participating
[detector] paketo-buildpacks/nginx    0.0.110
[detector] paketo-buildpacks/php-dist 0.0.135
[detector] paketo-buildpacks/php-web  0.0.93
===> ANALYZING
[analyzer] Previous image with name "index.docker.io/making/pack-php:latest" not found
===> RESTORING
===> BUILDING
[builder] 
[builder] Nginx Server Buildpack 0.0.110
[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
[builder] 
[builder] PHP Buildpack 0.0.135
[builder]   PHP 7.2.29: Contributing to layer
[builder]     Downloading from https://buildpacks.cloudfoundry.org/dependencies/php/php7-7.2.29-linux-x64-cflinuxfs3-8e1a95c6.tgz
[builder]     Verifying checksum
[builder]        Expanding to /layers/paketo-buildpacks_php-dist/php
[builder]     Writing PATH to shared
[builder]     Writing MIBDIRS to shared
[builder]     Writing PHP_HOME to shared
[builder]     Writing PHP_EXTENSION_DIR to shared
[builder]     Writing PHP_API to shared
[builder] 
[builder] PHP Web Buildpack 0.0.93
[builder]   PHP Web 6d4a0ac65188b199a420a496562ed1df77b34275bfa7214e109078260b93d589: Contributing to layer
[builder]   Configuring PHP Application
[builder]     Using feature -- PHP
[builder]     Writing PHPRC to shared
[builder]     Writing PHP_INI_SCAN_DIR to shared
[builder]     Using feature -- Nginx
[builder]     Using feature -- PhpFpm
[builder]     Using feature -- ProcMgr
[builder]   Process types:
[builder]     web: procmgr /layers/paketo-buildpacks_php-web/php-web/procs.yml
===> EXPORTING
[exporter] Adding layer 'launcher'
[exporter] Adding layer 'paketo-buildpacks/nginx:nginx'
[exporter] Adding layer 'paketo-buildpacks/php-dist:php'
[exporter] Adding layer 'paketo-buildpacks/php-web:php-web'
[exporter] Adding 1/1 app layer(s)
[exporter] Adding layer 'config'
[exporter] *** Images (799975538f0f):
[exporter]       index.docker.io/making/pack-php:latest
[exporter] Adding cache layer 'paketo-buildpacks/nginx:9efdb55180b30ee47b9fb9d91d8c80ce4150ae551785954730cd7831c82142ea'
[exporter] Adding cache layer 'paketo-buildpacks/php-dist:8e1a95c6308179dae299af027e2cddcb94bac835910fad451641be8590be3038'
[exporter] Adding cache layer 'paketo-buildpacks/php-dist:php'
Successfully built image making/pack-php

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

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

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

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

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

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

$ docker images | grep making/pack-php
making/pack-php                      latest              799975538f0f        40 years ago        1.3GB

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

$ pack inspect-image making/pack-php
Inspecting image: making/pack-php

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
  paketo-buildpacks/php-dist        0.0.135
  paketo-buildpacks/php-web         0.0.93

Processes:
  TYPE                 SHELL        COMMAND                                                            ARGS
  web (default)        bash         procmgr /layers/paketo-buildpacks_php-web/php-web/procs.yml 

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

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

docker rmi making/pack-php

✒️️ Edit  ⏰ History  🗑 Delete