Docker基础知识 (9) – 使用 Docker 部署 Nginx + PHP + MariaDB(MySQL)并配置 phpMyAdmin


1. 部署 PHP

    1) 部署环境

        IP 地址(本地测试环境):192.168.0.10
        操作系统:Linux CentOS 7.9     
        Docker 版本: 20.10.7

    2) 拉取 php 镜像

        $ docker pull php:7.4-fpm    # 这里拉取 7.4 版本
        $ docker images         # 查看镜像列表

            REPOSITORY                TAG        IMAGE ID       CREATED         SIZE
            php                       7.4-fpm    caf369bb935e   10 days ago     443MB
            …

        $ docker inspect php:7.4-fpm    # 查看镜像详细信息

        注:可以访问 Dockers Hub(https://hub.docker.com/_/php?tab=tags)查询 php 镜像。

    3) 运行容器

        $ docker run –name php-7.4-fpm -p 9000:9000/
                    -v /home/docker/nginx/html:/var/www/html/
                    –privileged=true/
                    -d php:7.4-fpm

        参数说明:

            –name php-7.4-fpm:将容器命名为 php-7.4-fpm。
            -p 9000:9000:端口进行映射,将本地 9000 端口映射到容器内部的 9000 端口。
            -v:将本地文件夹 /home/docker/nginx/html 与容器文件夹 /var/www/html 挂载。在 /home/docker/nginx/html 目录下,创建 info.php 文件,内容如下:

                <?php
                    echo “Nginx/PHP7.4 – info.php”;
                ?>  

            –privileged:
            -d:设置容器在后台一直运行。
            php:7.4-fpm: 镜像:tag。

        $ docker ps  # 查看运行的容器列表info

        $ docker exec -it php-7.4-fpm /bin/bash

            root@8e08c1713b53:/var/www/html# ls
            root@8e08c1713b53:/var/www/html# php info.php
            Nginx/PHP7.4 – info.php

    4) 使用 docker-php-ext-install 安装扩展

        一般需要安装一些 PHP 扩展,包括一些比较核心的拓展 gd、mysql_pdo、redis 客户端等,本文后面会使用 MariaDB,需要安装 MySQL 相关的扩展。

        $ docker exec -it php-7.4-fpm /bin/bash

            root@8e08c1713b53:/var/www/html# find / -name docker-php-ext-install
            /usr/local/bin/docker-php-ext-install

            # 安装 MySQL 相关的扩展
            root@8e08c1713b53:/var/www/html# /usr/local/bin/docker-php-ext-install pdo_mysql mysqli

            root@8e08c1713b53:/var/www/html# exit

        $ docker restart php-7.4-fpm    # 重启容器

2. 部署 Nginx + PHP

    1) 部署环境

        IP 地址(本地测试环境):192.168.0.10
        操作系统:Linux CentOS 7.9     
        Docker 版本: 20.10.7

    2) 拉取 nginx 镜像

        $ docker pull nginx     # 相当于 docker pull nginx:latest
        $ docker images         # 查看镜像列表

            REPOSITORY                TAG        IMAGE ID       CREATED         SIZE
            nginx                     latest     2b7d6430f78d   10 days ago     142MB
            …

        注:可以访问 Dockers Hub(https://hub.docker.com/_/nginx?tab=tags)查询 Nginx 镜像。

    3) 配置 nginx + php

        在 Docker 所在主机上,创建如下目录:

            /home/docker/nginx/html
            /home/docker/nginx/conf.d

        在 /home/docker/nginx/conf.d 目录下,创建 nginx.conf 文件,内容如下:  

            server {
                listen  80 default_server;
                server_name localhost;
                root   /usr/share/nginx/html;
            
                location / {
                    index index.php index.html index.htm;
                    autoindex off;
                }
                location ~ /.php(.*)$ {
                    root   /var/www/html;
                    fastcgi_pass php-7.4-fpm:9000;
                    fastcgi_index index.php;
                    fastcgi_split_path_info ^((?U).+/.php)(/?.+)$;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    fastcgi_param PATH_INFO $fastcgi_path_info;
                    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
                    include  fastcgi_params;
                }
            }

            参数说明:

                (1) server.location.fastcgi_pass: php-7.4-fpm:9000 表示 “容器名称:端口”,也可以写成 “ip:端口”,获取 ip 的方法,运行如下命令:
                
                    $ docker inspect –format='{{.NetworkSettings.IPAddress}}’ php-7.4-fpm

                        172.17.0.4

                (2) 目录映射关系:
                
                    server.root: /usr/share/nginx/html 是 nginx 容器内的路径。静态文件 (HTML/CSS/JS/Images 等文件)对应的映射目录是 usr/share/nginx/html;

                    server.location.root: /var/www/html/ 是 php 容器内的路径。 php 文件(*.php)通过 location ~ /.php(.*)$ 解析,对应的映射目录是 /var/www/html/。

                    把 nginx 容器内的路径 /usr/share/nginx/html 和 php 容器内的路径 /var/www/html/ 都挂载到 Docker 所在主机的目录 /home/docker/nginx/html,这个目录就同时支持 php 文件和静态文件的解析。

                (3) 使用虚拟域名,如 www.test.com,只需在 Docker 所在主机的 /etc/hosts 添加 127.0.0.1    www.test.com,不必在 nginx 容器或 php 容器中添加。
 
        在 /home/docker/nginx/html 目录下,创建 test.html 文件,内容如下:

            <h3>Nginx/PHP7.4 – test.html</h3>

    4) 运行容器

        $ docker run –name nginx-php7.4 -p 8888:80/
                    -v /home/docker/nginx/html:/usr/share/nginx/html/
                    -v /home/docker/nginx/conf.d:/etc/nginx/conf.d/
                    –privileged=true/
                    –link php-7.4-fpm/
                    -d nginx

        参数说明:

            –name nginx-php7.4:将容器命名为 nginx-php7.4。
            -p 8888:80:端口进行映射,将本地 8888 端口映射到容器内部的 80 端口。
            -v:将本地文件夹与容器文件夹挂载。
            –privileged:
            -d:设置容器在后台一直运行。
            nginx: 这里表示 nginx:latest,镜像:tag。

        $ docker ps  # 查看运行的容器列表

        浏览器访问 http://192.168.0.10:8888/info.php,页面显示如下:

            Nginx/PHP7.4 – info.php

        浏览器访问 http://192.168.0.10:8888/test.html,页面显示如下:

            Nginx/PHP7.4 – test.html

3. 部署 MariaDB(MySQL)

    1) 部署环境

        IP 地址(本地测试环境):192.168.0.10
        操作系统:Linux CentOS 7.9     
        Docker 版本: 20.10.7

        注:CentOS 7.9 下不需要安装 Java 环境。

    2) 拉取 mariadb 镜像

        $ sudo docker pull mariadb:10.4
        $ sudo docker images

            REPOSITORY                TAG        IMAGE ID       CREATED         SIZE
            mariadb                   10.4       0552982c09ae   7 days ago      404MB
            java                      8          d23bdf5b1b1b   5 years ago     643MB
            …

        注:可以访问 Dockers Hub(https://hub.docker.com/_/mariadb?tab=tags)查询 MariaDB 镜像,本文使用 MariaDB 10.4。

    3) 配置 MariaDB

        在 Docker 所在的主机上,创建 MariaDB 相关目录。

            /home/docker/mysql/data
            /home/docker/mysql/conf
            /home/docker/mysql/log

            data 目录保存数据文件,conf 目录保存配置文件,log 目录保存日志文件。

        创建 MariaDB 配置文件:

            $ sudo vim /home/docker/mysql/conf/my.conf

                # The MySQL server
                default-character-set=utf8mb4

                [mysqld]
                server-id=1
                port=3306
                
                #basedir=/usr/local/mysql
                #tmpdir=/tmp
                datadir=/var/lib/mysql
                log-error=/var/log/mysqld.log
                #plugin_dir=/usr/local/mysql/lib/plugin/

                socket=/var/lib/mysql/mysql.sock
                pid_file=/var/run/mysqld/mysqld.pid

                max_connections=400
                max_connect_errors=1000
                max_allowed_packet=16M

                # Change here for bind listening
                # bind-address="127.0.0.1"
                # bind-address = ::1          # for ipv6
                bind-address=0.0.0.0

                ## UTF 8 Settings
                #init-connect=/'SET NAMES utf8/'
                character-set-server=utf8mb4
                collation-server=utf8mb4_general_ci

    4) 运行 MariaDB 容器

        $ sudo docker run –name mariadb-10.4 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456/
                    -v /home/docker/mysql/conf/my.conf:/etc/mysql/my.conf/
                    -v /home/docker/mysql/data:/var/lib/mysql/
                    -v /home/docker/mysql/log/mysqld.log:/var/log/mysqld.log/
                    -d mariadb:10.4

        参数说明:

            -p 3306:3306:映射容器服务的 3306 端口到宿主机的 3306 端口。外部可以直接通过宿主机 ip:3306 访问到 mariadb 的服务。
            MYSQL_ROOT_PASSWORD=123456:设置 mariadb 服务 root 用户的密码。

        $ sudo docker ps  # 查看运行的容器列表

            CONTAINER ID   IMAGE          COMMAND                 PORTS                     NAMES
            1a424e905075   mariadb:10.4  “docker-entrypoint.s…”   0.0.0.0:3306->3306/tcp  mariadb-10.4

            …

        $ sudo docker exec -it mariadb-10.4 /bin/bash

           root@1a424e905075:/# mysql -u root -p
            Enter password:
            Welcome to the MariaDB monitor.  Commands end with ; or /g.
            Your MariaDB connection id is 8
            Server version: 10.4.26-MariaDB-1:10.4.26+maria~ubu2004 mariadb.org binary distribution

            Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

            Type 'help;' or '/h' for help. Type '/c' to clear the current input statement.

            MariaDB [(none)]> show databases;
            +--------------------+
            | Database           |
            +--------------------+
            | information_schema |
            | mysql              |
            | performance_schema |
            +--------------------+
            3 rows in set (0.001 sec)

            MariaDB [(none)]>

4. 配置 phpMyAdmin

    1) 配置环境

        IP 地址(本地测试环境):192.168.0.10
        操作系统:Linux CentOS 7.9     
        Docker 版本: 20.10.7

        注:CentOS 7.9 下不需要安装 Java 环境。
   
    2) 下载 phpMyAdmin
    
        phpMyAdmin 官网: https://www.phpmyadmin.net/,本文使用 phpMyAdmin 4.9.3。

        $ cd /home/docker/nginx/html
        $ wget https://files.phpmyadmin.net/phpMyAdmin/4.9.3/phpMyAdmin-4.9.3-all-languages.tar.gz
        $ tar -vxzf phpMyAdmin-4.9.3-all-languages.tar.gz
        $ mv phpMyAdmin-4.9.3-all-languages phpmyadmin

    3) 配置 MariaDB 连接

        $ cd /home/docker/nginx/html/phpmyadmin
        $ cp config.sample.inc.php config.inc.php
        $ vim config.inc.php

            ...

            /**
            * First server
            */
            $i++;
            /* Authentication type */
            $cfg['Servers'][$i]['auth_type'] = 'config';
            /* Server parameters */
            $cfg['Servers'][$i]['host'] = '192.168.0.10';
            $cfg['Servers'][$i]['user'] = 'root';
            $cfg['Servers'][$i]['password'] = '123456';
            $cfg['Servers'][$i]['compress'] = false;
            $cfg['Servers'][$i]['AllowNoPassword'] = false;

            ...

        浏览器访问 http://192.168.0.10:8888/phpmyadmin,页面显示 phpMyAdmin 主页。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/php/287238.html

(0)
上一篇 2022年9月5日 15:39
下一篇 2022年9月5日 16:20

相关推荐

发表回复

登录后才能评论