ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2022-09-05 15:33:59  阅读:355  来源: 互联网

标签:phpMyAdmin php nginx html mysql home Docker MariaDB docker



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 主页。


标签:phpMyAdmin,php,nginx,html,mysql,home,Docker,MariaDB,docker
来源: https://www.cnblogs.com/tkuang/p/16658297.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有