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 # 重启容器
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
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)]>
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 主页。