1:安装mysql
#获取mysql 镜像
docker pull mysql:5.7
#启动我们的
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
2:安装nginx
1.下载Nginx镜像
命令 | 描述 |
docker pull nginx | 下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) |
docker pull nginx:xxx | 下载指定版本的Nginx镜像 (xxx指具体版本号) |
2.创建Nginx配置文件
# 创建挂载目录
mkdir -p /home/nginx/{conf,html,logs,ssl}
先启动nginx
#由于本机80端口被占用 这里用3344端口。记得服务器放行3344端口
docker run -p 3344:80 --name nginx
查看nginx启动情况
docker ps -a
测试是否成功
curl localhost:3344
#显示以下内容说明成功
![](https://i-blog.csdnimg.cn/blog_migrate/42879946268f254502e1ba1723f9c55a.png)
然后将容器中的nginx.conf文件和conf.d文件夹复制到宿主机
# 生成容器
docker run --name nginx -p 3344:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /home/nginx/
复制完成后 停止 并且删除该容器
# 直接执行docker rm nginx或者以容器id方式关闭容器
# 找到nginx对应的容器id
docker ps -a
# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx
# 删除正在运行的nginx容器
docker rm -f nginx
3.创建Nginx容器并运行
把证书上传到服务
#上传到这个目录下面,ssl是我们刚才创建的目录
/home/nginx/ssl
修改nginx.conf配置文件,配置ssl证书
server {
listen 80;
#填写绑定证书的域名
server_name _;
#把http的域名请求转成https,相当于用户访问http也可以自动跳转到https,避免出现网页提示不安全
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name _;
#证书文件名称
ssl_certificate_key /etc/nginx/ssl/xx.key;
#私钥文件名称 .crt和.pem都可以用
ssl_certificate /etc/nginx/ssl/xx.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
root /usr/local/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
#首页
location / {
index index.php index.html index.htm;
client_max_body_size 50m;
#limit_rate 100k; 限制下载速度
include fastcgi_params;
#rewrite ^.*$ /index.php$request_uri break;
#ThinkPhp访问异常可以用下面的代码
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
*注意:虽然证书存放位置是/usr/local/nginx/ssl,但是配置里面要写/etc/nginx/ssl而不是/usr/local/nginx/ssl,不然启动会报错,因为配置里面的绝对路径,都是在nginx容器里面的地址,和主机里面的目录地址是两个东西,后面启动目录挂载的时候,是可以读到证书的,不用担心。
运行nginx并挂载相关文件
docker run \
-p 3344:80 \
--name nginx \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/nginx/ssl:/etc/nginx/ssl \
--privileged=true -d --restart=always
-d nginx:latest
说明:
命令 | 描述 |
–name nginx | 启动容器的名字 |
-d | 后台运行 |
-p 3344:80 | 将容器的 3344(后面那个) 端口映射到主机的 80(前面那个) 端口 |
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf | 挂载nginx.conf配置文件 |
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d | 挂载nginx配置文件 |
-v /home/nginx/log:/var/log/nginx | 挂载nginx日志文件 |
-v /home/nginx/html:/usr/share/nginx/html | 挂载nginx内容 |
nginx:latest | 本地运行的版本 |
\ | shell 命令换行 |
--privileged=true | /使用该参数,container内的root拥有真正的root权限,避免后面操作时提示无权限 |
--restart=always | //能够使我们在重启docker时,自动启动相关容器 |
单行模式
docker run -p 3344:80 -p 1443:443 --name nginx -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/log:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/ssl:/etc/nginx/ssl --privileged=true -d --restart=always -d nginx:latest
4.结果检测
![](https://i-blog.csdnimg.cn/blog_migrate/42879946268f254502e1ba1723f9c55a.png)