window上docker安装dnmp环境
搭建环境
Nginx + PHP + MySQL + Redis
Mysql安装
1.下载 MySQL 镜像
docker search mysql-8
docker pull mysql:8
或者 docker pull mysql:8.0.27
2.启动一个 mysql 容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=public123456 --name mysql_8.0.27 mysql:v8.0.27
参数说明:
- run:创建一个新的容器
- --name:指定容器的名称
- -p:端口映射(宿主机端口:容器端口)
- -e: 传入环境变量
- -d: 后台运行
-
mysql:v8.0.27 是调用的镜像名称和版本
docker exec -it mysql /bin/sh
配置文件
日志
将容器内的文件拷贝出来, 目的是要一个MySQL的目录结构
# 拷贝 log docker cp mysql_8.0.27:/etc/mysql D:\docker\mysql\conf # 拷贝 conf docker cp mysql_8.0.27:/var/lib/mysql D:\docker\mysql\lib
命令解释 : docker cp 容器名:容器内路径 宿主机路径(Win10路径)
拷贝处理的文件里的内容没删除,重新安装mysql集装箱会出现重复启动问题
所以不用拷贝,直接创建 D://docker/mysql
然后再conf里创建my.cnf
[mysqld] datadir=/var/lib/mysql #(默认不是中国时区,使用的时候被坑过) default-time_zone = '+8:00' log-error=/var/log/mysql/error.log
注意:linux里
进入容器内部:
docker exec -it mysql bash
参数说明:
- -i:标识允许对容器进行操作,交互式操作
- -t:在容器中新创建一个伪终端
- /etc/mysql: Mysql容器内的配置文件目录, 目录下包含my.cnf配置和一个conf.d文件夹,my.cnf文件内是一些基础配置。自定义的配置应该卸载conf.d文件夹下的配置文件里,从而覆盖默认的my.cnf
- /var/lib/mysql:镜像内MySQL的持久化数据存储目录
查看mysql是否开启日志和地址
show VARIABLES like '%log_bin%';
4.删除 mysql 容器
# 容器 停止 --> 删除
docker stop mysql
docker rm mysql
5.采用容器挂载卷的方式生成 mysql 容器
docker run --name mysql --restart=always --privileged=true -p 3306:3306 -v D:\docker\mysql\lib:/var/lib/mysql -v D:\docker\mysql\conf:/etc/mysql/conf.d -v D:\docker\mysql\log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=public123456 -d mysql:v8.0.27
docker run --name mysql #给容器创建名称 --restart=always # Docker 重启时容器也跟随启动 --privileged=true #Docker 为容易内的 root 用户赋予真正的 root 权限,不然会提示 log 目录权限不足 -p 3306:3306 #开放端口, 宿主机端口:容器端口 -v D:\docker\mysql\lib:/var/lib/mysql #将数据存储目录挂载到容器内的出局存储目录 挂载卷, 宿主机目录在前, 容器目录在后 -v D:\docker\mysql\conf:/etc/mysql/conf.d #将配置目录挂载到容器内的配置目录 -v D:\docker\mysql\log:/var/log/mysql #将日志目录挂载到容器内的日志目录 -e MYSQL_ROOT_PASSWORD=public123456 #配置参数 -d mysql:v8.0.27 #后台运行,镜像
注:
报错,没权限
docker: Error response from daemon: user declined directory sharing D:\docker\mysql-lib.
处理方:docker desktop 的resources里新增文件地址
6.Navicat 连接测试
PHP安装
1.下载 PHP 镜像
docker pull php:8.1.5-fpm
2.启动一个 PHP 容器
docker run -d -p 9001:9001 --name php8.1.5 php:8.1.5-fpm
3.进入 php8.1.5 容器, 找到对应的配置文件位置和日志文件位置
docker exec -it php8.1.5 /bin/sh
exit
docker cp php8.1.5:/usr/local/var/log D:\docker\php
docker cp php8.1.5:/usr/local/etc D:\docker\php\conf
docker cp php8.1.5:/var/www D:\phpstudy_pro\WWW\
4.删除 php8.1.5 容器
docker stop php8.1.5
docker rm php8.1.5
5.采用容器挂载卷的方式生成 php 容器
docker run --name php --restart=always --privileged=true -v D:\docker\php\log:/usr/local/var/log -v D:\docker\php\conf:/usr/local/etc -v D:\phpstudy_pro\WWW\:/var/www/ -p 9000:9000 --link mysql:mysql -d php:8.1.5-fpm
注:
--link mysql:mysql_alias #将容器(php)与容器mysql相连,并取别名为mysql_alias(正常也叫msyql就好)
6.进入容器, 安装 php 扩展
docker exec -it php /bin/sh
docker-php-ext-install pdo_mysq
docker-php-ext-install mysqli
7.检查拓展安装情况
php -m
安装nginx
1.下载 Nginx 镜像
docker pull nginx:1.24.0
2.创建一个nginx容器
docker run -d -p 88:88 --name nginx nginx:1.24.0
3.进入 nginx 容器, 找到对应的配置文件位置和日志文件位置
docker exec -it nginx /bin/sh
4.将容器内的文件拷贝出来, 目的是要一个 nginx 配置文件的目录结构
docker cp nginx:/etc/nginx/ D:\docker
5.删除 nginx 容器
docker stop nginx
docker rm nginx
6.采用容器挂载卷的方式生成 nginx 容器
docker run --name nginx --restart=always --privileged=true -p 88:88 -v D:\phpstudy_pro\WWW\:/var/www/ -v D:\docker\nginx\log:/usr/local/var/log -v D:\docker\nginx:/etc/nginx --link php:php8.1.5-fpm -d nginx:1.24.0
7.修改配置文件
8.重启 nginx
- 进入 nginx 容器, 执行
nginx -s reload
- 直接重启 nginx 容器, 执行
docker restart nginx
(线上服务器, 不建议这样操作, 建议使用第一种方式!)
9.测试
<?php
echo phpinfo();
浏览器中打开 http://localhost:88/
REDIS安装
1.下载 Redis 镜像
docker pull redis:6.0.6
2.采用容器挂载卷的方式生成 redis 容器
docker run --name redis --restart=always --privileged=true -p 6379:6379 -v D:\docker\redis\data:/data -d redis:6.0.6 --appendonly yes --requirepass 123456
- --appendonly yes #redis数据持久化
- --requirepass 123456#密码设置
3.测试
Redis Desktop Manager 连接测试!
redis-desktop-manager-0.9.0.684
链接:https://pan.baidu.com/s/1-0W-MKaOMndBY4pQ5azz4A
提取码:q4oo
redis-desktop-manager-0.8.8.384
链接:https://pan.baidu.com/s/1gtI-kGuDZx35nmYeGuxetw
提取码:y3e1