docker安装php/nginx搭建本地开发环境
这里主要讲自己学习docker遇到的问题,一些基本的安装流程会跳过,由于本地已经有项目在开发,用laravel homestead方式运行,想试试docker方式。
电脑系统:windows
docker.hub官网下载windows版本客户端,再去Microsoft Store搜索ubuntu(看个人喜好)下载,之后打开ubuntu下载docker。
1.拉取php image,因为原项目要求php版本>=7.2.3,因此,docker pull php时需要指定版本,命令如下:
docker pull php:7.2.3-fpm
2.拉取nginx image,这个直接获取最新版本就好,命令如下:
docker pull nginx
3.创建php容器,命令
docker run --name php-fpm -v /mnt/e/code:/usr/share/nginx/html -it --privileged=true -d php:7.2.3-fpm
其中
--name 是容器名称,这个可以根据自己喜好设定
-v 目录挂载,本地已有项目目录在ubuntu系统里的目录是/mnt/e/code,:/usr/share/nginx/html 这个是系统项目运行的目录,注意,这个目录要和待会创建nginx容器时nginx容器里的运行目录一致。
--privileged=true 让容器里的root用户真正拥有root权限
-d 后台运行模式
4.创建nginx容器,命令
docker run --name php-nginx -p 80:80 -it --privileged=true -d \ -v /mnt/e/code:/usr/share/nginx/html:ro \ -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \ --link php-fpm:php \ nginx
--name 是容器名称,这个可以根据自己喜好设定
-p 端口映射,也可以8080:80这样,我是为了方便,直接宿主机的80端口对应ubuntu系统里的80端口
--privileged=true 让容器里的root用户真正拥有root权限
-d 后台运行模式
-v /mnt/e/code:/usr/share/nginx/html ubuntu系统里的/mnt/e/code挂载到nginx容器里的/usr/share/nginx/html目录
-v ~/nginx/conf/conf.d:/etc/nginx/conf.d ubuntu系统里的~/nginx/conf/conf.d目录挂载到nginx容器里的/etc/nginx/conf.d目录
--link php-fpm 使用3步骤创建的php容器,php-fpm是我自己起的容器名。
现在可以在docker客户端的左侧菜单栏里的Containers/Apps里看到两个运行的容器,进入~/nginx/conf/conf.d目录
vim test.conf
黏贴如下内容
server { listen 80; server_name baidu.test; location / { root /usr/share/nginx/html/public; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?s=$1 last; } location ~ \.php$ { root /usr/share/nginx/html/public;; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/public$fastcgi_script_name; include fastcgi_params; } }
重启nginx容器,浏览器输入baidu.test发现可以成功进入该项目,但是出现了报错,提示could not find driver。
因为项目连接的mysql不在本地,所以无需安装mysql容器,但是php需要安装php-mysql扩展,而官方镜像拉取下来是少了很多扩展的,需要自己自行安装。我这里解决办法如下
进入php容器,
cd /usr/local/bin
安装扩展
./docker-php-ext-install pdo_mysql ./docker-php-ext-install mysql ./docker-php-ext-install mysqli
同理,缺少其他扩展也可这样安装,例如
./docker-php-ext-install gd
./docker-php-ext-install -j$(nproc) bcmath
其他扩展具体怎么安装,请点击这篇文章学习,Docker中PHP安装拓展汇总,连接:https://www.cnblogs.com/hcpzhe/p/12109081.html。
安装完毕后,正常来说我们需要去php.ini里修改配置,但是docker的php容器里没有这个文件,它的php.ini配置被分散到好多地方,那我们可以自己新建一个ini文件,里面写入我们要添加的配置。
cd /usr/local/etc/php/conf.d
这里我新建一个test.ini文件
vim test.ini
在里面添加如下内容
extension=mysqli extension=pdo_mysql extension=pdo_odbc extension=openssl extension=curl extension=fileinfo extension=gd extension=pdo extension=pdo_sqlite
这里面根据自己项目需要安装和添加就好,完毕后重启php容器,再次打开项目,正常运行。