这里我用的是docker toolbox,安装后,通过Docker Quickstart Terminal来连接docker。
安装好后,连接docker.
我们镜像加速首先想用daocloud镜像市场来进行加速,但是加速后效果非常不好,于是采用了下面这种方式。
- 使用网易的镜像加速
进到docker主机中(这里是名为default的虚拟机系统)vi /etc/docker/daemon.json //daemon.json是docker安装后默认没有daemon.json这个配置文件,需要进行手动创建。配置文件的默认路径:/etc/docker/daemon.json一般情况,配置文件 daemon.json中配置的项目参数,在启动参数中同样适用,有些可能不一样(具体可以查看官方文档),但需要注意的一点,配置文件中如果已经有某个配置项,则无法在启动参数中增加,会出现冲突的错误。 //然后在文件中增加网易的加速地址 { "registry-mirrors":["http://hub-mirror.c.163.com"] }
- 之后在Docker Quickstart Terminal中docker-machine restart default.重启docker主机。
docker pull nginx
docker run --name nginx-test -p 8081:80 -d nginx
实现思路:建立三个节点,一个作为负载均衡,另外两个作为后端服务器。我们这里起名nginx-test-web和nginx-test-web3作为后端服务器,nginx-test-loadbalancer作为负载均衡器。端口号分别为8082、8083、8084
mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf
//~代表当前用户的home目录,因此可以到当前windows系统下查看
这里有个关键点:windows下必须使用绝对路径而不是相对路径
//拷⻉容器内 Nginx 默认配置⽂件到刚才创建的 conf ⽬录,可以输⼊ docker ps 命令
//这是之前的命令
docker cp 3fea44f03762[替换成⾃⼰的容器ID]:/etc/nginx/nginx.conf ~/nginx/conf
//改为这个命令
docker cp 3fea44f03762[替换成⾃⼰的容器ID]:/etc/nginx/nginx.conf C:\Users\WZW0926\nginx/nginx/conf
docker run -d -p 8082:80 --name nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx
#这是一个命令...
cd ~/nginx/www
创建index.html,
vi index.html
按i进入编辑模式,并输入以下内容
nginx-8082
我的第⼀个标题
我的第⼀个段落。
mkdir -p ~/nginx3/www ~/nginx3/logs ~/nginx3/conf
mkdir -p ~/nginx4/logs ~/nginx4/conf
docker cp 3fea44f03762[替换成⾃⼰的容器ID]:/etc/nginx/nginx.conf C:/Users/WZW0926/nginx3/conf
docker cp 3fea44f03762[替换成⾃⼰的容器ID]:/etc/nginx/nginx.conf C:/Users/WZW0926/nginx4/conf
docker run -d -p 8083:80 --name nginx-test-web3 -v ~/nginx3/www:/usr/share/nginx/html -v ~/nginx3/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx3/logs:/var/log/nginx nginx
docker run -d -p 8084:80 --name nginx-test-loadbalancer -v ~/nginx4/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx4/logs:/var/log/nginx nginx
然后修改nginx-test-web3的主页
cd ~/nginx3/www
vi index.html
编辑以下内容
nginx-8083
我的第⼆个标题
我的第⼆个段落。
我们之前已经部署了nginx-test-loadbalancer,下面我们修改他的nginx.conf文件内容,路径为C:\Users\用户名\nginx4\conf下。
在nginx.conf中的http节点下加入upstrean节点
upstream backend { #backend为⾃定义名字
#ip_hash; #开启则代表⽤ip地址的形式来分配,可解决session问题
server 192.168.99.100:8082 weight=1; #weight越⼤,权重越⾼,被分配的⼏率越⼤
server 192.168.99.100:8083 weight=1; #本次实验全部在本机,因此⽤了本地的ip,只要相应换成对应的ip或者域名即可
}
下面再在http节点下加入server节点
server {
location / {
root html;
index index.html index.htm;
proxy_pass http://backend; #backend为之前在nginx.conf中upstream后定义的名字
}
}
最后,保存退出,重启服务器
docker restart nginx-test-loadbalancer
下面,我们到浏览器里访问,但是、、、、、
无法连接到服务器,服务器拒绝了我们的请求
…
看到这里,我觉得配置是没有问题的,那问题出现在哪儿呢?
这里有个很大的坑,我之前从网上看到,/etc/nginx/conf.d,但是,我一直在docker主机(名为default的虚拟机)中去找,找了好久没找到,之后才想明白,这是容器的配置文件,为什么不进容器里看看呢
docker exec -it nginx-test bash
然后到etc/nginx下看看
!我们在这里,看到了conf.d,终于。
而之前,我们仅仅看到了nginx.conf文件。
下面,我们看看conf.d下的文件吧
果然,我们这里看到了default.conf,这也是一个配置文件
千呼万唤试出来
看到了我们的server节点,所以,我们server配置到这儿,才会生效。
- 首先在~/nginx4下新建confd文件夹,然后把default.conf挂载
docker cp 3fea44f03762[替换成⾃⼰的容ID]:/etc/nginx/conf.d /c/Users/WZW0926/nginx4/confd
- 下面新建docker容器
docker run -d -p 8084:80 --name nginx-test-loadbalancer -v /c/Users/WZW0926/nginx4/conf/nginx.conf:/etc/nginx/nginx.conf -v /c/Users/WZW0926/nginx4/confd:/etc/nginx/conf.d nginx
- 接着修改default.conf文件
加入upstream节点upstream backend { server 192.168.99.100:8082 weight=1; server 192.168.99.100:8083 weight=1; } #这里ip换成自己的
server中的location
location / { root /usr/share/nginx/html; index index.html index.htm; proxy_pass http://backend; }
- 下面重启:docker restart nginx-test-loadbalancer
然后就可以了!
做到这,我也发现了另外一个问题:指导书中的空格有问题,导致我之前失败。
于是我又去nginx.conf里面试了试。
修改nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream backend {
server 192.168.99.100:8082 weight=1;
server 192.168.99.100:8083 weight=1;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://backend;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
# include /etc/nginx/conf.d/*.conf;
}
重启后,可以了
做到这里,我不尽想说,,,有时候,代码还是需要敲的,不是用来ctrl+v的…
记一次不堪的经历,20200524于凌晨