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容器, 一共创建出三个
注意点:
- 指定的网络一致
- 端口不能一样, 容器名称不能一样
如果想查看效果, 可以将挂载的目录分开
把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的配置了
那么, 明天我们聊一聊如何定制自己的镜像文件