--- title: Cloud Native Buildpacks Tutorial - 3.5. ┗ gcr.io/paketo-buildpacks/builder:full-cf BuilderでPHPアプリのOCIイメージを作成 tags: ["Cloud Native Buildpacks Tutorial", "Cloud Native Buildpacks", "Paketo", "Series"] categories: ["Dev", "Infrastructure", "CloudNativeBuildpacks", "Paketo"] date: 2020-04-28T09:12:54Z updated: 2020-05-11T03:34:34Z --- `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 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 ```