1.安装nginx
#1.查找镜像
$ docker search nginx
#2拉取官方镜像
$ docker pull nginx
#3.创建并运行容器,绑定映射端口(该条命令到挂载nginx的目录下运行)
$ docker run --name nginx -p 80:80 -v /var/www/html/:/usr/share/nginx/html -v $PWD/conf.d:/etc/nginx/conf.d -v $PWD/log:/var/log/nginx -v $PWD/ssl:/etc/nginx/ssl -d nginx
--name 这里是别名,使用docker ps 会最后显示names
-p 80:80 第一个80是服务器的端口,第二个80是docker容器端口,
-v 项目目录挂载
-v 配置文件目录挂载(其中有一个default.conf 文件,使用挂载这个文件需要手动创建)
-v 日志文件挂载
-v ssl证书目录挂载
-d 要运行的容器名称 这里是nginx
注:所有的挂载操作只为在宿主机上就可以操作容器内部的文件,无需进入容器内部
防火墙配置docker
$ firewall-cmd --permanent --zone=trusted --change-interface=docker0
$ firewall-cmd --reload
2.安装php
#1.查找镜像
$ docker search php
#2.拉取官方镜像(根据自己的需要安装版本)
$ docker pull phpdockerio/php72-fpm
#3.现在需要查看nginx 默认运行的路径 进入挂载nginx的配置目录/mnt/nginx/conf.d 查看默认访问路径
$ cat /mnt/nginx/conf.d/default.conf
#4.创建并运行php容器
$ docker run -p 9000:9000 --name phpfpm72 -v /var/www/html/:/usr/share/nginx/html/ -d phpdockerio/php72-fpm
--name 这里是别名,使用docker ps 会最后显示names
-p 80:80 第一个9000 是服务器的端口,第二个9000 是docker容器端口,
-v 将宿主机的目录挂载到容器中 :前为宿主机路径 后为容器路径 (该操作方便添加项目,无需进入容器添加)
-d 要运行的容器名称 这里是phpfpm72
#5.进入挂载目录, 宿主机/var/www/html,并创建一个php文件
#6.访问php 文件了,如果直接访问就会是404
#6.1 获取到phpfpm 这个容器的ip
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' phpfpm72
19fa6014939e8ee6c95d285f7377f72.png
#6.2将172.18.0.3,这个ip配置到宿主机/mnt/nginx/conf.d/default.conf
$ vim default.conf
f434a68333dcfbd74b3486690d4975f.png
# 加入以下的代码 可以访问php文件
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 172.17.0.3:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
注:想域名访问容器中的项目,需nginx反向代理到域名/index2.php
#6.3重启nginx,即可访问index2.php
$ docker restart nginx
3.安装mysql
#1.查找镜像
$ docker search mysql
#2.拉去镜像
$ docker pull mysql:5.7
#3.创建并运行mysql容器
$ docker run -p 3306:3306 --name mysql57 -v $PWD/etc:/etc/mysql -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-v $PWD/etc:/etc/mysql:将主机当前目录下的 /etc 挂载到容器的/etc/mysql。
注:宿主机中不存在则自动创建,容器/etc/mysql 下所有文件需要拷贝到 宿主机$PWD/etc/
需先创建$ docker run -p 3306:3306 --name mysql57 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
然后docker cp 容器/etc/mysql/*文件,然后删除容器,最后挂载目录运行容器
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
注意:navicat for mysql连接mysql发现报错
1.出现2003错误
- 阿里云后台端口
- 防火墙端口
2.出现1045错误
#1.进入mysql容器
docker exec -it 62349aa31687 /bin/bash
#2.进入mysql
mysql -uroot -p*****
#3.授权
mysql> GRANT ALL ON *.* TO 'root'@'%';
#4.刷新权限
mysql> flush privileges;
#5.更新加密规则
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
#6.更新root用户密码:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#7.刷新权限
mysql> flush privileges;
#8.更新root密码
mysql> update user set host = '%' where user = 'root';
#9.刷新权限
mysql> flush privileges;