1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LinuxClubAdvent Calendar 2020

Day 14

Dockerで作る軽量なPHP 7.4の開発環境

Last updated at Posted at 2020-12-14

環境

以下の環境を仮想マシン(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(); が実行されていることが確認できる.

image.png

Composerの使い方は以下の記事が参考になる.

Composerの使い方 - Qiita

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?