首先在linux系统中新建一个data文件夹进行nginx容器的创建--即为:mkdir data。

一:第一次

1 第一步:

使用 docker pull nginx将nginx的镜像从仓库下载下来。

2 第二步使用镜像文件创建nginx容器:

docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx

会出现错误:

[root@bogon overlay2]# docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx
13bdd883e2d3854231ea92aee362592d2b3cfefbd5b71b7001a4289ddeb57470
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:364: container init caused \"rootfs_linux.go:54: mounting \\\"/var/lib/docker/overlay2/conf/nginx.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/e7f9d2c6c6b5ea9b3d494e2a4031218acd5c0ccce5225faab2b851d657eedfd6/merged\\\" at \\\"/var/lib/docker/overlay2/e7f9d2c6c6b5ea9b3d494e2a4031218acd5c0ccce5225faab2b851d657eedfd6/merged/etc/nginx/nginx.conf\\\" caused \\\"not a directory\\\"\""
: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

使用 docker rm myginx删除mynginx容器。换一种思路。

二:第二次

1 使用命令:

docker run -p 80:80 --name mynginx -v $PWD/www:/www  -v $PWD/logs:/wwwlogs  -d nginx

成功启动这一次没有挂载nginx.con配置文件。

2 然后使用如下命令进入交互式终端:

1
docker exec -it mynginx /bin/bash

3 然后使用如下命令找到nginx.conf 配置文件。

root@95e2b70fdf49:/# cd /etc/nginx/
root@95e2b70fdf49:/etc/nginx# ls
conf.d    fastcgi_params    koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params    uwsgi_params  win-utf

4 最后使用exit命令退出交互式终端,使用如下命令进行配置文件的拷贝,将其粘贴到/root/conf/nginx.con.

注意:a )最后加/就是文件夹,不加/就是文件如下命令所示,前面的nginx.conf 和后面的nginx.conf 都是文件,所以没有以/结尾。

   b ) 95e2b70fdf49与上面的root@95e2b70fdf49要对应。

docker cp 95e2b70fdf49:/etc/nginx/nginx.conf $PWD/conf/nginx.conf #使用id或names【mynginx】

此时已经成功配置使用ip+80端口即可访问。但是在修改/root/conf/nginx.conf文件实现负载均衡的时候不起作用。你就发现还没完成任务需要使用docker rm mynginx重新删除nginx容器,再次使用第一次使用的命令重新新建nginx容器:

docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx

成功开启nginx服务。使用ip+80端口成功访问,修改/root/conf/nginx.conf配置文件即可生效。可以进行配置负载均衡。注意负载均衡的配置中容器中的ip地址。

三 、负载均衡

注意:如果是在部署服务器的时候在nginx.conf配置文件直接配置内网ip+端口号即可,但是如果是在一个虚拟机上安装一个linux操作系统自行测试的时候,需要使用命令docker exec -it tomcat /bin/bash 进入tomcat容器交互式终端,使用ifconfig查看ip端口,然后在配置文件进行指定。

详细解释:

1)自己购买的云服务器端配置:

  首先有负载均衡服务器、应用1服务器、应用2服务器三台服务器,因为三个服务器在一个相同的局域网内直接在nginx配置文件中使用内网ip+端口号即可指定,执行过程如下:

  负载均衡请求--》应用1或2服务器主机ip+端口--》自动映射到docker里面的tomcat容器的端口。

2)自己在虚拟机创建一个linux主机。

  首先在一个主机上使用docker创建nginx和多个tomcat容器【不同端口号】,多个容器【tomcat、mysql、redis。nginx等】是在一个内部同一个局域网,

  在此时配置的时候需要指定的是tomcat容器内部的ip地址。使用docker exec -it tomcat /bin/bash 进入tomcat容器交互式终端,使用ifconfig查看ip端口,但是会提示在此容器不能使用ifconfig命令,需要使用apt-get install net-tools 、apt-get update、apt-get install net-tools【依次使用】命令下载安装。然后再是inconfig可以查看到ip地址,最后直接在配置文件直接指定即可。命令如下,我的ifconfig已经安装过。

[root@bogon conf]# docker exec -it mytomcat /bin/bash
root@4a33248aba7c:/usr/local/tomcat# ls
LICENSE  NOTICE  RELEASE-NOTES    RUNNING.txt  bin  conf    include  lib  logs  native-jni-lib  temp  usr  webapps    work
root@4a33248aba7c:/usr/local/tomcat# cd webapps/
root@4a33248aba7c:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager  wlsweb
root@4a33248aba7c:/usr/local/tomcat/webapps# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0inet6 fe80::42:acff:fe11:2  prefixlen 64  scopeid 0x20<link>ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)RX packets 8  bytes 648 (648.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 8  bytes 648 (648.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

nginx.conf负载均衡配置如下:

  upstream cetc{ip_hash;server  172.17.0.2:8080;}server {listen       80;server_name  10.23.57.129;location / {proxy_pass http://cetc;proxy_set_header        Host $host;proxy_set_header        X-Real-IP $remote_addr;proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size    10m;client_body_buffer_size 128k;proxy_connect_timeout   300;proxy_send_timeout      300;proxy_read_timeout      300;proxy_buffer_size       4k;proxy_buffers           4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;add_header Access-Control-Allow-Origin *;index index.jsp index.html index.htm;rewrite ^/$ /wlsweb;        }}

上面两个红色标记处ip应该对应。使用docker restart nginx重启nginx ,访问测试成功。

最后注意:在自己的虚拟机上玩,每次重新打开linux运行docker各个容器的时候ip地址会随机变化,所以很可能是你之前配置的ip没有对应上,测试nginx会出现nginx 502 bad gateway,还没有找到固定容器ip地址的方法。。。

转载于:https://www.cnblogs.com/yui66/p/9856908.html

Docker安装nginx以及负载均衡相关推荐

  1. Centos 7离线安装Nginx 配置负载均衡集群

    场景 项目中有三台应用服务器,系统为Centos 7 ,应用地址分别为: 192.168.198.229:8080 192.168.198.230:8080 192.168.198.231:8080 ...

  2. yum安装nginx的负载均衡详解

    网络划分 主网络192.168.142.128 分担网络 1号 192.168.142.101 2号 192.168.142.130 3号 192.168.142.103 我们通过修改代理服务器的ni ...

  3. docker nginx 配置负载均衡

    在上篇的文章中我们介绍了docker nginx配置简单的代理 在这篇文章我们介绍docker 利用nginx配置负载均衡 所谓的负载均衡是两台服务器,或者是多台服务器上面部署项目,但是访问的方式是通 ...

  4. docker安装nginx,配置nginx,并成功访问

    [Nginx那些事]系列 [Nginx那些事]nginx 安装及常用指令 [Nginx那些事]Nginx 配置文件说明 [Nginx那些事]nginx原理解析 [Nginx那些事]nginx配置实例( ...

  5. Nginx 实战-负载均衡

    一.负载均衡 今天学习一下Nginx的负载均衡.由于传统软件建构的局限性,加上一台服务器处理能里的有限性,在如今高并发.业务复杂的场景下很难达到咱们的要求.但是若将很多台这样的服务器通过某种方式组成一 ...

  6. Nginx动态负载均衡与配置管理

    背景 在Nginx集群有一定的规模时,比较让人头疼的问题有2个,一是如何在不reload nginx的情况下,动态更新后端rs,减少nginx reload的性能损耗,也能更好的对接到内部的部署平台: ...

  7. Nginx搭建负载均衡集群

    (1).实验环境 youxi1 192.168.5.101 负载均衡器 youxi2 192.168.5.102 主机1 youxi3 192.168.5.103 主机2 (2).Nginx负载均衡策 ...

  8. lnmp架构——nginx的负载均衡

    lnmp架构--nginx的负载均衡 1 什么是nginx 2 nginx的作用 3 nginx的特点 4 nginx的安装以及优化 4.1 安装nginx 4.2 优化 5 nginx主配置文件操作 ...

  9. Nginx+keepalived负载均衡高可用篇第③版

    Nginx+keepalived负载均衡高可用篇第③版 对付中.小型企业,假如没有资金去购买昂贵的四/七层负载均衡交换机,那么Nginx是不错的七层负载均衡选择,并且可以通过Nginx + Keepa ...

  10. Nginx+Tomcat 负载均衡集群方案

    2019独角兽企业重金招聘Python工程师标准>>> Nginx+Tomcat 负载均衡集群方案 该方案是我之前做过的一个项目生产应用的,目前运行良好,如何您生产使用,请先做好测试 ...

最新文章

  1. 不做“浮冰”,深挖AI技术和场景
  2. 适配器模式(三种)简单使用
  3. Spring2 Hibernate3 Junit 应用示例1
  4. H - Checker FZU - 2041
  5. Python在使用pip安装某个库时报错 Could not find a version that satisfies the requirement numpy
  6. 五个 PostgreSQL 典型故障案例及处理
  7. 导入虚拟机vmware,此主机支持Intel VT-x,但Intel VT-x处于禁用状态和黑屏
  8. 使用AirDrop将文件从iPhone或iPad传送到Mac电脑教程
  9. w ndows10卸载word,windows10系统下怎样卸载office 2003
  10. uva10098--排列
  11. Google浏览器的所有版本下载
  12. java 线程通讯道通信就_java线程间通讯的一些方法总结
  13. ie8打不开mysql登录_Win7下IE8无法打开https类型的网站解决方法笔记
  14. 零跑股价再度上涨的原因到底是什么呢?
  15. 哈希(哈希表与哈希函数)
  16. 嵌套循环中的break和continue使用规则
  17. Windows11任务栏无法透明化解决办法
  18. python识别图片中的二维码_python3+pyzbar+Image 进行图片二维码识别
  19. oracle如何判断数字中有字母,SQL 判断含有字母和数字的字符串
  20. IE浏览器通过JS提交表单时报错拒绝访问

热门文章

  1. 并发编程学习之Callable接口
  2. MyCat分片规则之枚举分片
  3. Java代码优化的一些方法(总结)
  4. 一个插排引发的设计思想 (二) 抽象类与接口
  5. Linux如何查看哪个进程占用的SWAP分区比较多
  6. Web API 方法的返回类型、格式器、过滤器
  7. heartbeat+drbd+mysql高可用架构
  8. jQuery-ui-autocomplete
  9. 关于自增、自减运算(vc++6.0)
  10. Javascript的一种代码结构方式——插件式