1. 查看docker已经下载的(已有的)镜像
请忽略我已下载好的nginx镜像
2. 去官方公有仓库查询nginx镜像
其中第一个就是nginx官网镜像,且STARS最多,我们这次就用这个
3. 拉取该镜像
因为我之前拉取过,所以后面的输出和第一次拉取的输出不是太一致
4. 再次查看本地镜像
此时,就看到本地有了该镜像
5. 启动一下该镜像,使用nginx服务,代理本机8080端口(测试是不是好使)
-d: 后台运行
-p: 端口映射 冒号前是本机端口,冒号后是容器端口
访问本机ip:8080 即可访问该页面,代表nginx启动成功
6.关闭容器
docker stop XXXXX(容器id前几位)
not end
至此 简单的docker安装nginx并启动算是成功了,接下来就会产生一个疑问,如果我想修改nginx的配置怎么办,我想更改nginx中的资源文件怎么办?接下来给出一个最实用的办法,就是将容器中的目录和本机目录做映射,以达到修改本机目录文件就影响到容器中的文件。
1.本机创建实例文件夹
/home文件夹下新建mutou文件夹,木头文件夹下新建nginx文件夹,nginx文件夹下新建conf.d文件夹,html文件夹,大致结构如下:
/home
|---mutou
|----nginx
|----conf.d
|----html
2. 在conf.d文件夹下新建default.conf文件,内容如下:
server {
listen 80;
server_name localhost;
# 原来的配置,匹配根路径
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}
# 更该配置,匹配/路径,修改index.html的名字,用于区分该配置文件替换了容器中的配置文件
location / {
root /usr/share/nginx/html;
index index-test.html index.htm;
}
}
3.在html中编写index-test.html,用以判断文件夹映射成功,内容如下:
<html>
<body>
<h2>it is html1</h2>
</body>
</html>
4. 启动nginx(8080),映射路径
命令比较长,其实就是多加了两个参数,-v,-v的意思就是冒号前面代表本机路径,冒号后面代表容器内的路径,两个路径进行了映射,本机路径中的文件会覆盖容器内的文件。
nginx容器内的一些文件位置:
日志位置:/var/log/nginx/
配置文件位置:/etc/nginx/
项目位置:/usr/share/nginx/html
启动代码如下:
docker run -d -p 8080:80 -v /home/mutou/nginx/conf.d:/etc/nginx/conf.d -v /home/mutou/nginx/html:/usr/share/nginx/html nginx
5. 验证
此时访问ip:8080,发现展示的不是nginx的默认页面了,而是我们新加入的页面,这样就证明我们两个
-v
映射的文件夹都起作用了。
6. 开始反向代理
此时静态页面网站已经部署上了,但是还是会显示一个端口8080出来,就十分不爽,怎么把端口干掉呢?而是换成XXXXX.com/demo1 或者 XXXXX.com/demo2这种效果呢?下面使用nginx的反向代理实现。
7. 增加文件夹,达到下面的效果
/home
|---mutou
|----nginx
|----conf.d
|----html
|----conf.d2
我们在conf.d2中配置另一个nginx容器的配置文件,文件内容如下:
server {
listen 80;
server_name localhost;
location /demo1 {
# 在该位置配置反向代理,将ip/demo1请求拦截,发送给8080端口,如果不是本机请使用公网ip
proxy_pass http://你的刚才的ip地址:8080/;
}
}
8. 再启动一个nginx(80),专门作为反向代理映射,将本机80端口代理到nginx的80端口上,并映射两端的配置文件地址。
docker run -d -p 80:80 -v /home/mutou/nginx/conf.d2:/etc/nginx/conf.d nginx
此时 访问 ip/demo1 即可映射到了ip:8080上,成功完成反向代理。
9.拓展
当有了反向代理后,自然而然就引出了
负载均衡
,下面简单实现负载均衡
的效果,实现该效果再添加一个nginx,所以要增加一个文件夹。
/home
|---mutou
|----nginx
|----conf.d
|----html
|----conf.d2
|----html3
html3中的代码如下:
<html>
<body>
<h2>it is html3</h2>
</body>
</html>
10. 启动nginx(8081)
启动命令如下:
docker run -d -p 8081:80 -v /home/mutou/nginx/conf.d:/etc/nginx/conf.d -v /home/mutou/nginx/html3:/usr/share/nginx/html nginx
11. 访问ip:8081
12.配置负载均衡,访问ip/demo1时,平均分发到8080端口和8081端口上,即it is html1
和it is html3
间接出现。
配置负载均衡,那就是配置在第二次的nginx上,就是反向代理的nginx上,我们去conf.d2文件夹下,修改default.conf文件,如下:
upstream group1{
server 你的刚才的ip地址:8080;
server 你的刚才的ip地址:8081;
}
server {
listen 80;
server_name localhost;
location /demo1 {
proxy_pass http://group1/;
}
}
此时,查看所有运行中的docker容器:
docker ps
然后重启该容器,
docker restart 容器id
13. 查看效果
访问ip/demo1,每次刷新页面,页面都会在html1和html3中进行切换,此时负载均衡的效果就实现了。
14. 配置负载均衡的权重
可以使用下面的配置修改两个端口的权重(即谁被访问的概率大)
upstream group1{
server 你的刚才的ip地址:8080 weight=1;
server 你的刚才的ip地址:8081 weight=10;
}
server {
listen 80;
server_name localhost;
location /demo1 {
proxy_pass http://group1/;
}
}