首页 > 生活服务 > 程序猿源

程序猿源

docker部署nginx+php+mysql

管理员 11月前 133浏览

获取最新版的 nginx 镜像

docker pull xtulnx/nginx:tengine-latest

运行 nginx 容器

docker run --name nginx -p 80:80 -v /d/docker/nginx/conf.d:/etc/nginx/conf.d -v /d/docker/nginx/html:/etc/nginx/html -v /d/docker/nginx/data:/data -v /d/docker/nginx/logs:/etc/nginx/logs  --privileged=true -d xtulnx/nginx:tengine-latest

--name nginx 容器名称。

-p 80:80 端口映射,将本地 80 端口映射到容器内部的 80 端口。

-d xtulnx/nginx:tengine-latest 设置容器在在后台一直运行。

获取最新版的 php 镜像

docker pull php:8.0-fpm

运行 php 容器

docker run --name php-fpm -p 9000:9000 -v /d/docker/nginx/html:/var/www -v /d/docker/php/conf/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /d/docker/php/conf/php.ini:/usr/local/etc/php/php.ini --privileged=true -d php:8.0-fpm

--name php-fpm 容器名称。

-p 9000:9000 端口映射,将本地 9000 端口映射到容器内部的 9000 端口。

-d php:8.0-fpm 设置容器在在后台一直运行。

安装情况、查看主机ip并测试

通过 docker ps 命令查看是否安装成功
image.png

查看PHP容器的IP

docker inspect php-fpm | find /I "IPAddress"

image.png

配置nginx

server
{
    listen 80;
    listen [::]:80;
    server_name localhost;
    index index.html index.htm index.php;
    root /etc/nginx/html;

    # 与php-fpm通信的关键设置
    location ~ \.php(.*)$ {
        root   /var/www;
        fastcgi_pass   172.17.0.3: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;
    }
}
# fastcgi_pass可以写php容器名称:端口名,也可以写ip:端口名,ip的获取方法:docker inspect 容器名
# 这里root /etc/nginx/html是nginx容器内的路径,location ~ \.php(.*)$的root /var/www/是php容器内的路径;
# 上面两个路径在宿主的路径是一样的,/d/docker/nginx/html,也就是D:/docker/nginx/html;
# 部署网站的时候,比如是laravel框架,php相关文件会通过location ~ \.php(.*)$去解析,静态文件,比如css/image/js等是去的/etc/nginx/html中的文件的
# 所以,nginx和php的宿主本地的挂载文件路径是一致的
# 这里的配置文件不能错,有错误会造成nginx启动失败
# 如果后期用虚拟域名,如www.test.com,nginx配置文件修改好之后,需要去宿主机的etc/hosts上直接添加127.0.0.1 www.test.com即可,不用在nginx容器或php容器中添加

创建 php 文件
在该目录下添加 D:\docker\nginx\html\index.php文件
image.png


然后浏览器打开访问 http://127.0.0.1/index.php

image.png

运行 mysql

这里我拉取的是官方最新版本的镜像,也可以拉取其他的镜像版本

docker run --name mysql -d -p 3316:3306 -v /d/docker/mysql/datadir:/var/lib/mysql -v /d/docker/mysql/conf.d:/etc/mysql/conf.d  -e MYSQL_ROOT_PASSWORD=root --privileged=true -d mysql:5.7

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

测试 mysql

mysql -h localhost -uroot -p

image.png

Docker容器中给php动态安装扩展,出现错误

首先要判断是否开启,PHP的扩展开启在PHP.ini文件里面,如果没有,把/usr/local/etc/php/php.ini-development 复制一份就i选哪个了

用php -m 看PHP扩展加载情况

如果没有就在php.ini里面找到

;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli

把前面的 ; 去掉,这里要去掉必须要扩展要有,如果没有需要安装,php 安装扩展方式

docker-php-ext-install mysqli

有一些扩展并不包含在 PHP 源码文件中,用 pecl install 安装扩展,然后再用官方提供的 docker-php-ext-enable 快捷脚本来启用扩展

docker exec -it php /bin/bash #进入php容器
#相关依赖安装
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev
pecl install swoole-4.2.12 #安装swoole拓展
docker-php-ext-enable swoole #启用swoole拓展



版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
关注微信公众号:"cq_xifan";

评论

收藏

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

Powered By 重庆饭哥 © 2014-2022 教学资源分享站 渝ICP备20005643号-1

相信有一天,理想主义终将所向披靡.

Design by © 2021 XIFAN. Powered by 重庆饭哥

站点声明: 本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

友情链接: 官方网站 饭哥在线工具 饭哥导航 在线运行 博客交流社区 重庆艺术工程职业学院