Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

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

 Share


Recommended Posts


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


Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...