はじめに
初めまして!
エンジニアになって数年、今まで本を読むだけでしたが、もっとプライベートで楽しみながら成長したい!自分が学んだ足跡を残していきたい!と思い記事をかきました!
最終的には自在に開発できるようになりたいと思っています。
いろいろな記事を参考にさせてもらっています。
その中でもこれってどういう意味?とかつまづいたところを念入りに書いていこうかと思います。
今回の目的
Dockerのイメージを選ぶときに、「これどう意味なの?何を基準に判断すればいいの?」となりました。使う範囲でいいから一通りの内容やルールを理解してから使いたいですよね。
対象範囲はPHPとPostgreSQLのDocker Official Imageに絞りました。長くなりそうなので記事はいくつかに分けて公開していきます!
今回は下記の内容で進めていきます!
- DockerHubで検索
- 検索文言:php
- 指定フィルター:Images、Docker Official Image、Linux
早速進めていくために検索をすると、関連したイメージがたくさん出てきました。
PHPに焦点を絞ってもいいんですが、どんな関連性があって結果として表示されたのか気になりませんか?僕は気になってしまったのでここから始めていきます!
使用したものや事前準備
・Macbook Pro
・Docker Hub
・Visual Studio Code
・PHP
・PostgreSQL
主に参考にさせていただいた記事
Docker Hubの検索結果に出たDocker Official Imageを、ChatGPTに解説してもらい検証しました。
PHPが関連するDocker Official Images
※注意:PHPで作成されたツールも紹介しているため、その場合は他の開発言語でも活用できます。
⚫︎adminer
MySQL、PostgreSQL、SQLite、MongoDBなど複数のデータベースシステムをサポートするWebベースのデータベース管理ツール
DBをGUIで操作できるツールですね。Dockerで立ち上げたDBを操作できれば快適に開発できそうです。ちょっと古そう?ですが軽量なのもメリットです。
【検証内容】
・compose.ymlを下記のように編集します。
version: '3.1'
services:
adminer:
image: adminer
restart: always
ports:
- 8080:8080
platform: linux/amd64 # ARMベースのマシンで必要な場合
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: example # ここでパスワードを設定
volumes:
- db_data:/var/lib/mysql
platform: linux/amd64 # ARMベースのマシンで必要な場合
volumes:
db_data:
・コンテナを立ち上げましょう。
docker compose up
・下記URLにアクセスします。
http://localhost:8080
・下記の情報でログインしてください。
データベース種類:MySQL
サーバ:db
ユーザ名:root
パスワード:example
データベース:
・ログインできたら、色々探索してみましょう。
⚫︎composer
PHPで書かれたアプリケーションやライブラリの依存関係を管理するために広く使用されているツール
例えばcomposerが必要なLaravelプロジェクトを作成したい時に、配置したいフォルダで下記のコマンドを実行しても作成できます。これは便利です。
docker run -v ./:/app composer:latest create-project --prefer-dist laravel/laravel .
本当にそれで運用できるのかというのもあるのでさらに検証も必要そうですが、常に最新のcomposerにアップデートしてくれるコンテナを立ち上げられたらよさそうですね。
(なかなか独特なアイコンだな〜)
【検証内容】
・compose.ymlを下記のように編集します。
version: '3.8'
services:
php:
image: php:8.0-apache
volumes:
- ./api:/var/www/html
ports:
- "8080:80"
composer:
image: composer:latest
volumes:
- ./api:/app
command: 'composer update'
・apiフォルダを作成しましょう。
・コマンドを実行しLaravelプロジェクトを作成します。
docker compose run composer create-project --prefer-dist laravel/laravel .
・プロジェクトが作成されたら、apiフォルダ直下にtest.phpを作成してください。(コードは適当です)
<?php
try {
$dbh = new PDO('mysql:host=db;dbname=testdb','testuser','testpass');
echo "OK";
$dbh = null;
}catch(PDOException $e){
echo "NGsss";
exit;
}
?>
・コンテナを立ち上げましょう。
docker compose up
・下記URLにアクセスし、"NGsss"とか表示されればOKです。
http://localhost:8080/test.php
⚫︎phpmyadmin
MySQLとMariaDBに対応しているデータベース管理ツール
こちらもDBをGUIで操作できるツールですね。画面はリッチですね。
ただ調べていくとリッチであるが故に重いとか、対応しているデータベースがadminerより狭いという評価がありました。
【検証内容】
・compose.ymlを下記のように編集します。
version: '3.1'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- my-db:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db
PMA_USER: user
PMA_PASSWORD: password
UPLOAD_LIMIT: 50M
ports:
- "8080:80"
depends_on:
- db
volumes:
my-db:
・コンテナを立ち上げましょう。
docker compose up
・下記URLにアクセスします。
http://localhost:8080
・色々探索してみましょう。
⚫︎MediaWiki
フリーかつオープンソースのウィキソフトウェア
Wikiですね(そのまんま)。
コンテナで立ち上げて、名前付きボリュームで永続化すればプロジェクトごとのWikiとか広く共有できそうで夢がありそうです。
情報も綺麗に整理できそうなので一回は試してみたいですね。
コンテナを立ち上げてアカウント作成までが終わった後の画面です。
実際に作成されている方がいるので紹介です。こちらを参考に進めていきます。
【検証内容】
・compose.ymlを下記のように編集します。
version: '3'
services:
mediawiki:
image: mediawiki
ports:
- "80:80"
volumes:
- ./mediawiki/images:/var/www/html/images
# 以下の行を編集して、LocalSettings.phpをホストマシンからコンテナにマウントします。
#- ./mediawiki/LocalSettings.php:/var/www/html/LocalSettings.php
database:
image: mysql:5.7
environment:
MYSQL_DATABASE: my_wiki
MYSQL_USER: wikiuser
MYSQL_PASSWORD: example
MYSQL_RANDOM_ROOT_PASSWORD: mysqluser000
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
・./mediawiki/imagesのフォルダを作成します
・コンテナを立ち上げましょう。
docker compose up
・下記URLにアクセスします。
http://localhost:80
・セットアップをしていきます。
※途中でデータベースのホストを指定しますが、コンテナ名(database)のため注意しましょう。
・最低限の設定をしたらLocalSettings.phpをダウンロードします。
・ダウンロードが完了したら、compose downしましょう。
docker compose down
・LocalSettings.phpを「./mediawiki」に配置します。
・compose.ymlに記載されている下記のコメントアウトを外して、マウントされるようにします。
#- ./mediawiki/LocalSettings.php:/var/www/html/LocalSettings.php
・再度立ち上げてログインします。
・指示通りキーを入力してセットアップ完了です。
・念のため、アカウント作成後にコンテナを再起動してもデータが保存されているところまで確認しましょう。
・後は色々探索しましょう。
⚫︎yourls
独自のURL短縮サービスを作成するためのオープンソースのPHPベースのアプリケーション
Qiitaはもちろん、X(Twitter)やGitHubのURLが[ドメイン/ユーザー名]でアクセスできる理由がわかりました。裏側でURL短縮サービスがパラメータを付与してアクセスしているんですね。
こちらはまだ使用イメージがつかないので検証は機会があればやることにします。
実際に作成されている方がいるので紹介です。
⚫︎php-zendserver
Zend Serverは、Zend Technologiesによって開発された、PHPアプリケーションの展開、管理、運用を最適化するためのエンタープライズクラスのウェブアプリケーションサーバー
Zend ServerにPHP実行環境をつけたものになりますが内容が難しかったです。障害検知とかもやってくれるそうですが、今はクラウドとかがやっているから要らないような気もします。大規模アプリケーション向けのようです。
こちらも機会があれば検証します。
以下の記事を参考にさせていただきました。
最後に
PHPが関連するDocker Official Imageについてまとめました!
途中からPHP専用じゃなくてPHPで作られているものも検索結果に出ているんだって気づきましたが、そりゃそっかって感じでした。
今後は、いろんなイメージを組み合わせてこんな構成にしようとか妄想をどんどん膨らませていこうと思います!