抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

环境

在CentOS下使用Docker搭建php/nginx/mariadb/phpmyadmin环境

Docker部署的好处

1、标准化应用发布,docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
2、节约时间,快速部署和启动,VM启动一般是分钟级,docker容器启动是秒级;
3、方便构建基于SOA架构或微服务架构的系统,通过服务编排,更好的松耦合;
4、节约成本,以前一个虚拟机至少需要几个G的磁盘空间,docker容器可以减少到MB级;
5、方便持续集成,通过与代码进行关联使持续集成非常方便;
6、可以作为集群系统的轻量主机或节点。

镜像获取

在线获取

php-nginx 镜像

这里使用的PHP/Nginx镜像是非官方的,如需使用官方镜像请前往DockerHub搜索下载

php和nginx的融合版本
php: 7.4.24
nginx: 1.20.1
执行以下命令拉取镜像到本地

1
docker pull webhippie/php-nginx:7

mariadb 数据库镜像

执行以下命令拉取镜像到本地

1
docker pull mariadb

phpmyadmin 镜像

执行以下命令拉取镜像到本地

1
docker pull phpmyadmin

离线获取

导出镜像

可通过以下命令将本地现成镜像导出为tar包

1
2
3
docker save -o php-nginx.tar webhippie/php-nginx:7
docker save -o phpmyadmin.tar phpmyadmin:latest
docker save -o mariadb.tar mariadb:latest

下载镜像

也可直接下载本站提供的已导出的镜像tar包

云盘下载 提取码: rd74

导入离线镜像

导入离线镜像tar包

1
2
3
4
5
6
# 导入php-nginx镜像
docker load -i php-nginx.tar
# 导入phpmyadmin镜像
docker load -i phpmyadmin.tar
# 导入mariadb镜像
docker load -i mariadb.tar

创建容器并运行

创建挂载目录

创建主机挂载目录,将容器内数据挂载到宿主机,防止误删容器导致数据丢失

创建nginx挂载目录,挂载项目文件、配置文件、日志

1
mkdir -p /data/nginx/{conf,html,logs}

创建mariadb挂载目录,挂载数据库文件

1
mkdir -p /data/mariadb/data

启动mariadb数据库容器

1
2
3
4
5
6
7
8
docker run \
--name mariadb \
--restart=always \
--privileged=true \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-v /data/mariadb/data:/var/lib/mysql \
-d mariadb

使用启动容器
--name:容器名称,可根据需求修改
--restart=always:设置容器自动启动
--privileged=true:特权级运行容器
-p:将容器3306(右侧)端口映射到主机3306(左侧)端口,可根据需求修改。
-e:使用环境变量MYSQL_ROOT_PASSWORD设置数据库密码为root,密码请做修改
-v:将容器/var/lib/mysql目录挂载到主机/data/mariadb/data目录
-d:后台运行容器,并返回容器ID
mariadb:使用的镜像名称以及版本

数据库访问地址:http://localhost:3306

启动phpmyadmin容器

1
2
3
4
5
6
7
8
docker run \
--name myadmin \
--restart=always \
-p 8080:80 \
-e UPLOAD_LIMIT=1G \
-e MEMORY_LIMIT=1G \
--link mariadb:db \
-d phpmyadmin

--name:容器名称,可根据需求修改
--restart=always:设置容器自动启动
-p:将容器80(右侧)端口映射到主机8080(左侧)端口,可根据需求修改
-e:使用环境变量UPLOAD_LIMIT设置sql文件上传大小限制,使用环境变量MEMORY_LIMIT设置占用的最大内存
-link:将名为mariadb的容器链接到容器内,db为源容器在link下的别名,db为制式不可修改
-d:后台运行容器,并返回容器ID
phpmyadmin:使用的镜像名称以及版本

phpmyadmin访问地址:http://localhost:8080

启动php-nginx容器

将项目文件上传至/data/nginx/html目录,并确保/data/nginx/html/public真实存在,因为该public目录会在下面的代码中被挂载至容器内部,并被设置为nginx的根目录运行

1
2
3
4
5
6
7
8
9
10
11
docker run \
--name nginx-php \
--restart=always \
--privileged=true \
-p 80:8080 \
-e NGINX_WEBROOT=/srv/www/html/public \
-v /data/nginx/conf:/etc/nginx/custom.d \
-v /data/nginx/html:/srv/www/html \
-v /data/nginx/logs:/var/log/nginx \
--link mariadb:mariadb \
-d php-nginx

--name:容器名称,可根据需求修改
--restart=always:设置容器自动启动
--privileged=true:特权级运行容器
-p:将容器8080(右侧)端口映射到主机80(左侧)端口,可根据需求修改,容器内端口无法修改,若有特殊需求请使用官方镜像另行部署。比如使用host网络时,可在宿主机编译安装nginx做80端口转发
-e:使用环境变量NGINX_WEBROOT设置nginx的根目录,这里设置的public目录为个人使用的项目框架访问目录,比如ThinkPHP也需要相应的设置
-v:分别将容器内的custom.d、html、nginx目录挂载到主机目录
--link:将名为mariadb(左侧)的容器链接到容器内,mariadb为源容器在link下的别名,这样连接数据库时host可以直接填写为mariadb,无需填写IP地址
-d:后台运行容器,并返回容器ID
php-nginx:使用的镜像名称以及版本

nginx访问地址:http://localhost

评论