大家好,我是Dest1ny。
大家用mac或者是windows都是使用phpstudy。
今天docker来搭建一整个php+nginx+mysql+phpmyadmin。
而且mac用docker比较方便!
docker才是众望所归。
大家多多点赞,多多支持,谢谢!!!!
CLASS-1 pull环境
1. 先去pull我们需要的环境(PHP,Nginx,MySQL)
下面是pull的部分
docker pull nginx
docker pull php:7.1-fpm
docker pull mysql:5.7
docker pull phpmyadmin
然后就一直pull完,就不掩饰了!
如果pull不成功,基本上是网络问题
CLASS-2 创建映射目录
在宿主机去创建docker需要映射的目录
就类似于在宿主机映射到docker的目录,docker容器里对应的目录会同时改变
mkdir -p ~/docker/www
mkdir -p ~/docker/nginx/conf.d/
mkdir -p ~/docker/mysql/data
mkdir -p ~/docker/mysql/conf.d
这是搞好之后的
CLASS-3 创建容器
nginx容器
docker run -p 8080:80 --name nginx \
-v ~/docker/www:/usr/share/nginx/html \
-v ~/docker/nginx/conf.d:/etc/nginx/conf.d \
--privileged=true \
-d nginx
-
docker run -p 8080:80
:-p 8080:80
:将宿主机的 8080 端口映射到容器的 80 端口,这样你可以通过访问http://localhost:8080
来访问 Nginx 服务。
-
--name nginx
:- 给这个容器起一个名字叫
nginx
,方便以后管理和识别这个容器。
- 给这个容器起一个名字叫
-
-v /docker/www:/usr/share/nginx/html
:-v
选项用于挂载卷,将宿主机的/docker/www
目录挂载到容器内的/usr/share/nginx/html
目录。这个目录是 Nginx 默认的网页目录,所以你可以把网页文件放在/docker/www
里,容器内的 Nginx 就会自动读取并展示这些文件。
-
-v /docker/nginx/conf.d:/etc/nginx/conf.d
:- 同样使用
-v
挂载,将宿主机的/docker/nginx/conf.d
目录挂载到容器内的/etc/nginx/conf.d
目录。这个目录通常用于存放 Nginx 的配置文件,你可以通过修改宿主机的配置文件来动态调整容器内的 Nginx 配置。
- 同样使用
-
--privileged=true
:- 赋予容器更高的权限,允许容器访问宿主机的更多资源。通常情况下,运行 Nginx 不需要这个参数,但在某些特定情况下(例如需要更多权限进行特定操作时),可能会使用这个选项。
-
-d nginx
:-d
表示以后台模式运行容器。nginx
是使用的镜像名称,Docker 将基于该镜像创建并运行容器。
php容器
docker run -p 9000:9000 --name php-fpm \
-v /docker/www:/var/www/html \
-d php:7.1-fpm
-
docker run -p 9000:9000
:-p 9000:9000
:将宿主机的 9000 端口映射到容器的 9000 端口。这意味着你可以通过宿主机的 9000 端口来访问容器内的 PHP-FPM 服务(PHP FastCGI Process Manager)。
-
--name php-fpm
:- 给这个容器起一个名字叫
php-fpm
,方便以后管理和识别这个容器。
- 给这个容器起一个名字叫
-
-v /docker/www:/var/www/html
:-v
选项用于挂载卷,将宿主机的/docker/www
目录挂载到容器内的/var/www/html
目录。这个目录通常是 PHP-FPM 读取 PHP 文件的默认路径,因此你可以将 PHP 项目放在/docker/www
中,容器内的 PHP-FPM 就会读取并解析这些 PHP 文件。
-
-d php:7.1-fpm
:-d
表示以后台模式运行容器。php:7.1-fpm
是使用的镜像名称,表示使用 PHP 7.1 版本的 FPM 镜像来创建并运行容器。
获取一下ip,后面写配置文件要用!
docker inspect php-fpm --format='{{.NetworkSettings.IPAddress}}'# 返回 IP
172.17.0.3
打开nginx的配置文件
vim ~/docker/nginx/conf.d/default.conf
直接写入内容即可,172.17.0.3是我自己的容器ip地址,你们的就按照前面那个命令去获取就行
server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.php index.html index.htm;}location ~ \.php(.*)$ {root /var/www/html; # php 容器的目录,进 php 容器查看fastcgi_pass 172.17.0.3:9000; # php 容器的IPfastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}
现在测试一下,去www下面去写一个php文件,看看有什么反应
echo "<?php phpinfo(); ?>" > ~/docker/www/info.php
成功!!!
mysql容器
下面是mysql的,步骤是一样的
docker run --name mysql -p 3306:3306 \
-v /docker/mysql/conf.d:/etc/mysql/conf.d \
-v /docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-
docker run --name mysql
:- 给这个容器起一个名字叫
mysql
,方便以后管理和识别这个容器。
- 给这个容器起一个名字叫
-
-p 3306:3306
:- 将宿主机的 3306 端口映射到容器的 3306 端口,这样你可以通过访问宿主机的 3306 端口来连接到 MySQL 数据库(MySQL 默认的端口是 3306)。
-
-v /docker/mysql/conf.d:/etc/mysql/conf.d
:-v
选项用于挂载卷,将宿主机的/docker/mysql/conf.d
目录挂载到容器内的/etc/mysql/conf.d
目录。这个目录通常用于存放 MySQL 的配置文件(例如自定义的my.cnf
文件),这样你可以通过修改宿主机的配置文件来调整容器内的 MySQL 配置。
-
-v /docker/mysql/data:/var/lib/mysql
:- 将宿主机的
/docker/mysql/data
目录挂载到容器内的/var/lib/mysql
目录。这个目录是 MySQL 存储数据库文件的默认路径,这样可以实现数据持久化,即使容器被删除或停止,数据依然保存在宿主机上。
- 将宿主机的
-
-e MYSQL_ROOT_PASSWORD=123456
:-e
选项用于设置环境变量,这里设置了 MySQL 的根用户密码为123456
。在第一次启动容器时,MySQL 会用这个密码创建 root 用户。
-
-d mysql:5.7
:-d
表示以后台模式运行容器。mysql:5.7
是使用的镜像名称,表示使用 MySQL 5.7 版本的镜像来创建并运行容器。
看一下ip
docker inspect mysql --format='{{.NetworkSettings.IPAddress}}'# 返回 IP
172.17.0.1
创建好之后,我们去下载一个mysqli,后面会用到
# 进入容器
docker exec -it php-fpm /bin/bash# 安装 pdo_mysql mysqli
docker-php-ext-install pdo_mysql mysqli# CTRL + D 退出容器
docker restart php-fpm
phpmyadmin容器
sudo docker run --restart=always -d --name myadmin -e PMA_HOST=172.17.0.1 -e PMA_PORT=49153 -p 20888:80 phpmyadmin
这里172.17.0.1是mysql的ip,大家自己有自己的不要搞混
之后访问一下,密码我们之前也设置好了,root/root
ok,全部配置好了,上个前端测试一下
访问一下
大家多多支持,您的关注和点赞是我最大的动力!!