Docker系列-网络配置,实战:Nginx负载Tomcat

1,037 阅读3分钟

docker容器网络配置,Nginx负载Tomcat

Docker系列回顾

这部分我们来聊一聊容器间的网络

外部访问容器

在之前我们知道, Docker是独立运行在宿主机之上的, 在上一节我们的启动命令有一个参数 -p, 是代表容器端口映射到宿主机上, 这样已经完成了 外部访问容器 的条件

我们回顾下 :

docker run -d -p 8080:8080 tomcat

通过查看容器列表我们可以看到一个很有意思的地方:

映射到所有的端口

重点看PORTS: 咱都明白,这种方式默认下会映射到所有的地址上。

那么: 我要怎么指定映射的ip地址呢??

问的好, 那么我们来看看吧

docker run -d -p 127.0.0.1:8080:8080 tomcat

这样子, 我们就可以指定ip来映射到指定的ip地址上了, 我们来看下效果

映射到指定的端口

一般情况下, 用在生产环境上

容器和容器之间通信

Docker 的魅力在于:

  • 可以在一个机器上运行多个容器,
  • 容器之间互不影响,
  • 可以随时增删容器

但是如果我们想容器之间进行网络互连, 该怎么做呢? 看!

根据Docker的推荐, 我们可以采用自定义网络的方式, 相当于容器之间是在同一个网络上, 那么就实现了容器之间的通信

创建网络

新建网络采用:

docker network create 网络名称

创建网络

这样子我们就创建出了一个网络, 那么我们想看一下我们创建出来的网络,

查看网络列表:

docker network ls

我们创建出来网络, 但是我们该如何使用呢, 一样需要做一些手脚, 继续往下看:

docker run -d -p 8081:8080 --name=tomcat81  \
  -v /www/server/tomcat/webapps:/usr/local/tomcat/webapps \
  --network=nginx_tomcat_network \
  tomcat

我们看下这个命令, 真的是越来越长。 其实很简单, -v 之间已经介绍过: 挂载目录

--network: 这里就是说创建出来的容器采用我们创建的网络,

我们来看下指定网络之后我们的效果

进入容器内部:

docker exec -it tomcat81 bash

我们通过 curl 来访问tomcat82

我们可以看到结果, 说明两个容器之间是互通的

小小的说明下:

Docker 中, 我们可以通过容器名称来充当ip地址

docker run -d -p 8081:8080 --name=tomcat81  \
  -v /www/server/tomcat/webapps:/usr/local/tomcat/webapps \
  --network=nginx_tomcat_network \
  --hostname=tomcat1 \
  tomcat

我们看到我们指定的hostname已经在/etc/hosts文件中

实战: Nginx负载Tomcat

说的再多, 也不如实际实战一下, 借助上面创建的两个tomcat容器, 我们来创建一个tomcat集群。

我们在新建一个tomcat容器, 一共创建出三个

注意点:

  1. 指定的网络一致
  2. 端口不能一样, 容器名称不能一样

如果想查看效果, 可以将挂载的目录分开

把nginx镜像下载下来

docker pull nginx

启动nginx

docker run -d -p 80:80 \
  -v /www/nginx/conf:/etc/nginx/conf.d \
  -v /www/nginx/html:/usr/share/nginx/html \
  --network=nginx_tomcat_network \
  --name=nginx \
  nginx

接下来对nginx进行配置

我们把nginx的配置目录挂载到了 /www/nginx/conf 下, 所以我们这样配置


gzip  on;

upstream api {
  server tomcat81:8080 weight=1;
  server tomcat82:8080 weight=1;
  server tomcat83:8080 weight=1;
}

#api服务配置
server {
    listen 80;
    server_name localhost;
    charset utf-8;

    location / {
      proxy_pass http://api;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ~ \.(html|htm)$ {
      root   /usr/share/nginx/html;
      index  index.html index.htm;
    }

    location ~* \.(eot|ttf|woff)$ {
      add_header Access-Control-Allow-Origin *;
    }
}

重新启动nginx

docker container restart nginx

运行查看效果

到此, Nginx负载Tomcat就完成了, 其实很简单, 注意上面两个关键点就可以, 剩下的就是nginx的配置了

那么, 明天我们聊一聊如何定制自己的镜像文件