Docker Composeを学ぶ
前回はDockerfileを使ってみたが
※ Docker 学習 #2:Dockerfileを学ぶ
※ Docker 学習 #3:Dockerfileを学ぶ #2
Dockerfileとは別に "Docker Compose" というのも存在する。
なんだか似たような物にも見えるが、
・Dockerfile … Dockerイメージ(Dockerコンテナのテンプレート的なもの)を作るための設計図
・Docker Compose … DockerイメージよりDockerコンテナを作成・実行するための設計図
と理解した。
過去にDockerコンテナをいくつか作っていたので、これらをDocker Composeで対応してみる。
※ 対象記事:WSL #32:Docker上にPHP環境を作る
環境
WSLバージョン
WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.8037
Ubuntuバージョン
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
Docker Compose CPIプラグインのインストール確認
Compose CLIがインストールされていることを確認する。
実行結果:
root@xxx:~/docker/php# docker compose version
Docker Compose version v5.1.2
基準フォルダの作成
WSL上に作業用フォルダを作成する。
~/docker/php フォルダを作業フォルダとして作成した。
また、HTMLを配置するフォルダをWindows側にて D:\docker\data\www\html\ のフォルダとして作成した。
YAMLファイル
ファイル名:compose.yaml
バージョン記載:必要なし
ネット上の記事を見ていると "docker-compose.yml"だったり、"compose.yml"だったり色々なファイル名のサンプルが出ているが、現在の推薦は "compose.yaml" とのこと。
またcompose.yamlの先頭に "version: x.x" の指定は非推薦となっているので書かなくてよい。
※ https://docs.docker.jp/compose/compose-file/index.html#compose-spec-compose-file
必要なファイルの抽出
php:8.3-apacheイメージに含まれているPHP.iniファイルを抽出しておく。
◆ コンテナ作成:
実行結果:
root@xxx:~/docker# docker create --name tmp php:8.3-apache
Unable to find image 'php:8.3-apache' locally
8.3-apache: Pulling from library/php
Digest: sha256:7912dada009d971264115de9e43cb2e97878ddfd09bd19418901217b8aa3c09a
Status: Downloaded newer image for php:8.3-apache
ec4fa7782cccafdd022b787c40c043444b538d9fc7ba52a35d200667995c1e05
◆ iniファイル抽出とコンテナ削除:
docker cp tmp:/usr/local/etc/php/php.ini-production ./php.ini-production
docker rm tmp
実行結果:
root@xxx:~/docker/php# docker create --name tmp php:8.3-apache
a44488f822ae886df5ae51662fa5d5c13e35aba089353aec8a35a2d7bfe9f059
root@xxx:~/docker/php# docker cp tmp:/usr/local/etc/php/php.ini-development ./php.ini-debug
Successfully copied 73.3kB (transferred 75.3kB) to /root/docker/php/php.ini-debug
root@xxx:~/docker/php# docker cp tmp:/usr/local/etc/php/php.ini-production ./php.ini-production
Successfully copied 73.4kB (transferred 75.3kB) to /root/docker/php/php.ini-production
root@xxx:~/docker/php# docker rm tmp
tmp
compose.yaml作成
イメージは php:8.3-apache とする。
HTMLファイルルートを WindowsのD:\docker\data\www\html\ へマッピング、
ポートは80番をホストの8081番にマッピングする。
__php:
____image: php:8.3-apache
____volumes:
______- /mnt/d/docker/data/www/html:/var/www/html
______- ./php.ini-debug:/usr/local/etc/php/php.ini
____ports:
______- "8081:80"
ここまでの状態で動くか実行してみる。
実行結果:
root@xxx:~/docker/php# docker compose up -d [+] up 1/1 ✔ Container php-php-1 Started 0.4s
ブラウザで localhost:8081 へ接続
またhtmlを配置していないのでエラーとなるが、動いてるっぽい。
Windowsのd:\docker\data\www\html\phpinfo.phpを作成する。
問題なし。
ついでに "display_errors" の値が "On" になっているか確認。
"On"であればphp.ini-debugが正しく読み込まれている。
production版のphp環境作成
先ほどはdebug環境のコンテナだったが、ついでにproduction版の環境も作れるようにしておく。
production-compose.yamlを作成し以下を記載
__php:
____volumes:
______- ./php.ini-production:/usr/local/etc/php/php.ini
コンテナ起動:
実行結果:
root@xxx:~/docker/php# docker compose -f compose.yaml -f production-compose.yaml up -d [+] up 1/1 ✔ Container php-php-1 Started 0.3s
ブラウザで localhost:8081/phpinfo.php を表示、display_errorsが "Off" であればphp.ini-productionが正常に読み込まれている。
いい感じ




0 件のコメント:
コメントを投稿