首先请下载Docker Desktop➡️docker.com。
部署Mysql
从Docker的公共仓库Dockerhub下载mysql镜像:
$ docker pull mysql
基于该镜像启动一个Mysql容器:
$ docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
-run 创建一个新的容器
--name指定<container_name>为mysql
-p 容器端口映射本地服务器,格式:-p <local-port>:<container-port>
-e 指定环境变量MYSQL_ROOT_PASSWORD为123456
-d 代表容器运行于后台。
nginx 镜像名称,默认下载latest
至此完成Mysql安装,接下来部署Nginx。
部署Nginx
从Docker的公共仓库Dockerhub下载nginx镜像:
$ docker pull nginx
基于该镜像启动容器:
$ docker run --name nginx -p 80:80 -d nginx
运行成功后,终端会返回container_id,浏览器访问http://localhost,会看到Nginx欢迎页面。
映射路径
默认情况下,Docker nginx服务器的HTML路径(网站根目录)在容器 /usr/share/nginx/html 目录下,现在需要把这个目录映射到本地服务器的 ~/web/html 目录。在上面命令的基础上加上-v
参数,-v
的参数格式为:<local-volumes>:<container-volumes>
:
本机项目地址:/nginx容器的项目地址 Users/potato/docker/web:/usr/share/nginx/html
$ docker stop nginx # 停止正在运行的容器
$ docker rm nginx # 删除容器
$ docker run --name nginx -p 80:80 -d -v /Users/potato/docker/erb/:/usr/share/nginx/html -v nginx
本地修改hosts文件,127.0.0.1 localhost。
配置Nginx
这一步主要是将Nginx的配置文件也映射到本地目录方便修改。
$ cd /Users/potato/docker/nginx/conf.d
$ docker cp nginx:/etc/nginx/conf.d/default.conf default.conf
$ docker stop nginx
$ docker rm nginx
$ docker run --name nginx -p 80:80 -v /Users/potato/docker/web:/usr/share/nginx/html -v /Users/potato/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx
如修改conf文件,需重启容器生效:
$ docker restart nginx
这样就可以方便快捷的在本地修改配置文件了。
部署PHP-FPM
$ docker pull php:fpm
$ docker run --name php-fpm -p 9000:9000 -d php:fpm
$ cd /Users/potato/docker/php
#复制www.conf到本地的www/config中
$ docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf www.conf
#查看容器的 containerID
$docker ps -a
#进入到正在运行的php-fpm容器中
$docker exec -it containerID /bin/bash
#进入到src中会看到2个压缩包
cd /usr/src/
ls -ll
-rw-r--r-- 1 root root 11928820 Dec 4 18:40 php.tar.xz
-rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc
#解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。
root@e8f61e487bb6:/usr/src# xz -d php.tar.xz
root@e8f61e487bb6:/usr/src#ls -ll
-rw-r--r-- 1 root root 139786240 Dec 4 18:40 php.tar
-rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc
root@e8f61e487bb6:/usr/src#tar xvf php.tar
root@e8f61e487bb6:/usr/src#ls -ll
drwxr-xr-x 14 1000 1000 4096 Dec 4 16:12 php-8.3.7
-rw-r--r-- 1 root root 139786240 Dec 4 18:40 php.tar
-rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc
exit;
#回到宿主机的config文件夹中,把容器里面的php.ini复制下来
$ docker cp php-fpm:/usr/src/php-7.3.0/php.ini-production php.ini
在本地修改php.ini文件,需要去掉注释。
cgi.fix_pathinfo=0
extension=mysqli
然后重新启动容器:
$ docker stop php-fpm
$ docker rm php-fpm
$ docker run --name php-fpm --link mysql:mysql -v /Users/potato/docker/web:/usr/share/nginx/html -v /Users/potato/docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /Users/potato/docker/php/php.ini:/usr/local/etc/php-8.3.7/php.ini -d php:fpm
进入容器安装pdo_mysql扩展
$ docker exec -it php /bin/bash
#执行安装
$ docker-php-ext-install pdo pdo_mysql
#重启容器
exit
$ docker restart php-fpm
配置Nginx支持php-fpm
修改nginx配置文件
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.php index.html index.htm;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
#root /usr/share/nginx/html;
#index index.php index.html index.htm;
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
location = /40x.html {
root /user/share/nginx/html;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
然后重新启动Nginx,Nginx需link php-fpm,故需先启动php-fpm后启动Nginx。
$docker stop nginx
$docker rm nginx
$ docker run --name nginx -p 80:80 --link php-fpm -v /Users/potato/docker/web:/usr/share/nginx/html -v /Users/potato/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx
在映射项目目录(/Users/potato/docker/web)下创建index.php文件:
<?php
phpinfo();
在浏览器访问localhost,刷新一下就可以显示phpinfo啦。