既存の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で設定するので次回に設定方法などを書きます。