获取最新版的 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
命令查看是否安装成功
查看PHP容器的IP
docker inspect php-fpm | find /I "IPAddress"
配置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文件

然后浏览器打开访问 http://127.0.0.1/index.php
运行 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
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";