docker编译nginx
Ⅰ Docker 入门 (07) 部署nginx 并且映射本地配置文件
目标:
1. 利用docker部署一个nginx容器
2.为nginx 容器设置配置文件 , 并且映射到宿主机(本机)
操作步骤:
1.拉取nginx镜像,并尝试简单运行(忘记怎么操作请参考第五节)
2.在本地新增配置文件 , 为了后面映射容器使用 ,我习惯是放到 /etc/docker/nginx-config , 按你个人运顷习惯新增
3.进入config ,我们需要创建一个简单配置文件 , 这里就来个简单的吧
4.因为我稍后需要占用的是8080端口 , 请确认云服务器端是否开放
5. 万事俱备 , 尝试启动吧
6. 使用你的 服务器ip+8080端口访问测试 , 看到您的写的 index,html 内容, 代表启动成功!
7.具体映射位置 可以 使用 docker exec -it [容野丛器ID] /bin/bash 命令去参考对应映射文件 ,原理就应该明白了
结语:
通过本节的 nginx 映射本地配置文件 , 应旁脊陆该掌握对docker映射文件的基本使用了 , 希望大家都把自己的nginx跑起来吧
Ⅱ Docker中使用Nginx部署多应用
最近打算将系统中的应用全部用docker进行部署,能够进行统一管理。
花费时间最多的问题是:
这两种方式各有优势各有痛点:
我最终还是选择使用一个nginx容器代理所有应用,因为如果多个域名不能都使用80,443端口访问确实很难受。
这篇文章包含了docker中很多元素,如果用的不对,也希望大家斧正。
步骤如下:
我之前已经准备好了两个简单的应用镜像,访问返回静态页面,启动两个应用。
创建一个appbridge用于容器之间的通信。
数据卷可以映射宿主机和容器中的目录,可以方便配置,修改内容和数据持久化。也可以在运行容器 -v 参数自动创建数据卷,这里为了清晰就单独拎出来。
test2应用相同方式创建。
因为需要配置https,先用certbot为域名生成证书和密钥(步骤省略),拷贝证书和密钥到数据卷ssl-certs-vol中。
修改nginx-vol数据卷中的nginx.conf文件,能够映射到nginx容器的配置。
添加服务器配置,这里配置了相同域名的三个端口的反向代理应用,应用地址可使用别名。
进入nginx容器,重新启动nginx
浏览器访问
Ⅲ Docker 搭建 Nginx 集群
实现负载均衡其实并不难、只是很多人不敢去尝试而已,简单来说就是:
在nginx里面配置一个upstream,然后把相关的服务器ip都配置进去。然后采用轮询的方案,然后在nginx里面的配置项里,proxy-pass指向这个upstream,这样就能实现负载均衡.
nginx的负载均衡有4种模式:
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)、fair , url_hash(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
docker pull nginx ( docker pull cloud.io/nginx 这个稍微快点 )
docker run -itd --name nginx1 -p 8080:80 nginx /bin/bash -- 主
docker run -itd --name nginx2 nginx /bin/bash
docker run -itd --name nginx3 nginx /bin/bash
docker ps 查看
docker network ls
docker nerwork inspect d530da7ebbd3
进入nginx1 (主)
docker exec -it d530da7ebbd3 /bin/bash
安装 vim 编辑器 (如有其他、尽可随意) --- 注意:nginx2、nginx3 均安装 编辑器、下文不再赘述
1. apt update 2. apt install vim
cd /etc/nginx/
vim nginx.conf
进入nginx2
docker exec -it e59de010efff /bin/bash
cd /usr/share/nginx/html/
vim index.html
Welcome to nginx! 后添加: From 172.17.0.3:80 即可
进入nginx3
docker exec -it 0f12240cb622 /bin/bash
cd /usr/share/nginx/html/
vim index.html
Welcome to nginx! 后添加: From 172.17.0.4:80 即可
重启三个nginx服务 service nginx restart
此时如果 docker容器会关闭、因此需要再次重启
docker start d530da7ebbd3
docker start e59de010efff
docker start 0f12240cb622
测试结果
补充:
上述说到 负载均衡有4种模式、
配置分别如下:
轮询模式:
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080;
}
weight 模式:
upstream webname {
server192.168.0.1:8080 weight=2;
server192.168.0.2:8080 weight=1;
}
ip_hash模式:
upstream webname {
ip_hash;
server192.168.0.1:8080;
server192.168.0.2:8080;
}
其他配置:
设置某一个节点为backup,那么一般情况下所有请求都访问server1,当server1挂掉或者忙的的时候才会访问server2
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080 backup;
}
设置某个节点为down,那么这个server不参与负载。
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080 down;
}
Ⅳ 基于 Docker 安装 Nginx,启动运行,外网访问,映射配置文件
基于 Docker 安装 Nginx
查找Nginx镜像
语法:docker search nginx
示例:
获取Nginx镜像
示例:
启动nginx容器实例
说明:--name nginx nginx 第一个nginx是通过--name指定的nginx容器实例的名称,另一个nginx表示nginx仓库的名称。
查看nginx容器实例的进程信息
通过ps -ef | grep nginx查看
进入nginx容器内
杀死nginx容器实例
停止nginx实例
启动nginx容器实例
重启nginx容器实例
移除nginx容器实例
案例
暴露外部端口
基于docker run -d --name nginx nginx方法启动nginx后,Docker 容器并没有对外暴露访问的端口,即无法通过当前主机外部浏览器器访问nginx。那么该怎么样呢?
语法:
-p 80:80:通过-p来指定Docker容器中nginx实例对外开放的端口。本例中,第一个80端口是对外开放的端口,第二个80端口指对外开放的端口映射到容器里的端口号。
示例:
通过当前主机外的浏览器访问nginx,如下图:
指定外部的配置文件
语法:
说明:
-v: 表示挂载一个本机目录或文件到容器里。
-v /develop/nginx/nginx.conf:/etc/nginx/nginx.conf:将/develop/nginx/nginx.conf配置文件挂载到容器中/etc/nginx/nginx.conf这个配置文件中。
-v /develop:/develop:将/develop这个目录挂载到容器里的/develop这个目录里。
示例:
注意事项:指定外部配置文件,同时需要指定nginx的首页面,否则会抛出404错误,原因就是因为nginx找不到配置文件中默认的index页面。
本例中,使用/develop/apps/static/index.html替代了容器里的nginx默认的index页面,同时,-v /develop:/develop挂载根目录即可访问子目录。
指定网络模式:--net=bridge 默认模式
其中8080是指主机的端口,而80是指容器的端口
我们先看一下端口的状态
docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows。我们可以通过命令:
找到这个Linux的ip地址,一般情况下这个地址是192.168.99.100,然后在Windows的浏览器中,输入这个地址,加上服务的端口即可启用了。
Ⅳ docker-compose快速启动nginx
创建nginx目录,目录下创建docker-compose.yml文件如下:
nginx目录下创建创建nginx.conf文件,根据实际情况配置,我这里写一个示例:
在nginx目录下创建build目录,将前端静态文件拷贝到下边
在nginx目录下执行如下命令启动服务
启动之后,nginx就可以正常使用了。