■ Docker学習 #20:Mariadb連携

前回からの続き…
Docker #19:CentOS+Apache+PHP環境 (5)



以下サイトを参考にMariaDBとの連携をやってみる。
Dockerであそぶ(6)Apache-PHP-Mariadb連携 | TECH Projin

1) MariaDBコンテナ作成
docker pull mariadb:latest
docker run -it -d --rm -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=docker \
-e MYSQL_USER=docker -e MYSQL_PASSWORD=docker \
--name my-mariadb1 mariadb:latest
"docker ps -a" で確認してみる
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
1ac004331c53        mariadb:latest      "docker-entrypoint.s…"   14 seconds ago      Up 13 seconds       0.0.0.0:3306->3306/tcp   my-mariadb1
動作していると思われる

確認取れたのでコンテナ終了
docker stop my-mariadb1"

2) Dockerfile修正
これまで作成していたDockerfileにphp-mysqlをインストールするよう1行追加
FROM centos:latest
RUN dnf -y update && \
    dnf -y install httpd php
RUN dnf -y install php-mysql
EXPOSE 80
RUN ["mkdir", "-p", "/run/php-fpm"]
COPY startup.sh /startup.sh
RUN chmod 744 /startup.sh
CMD ["/startup.sh"]
※ 4行目を追加

3) コンテナイメージビルド
cd C:/Users/user/php
docker build -t my-php .
→ エラーが発生
$ docker build -t my-php .
Sending build context to Docker daemon  4.608kB
Step 1/8 : FROM centos:latest
    ---> 831691599b88
Step 2/8 : RUN dnf -y update &&     dnf -y install httpd php
    ---> Using cache
    ---> f4ef9934dcf3
Step 3/8 : RUN dnf -y install php-mysql
    ---> Running in 9e9287ce8ab0
Last metadata expiration check: 1 day, 2:00:54 ago on Tue Jul 28 19:40:19 2020.
No match for argument: php-mysql
Error: Unable to find a match: php-mysql
The command '/bin/sh -c dnf -y install php-mysql' returned a non-zero code: 1

4) 原因調査
centos8コンテナを起動しbashに接続
docker run -it centos:latest bash

php-mysqlをインストールしてみる
dnf -y install php-mysql
やはりエラーとなる

別のパッケージで php-mysqlnd といのがあるっぽい
末尾の "nd" は "native driver" のことらしい
これをインストールしてみる
dnf -y install php-mysqlnd
これは正常にインストールできた。

といことで php-mysqlnd を使うようにDockerfileを修正
CentOSのbashは exit で終了しておく

5) Dockerfile修正
FROM centos:latest
RUN dnf -y update && \
    dnf -y install httpd php
RUN dnf -y install php-mysqlnd
EXPOSE 80
RUN ["mkdir", "-p", "/run/php-fpm"]
COPY startup.sh /startup.sh
RUN chmod 744 /startup.sh
CMD ["/startup.sh"]

6) コンテナイメージビルド
docker build -t my-php .
→ 成功

7) PHPコンテナ起動
docker run -it -d -p 80:80 \
-v //c/Users/user/php/public-html/:/var/www/html/ \
--name my-php1 --link my-mariadb1 my-php
→ エラー
$ docker run -it -d -p 80:80 \
> -v //c/Users/user/php/public-html/:/var/www/html/ \
> --name my-php1 --link my-mariadb my-php
D:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: could not get container for my-mariadb: No such container: my-mariadb.
See 'D:\Program Files\Docker Toolbox\docker.exe run --help'.
→ MariaDBコンテナが起動していないとダメか?

ということでMariaDBコンテナを起動
docker run -it -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=docker \
-e MYSQL_USER=docker -e MYSQL_PASSWORD=docker \
--name my-mariadb1 mariadb:latest
再度PHPコンテナ起動
docker run -it -d -p 80:80 \
-v //c/Users/user/php/public-html/:/var/www/html/ \
--name my-php1 --link my-mariadb1 my-php

8) テストページ作成
https://tech.pjin.jp/blog/2016/01/04/dockerであそぶ(6)apache-php-mysql連携/ のdb.phpを C:\Users\user\php\public-html\db.php へ保存
エンコードは UTF-8 とした。

ブラウザで http://192.168.99.102/db.php を表示

→ エラーとなる
このページは動作していません
192.168.99.102 では現在このリクエストを処理できません。
HTTP ERROR 500

続く・・・


Docker学習

0 件のコメント:

その他の記事