Docker PHP コンテナ管理

DockerでPHPのコンテナを作成

2019年6月4日

PHP Docker

既存のPHPコンテナを利用しないで一から作成します。

Dockerのインストールの仕方はこちら

やる事

  • OSはAlpineを利用したコンテナイメージの作成
  • PHP-FPMをインストールする
  • PHPをインストールする

イメージ確認

まずはAlpineのイメージがあるか確認します。

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
・・・ 省略
alpine                                     latest              055936d39205        2 weeks ago         5.53MB
・・・ 省略

Alpineのイメージがない場合

無い場合は、下記をコマンドを実行し取得します。

$ docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
e7c96db7181b: Pull complete 
Digest: sha256:769fddc7cc2f0a1c35abb2f91432e8beecf83916c421420e6a6da9f8975464b6
Status: Downloaded newer image for alpine:latest

PHPのコンテナの作成

ここからはDockerfileを作る為に、PHPとPHP-FPMをインストールします。

Dockerfileにインストール方法を記入しないといけないので、インストールの内容はメモしておきます。

まずは、コンテナをバックグランドで起動をします。

$ docker run -itd --name コンテナ名 コンテナイメージ:タグ名

オプションの-itdについては他のサイトを参考にしてください。

$ docker run -itd --name my-php alpine:latest

とりあえず起動しているか確認してみます。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
aa0249758cc7        alpine:latest       "/bin/sh"           4 minutes ago       Up 4 minutes                            my-php

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
aa0249758cc7        alpine:latest       "/bin/sh"           5 minutes ago       Up 5 minutes                            my-php

プロセスが起動しているのを確認できたので、ではコンテナの中に入ってみます。

$ docker exec -it my-php /bin/sh

PHPとPHP-FPMをインストール

yumやapt-getの様なコマンドは無いです。

apkと言うパッケージマネージャがあるのでそれでインストールを行います。

検索search
インストールadd
アンインストールdel
アップデートupdate
ごみファイルを削除--no-cache
$ apk add --update --no-cache php7 php7-fpm \
          php7-pdo_mysql php7-openssl php7-curl \
          php7-json php7-mbstring php7-opcache \
          php7-pdo_odbc php7-pdo_mysql php7-gd \
          php7-pecl-apcu php7-mysqli php7-fpm

実行してみてエラーとか無かったのでイメージを作成します。尚、インストール項目は必要そうなものを入れています。

Dockerfile作成

下記がDockerfileの内容になります。

FROM alpine:latest

RUN apk add --update --no-cache php7 php7-fpm php7-pdo_mysql \
            php7-openssl php7-curl php7-json php7-mbstring \
            php7-opcache php7-pdo_odbc php7-pdo_mysql php7-gd \
            php7-pecl-apcu php7-mysqli php7-fpm

EXPOSE 9000
ENTRYPOINT /usr/sbin/php-fpm7 --nodaemonize

ENTRYPOINTのphp-fpm7でnodaemonizeを引数にすることでphp-fpmのサービス起動する為に設定します。

あと9000をしているのはphp-fpmのポート番号になります。

$ docker build -t my-php:latest .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM alpine:latest
 ---> 055936d39205
Step 2/4 : RUN apk add --update --no-cache php7 php7-fpm php7-pdo_mysql php7-openssl php7-curl php7-json php7-mbstring     php7-opcache php7-pdo_odbc php7-pdo_mysql php7-gd php7-pecl-apcu php7-mysqli php7-fpm
 ---> Running in 06f625385271
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/43) Installing php7-common (7.2.18-r0)
(2/43) Installing ncurses-terminfo-base (6.1_p20190105-r0)
(3/43) Installing ncurses-terminfo (6.1_p20190105-r0)
(4/43) Installing ncurses-libs (6.1_p20190105-r0)
(5/43) Installing libedit (20181209.3.1-r0)
(6/43) Installing pcre (8.42-r1)
(7/43) Installing libxml2 (2.9.9-r1)
(8/43) Installing php7 (7.2.18-r0)
(9/43) Installing ca-certificates (20190108-r0)
(10/43) Installing nghttp2-libs (1.35.1-r0)
(11/43) Installing libssh2 (1.8.2-r0)
(12/43) Installing libcurl (7.64.0-r1)
(13/43) Installing php7-curl (7.2.18-r0)
(14/43) Installing php7-fpm (7.2.18-r0)
(15/43) Installing libxau (1.0.8-r3)
(16/43) Installing libbsd (0.8.6-r2)
(17/43) Installing libxdmcp (1.1.2-r5)
(18/43) Installing libxcb (1.13-r2)
(19/43) Installing libx11 (1.6.7-r0)
(20/43) Installing libxext (1.3.3-r3)
(21/43) Installing libice (1.0.9-r3)
(22/43) Installing libuuid (2.33-r0)
(23/43) Installing libsm (1.2.2-r2)
(24/43) Installing libxt (1.1.5-r2)
(25/43) Installing libxpm (3.5.12-r0)
(26/43) Installing libbz2 (1.0.6-r6)
(27/43) Installing libpng (1.6.37-r0)
(28/43) Installing freetype (2.9.1-r2)
(29/43) Installing libjpeg-turbo (1.5.3-r4)
(30/43) Installing libwebp (1.0.1-r0)
(31/43) Installing php7-gd (7.2.18-r0)
(32/43) Installing php7-json (7.2.18-r0)
(33/43) Installing php7-mbstring (7.2.18-r0)
(34/43) Installing php7-openssl (7.2.18-r0)
(35/43) Installing php7-mysqlnd (7.2.18-r0)
(36/43) Installing php7-mysqli (7.2.18-r0)
(37/43) Installing php7-opcache (7.2.18-r0)
(38/43) Installing php7-pdo (7.2.18-r0)
(39/43) Installing php7-pdo_mysql (7.2.18-r0)
(40/43) Installing readline (7.0.003-r1)
(41/43) Installing unixodbc (2.3.7-r0)
(42/43) Installing php7-pdo_odbc (7.2.18-r0)
(43/43) Installing php7-pecl-apcu (5.1.16-r0)
Executing busybox-1.29.3-r10.trigger
Executing ca-certificates-20190108-r0.trigger
OK: 38 MiB in 57 packages
Removing intermediate container 06f625385271
 ---> 7b26ab4b4f04
Step 3/4 : EXPOSE 9000
 ---> Running in c3542a50f2cb
Removing intermediate container c3542a50f2cb
 ---> 14f1ea0eb49a
Step 4/4 : ENTRYPOINT /usr/sbin/php-fpm7 --nodaemonize
 ---> Running in 47ccefc68bb0
Removing intermediate container 47ccefc68bb0
 ---> 1e2f342263e7
Successfully built 1e2f342263e7
Successfully tagged my-php:latest

とりあえず作成するのに成功したみたいなので、docker imagesでイメージが作成出来ているか確認してみます。

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
my-php                                     latest              1e2f342263e7        2 minutes ago       31.8MB
・・・ 省略

my-php:latestのイメージが作成できているのが確認できました。

まとめ

DockerでPHPとPHP-FPMのコンテナの作成を行いましたが、kubernetesで利用する為に色々省きました。

設定とかはkubernetesのConfigMapで設定するので次回に設定方法などを書きます。

-Docker, PHP, コンテナ管理
-, ,