環境
以下の環境を仮想マシン(VM)上に作成した.
Docker Desktop for Windowsでも同様の手順で行える.
- Ubuntu 18.04
- Docker 19.03
Docker Hubのアカウント取得と docker login
を済ませた前提とする.
手順
1. Dockerfileの作成
今回はベースのDockerイメージとしてAlpine Linuxを使う.
#
からはじまる行はコメントなので実際には必要ない.
# alpineを使ったphpのDockerイメージを使用
FROM php:7-alpine3.12
# 外部に開放するポート
EXPOSE 8000
# パケージマネージャapkでパッケージリポジトリ一覧を更新
RUN apk update --no-cache && apk upgrade --no-cache
# composerのインストール
WORKDIR /tmp
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 開発に必要なパッケージのインストール
RUN apk add --no-cache bash vim jq
# PHPで必要な拡張があればインストール
# パッケージ一覧: https://gist.github.com/chronon/95911d21928cff786e306c23e7d1d3f3
RUN apk add --no-cache oniguruma-dev && \
docker-php-ext-install -j$(nproc) mbstring pdo_mysql
# 作業用ディレクトリ
WORKDIR /work
CMD ["tail", "-f", "/dev/null"]
2. Dockerイメージをビルド
sudo docker build -t my-php:v0.1 .
3. Docker HubにPush
<username>
は自分のDocker Hubのユーザ名に変更する.
sudo docker tag my-php:v0.1 <username>/my-php:v0.1
sudo docker push <username>/my-php:v0.1
4. 使い方
ポート開放を行う場合は -p
をつける.$PWD:/work
はカレントディレクトリをコンテナ内の /work
にマッピングする.
sudo docker run -it --rm -v $PWD:/work -p 3000:8000 my-php:v0.1 /bin/bash
【初回のみ】composerのセットアップ
初回のみ 以下のコマンドでcomposerのセットアップを行う.composer.jsonが存在する場合はこの手順は必要ない.
bash-5.0# composer init
Package name (<vendor>/<name>) [root/work]: tomoyk/php-docker-example
Author [, n to skip]: Tomoyuki KOYAMA <koyama@example.com>
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{
"name": "tomoyk/php-docker-example",
"authors": [
{
"name": "Tomoyuki KOYAMA",
"email": "koyama@example.com"
}
],
"require": {}
}
Do you confirm generation [yes]? yes
Would you like the vendor directory added to your .gitignore [yes]? yes
【2回目以降】
2回目以降は composer.json が存在するので以下のコマンドでパッケージをまとめてインストールする.
bash-5.0# composer install
パッケージのインストール(追加)
新たにパッケージを追加したい場合は以下のコマンドを使う.
今回は overtrue/phplint をインストールしている.
bash-5.0# composer require overtrue/phplint
インストールがうまくいくと composer.json の require
に overtrue/phplint が追加される.
また,vendorディレクトリが作成される.
bash-5.0# ls
Dockerfile README.md composer.json composer.lock vendor
試しにインストールした phplint を実行してみる.
bash-5.0# ./vendor/bin/phplint
phplint 2.0.2 by overtrue and contributors.
No config file loaded.
....................................................... 56 / 339 (16%)
........................................................ 112 / 339 (33%)
........................................................ 168 / 339 (49%)
........................................................ 224 / 339 (66%)
........................................................ 280 / 339 (82%)
........................................................ 336 / 339 (99%)
....
Time: < 1 sec Memory: 4.0 MiB Cache: No
OK! (Files: 339, Success: 339)
パッケージによっては拡張を必要とする場合がある.
その場合はDockerfileの docker-php-ext-install
でパッケージを追加して再ビルドする.
PHPファイルの作成/編集
ここでは vim を使う.ホストマシン側からVSCodeをはじめとするエディタや統合開発環境を使ってもよい.
bash-5.0# ls
Dockerfile README.md composer.json composer.lock vendor
bash-5.0# vim index.php
### PHPを記述
bash-5.0# cat index.php
<?php
phpinfo();
開発サーバの起動
以下のコマンドで開発サーバを起動する.
bash-5.0# php -S 0.0.0.0:8000
[Mon Dec 14 02:45:24 2020] PHP 7.4.13 Development Server (http://0.0.0.0:8000) started
[Mon Dec 14 03:03:26 2020] 172.17.0.1:57906 Accepted
[Mon Dec 14 03:03:26 2020] 172.17.0.1:57906 [200]: GET /
[Mon Dec 14 03:03:26 2020] 172.17.0.1:57906 Closing
[Mon Dec 14 03:03:27 2020] 172.17.0.1:57918 Accepted
[Mon Dec 14 03:03:27 2020] 172.17.0.1:57918 [404]: GET /favicon.ico - No such file or directory
[Mon Dec 14 03:03:27 2020] 172.17.0.1:57918 Closing
[Mon Dec 14 03:03:39 2020] 172.17.0.1:58018 Accepted
[Mon Dec 14 03:03:39 2020] 172.17.0.1:58018 [200]: GET /
[Mon Dec 14 03:03:39 2020] 172.17.0.1:58018 Closing
[Mon Dec 14 03:03:40 2020] 172.17.0.1:58030 Accepted
[Mon Dec 14 03:03:40 2020] 172.17.0.1:58030 [404]: GET /favicon.ico - No such file or directory
[Mon Dec 14 03:03:40 2020] 172.17.0.1:58030 Closing
コンテナの外部からアクセスする場合は docker run -p 3000:8000
のようにdockerコマンドの -p
オプションをつけておく.
今回は -p 3000:8000
を付与したのでWebブラウザから http://:3000/ にアクセスする.index.phpに記述した phpinfo();
が実行されていることが確認できる.
Composerの使い方は以下の記事が参考になる.