目录
一、同一网断不同容器通信
1.自定义网络相关命令
① 创建自定义网络
② 创建容器
③ 有两个互通方式 进入c1容器 输入ping c2
直接在外面p互通 docker exec -it c1 ping c2
④ network 帮助命令 docker network --help
⑤ 查看网络中的配置信息 docker network inspect myent(查询哪个网络)
二、不同网段不同容器的通信
① 解决此问题?向网络mynet中添加容器c3
三、Nginx
1.Nginx是什么
2.安装Nginx
① 搜索Nginx镜像
② 拉取镜像
③ 在宿主机中创建挂载目录
④ 根据nginx镜像创建nginx容器(测试nginx的安装与访问,并没有发布任何的java或vue项目,最后此容器要删除的)
⑤ 删除简单测试nginx镜像
四、部署前端项目
① 先把文件复制到/data/nginx/conf/
②创建nginx容器
③ 把dist.zip复制到data/nginx/html文件里
④ 解压zip unzip dist.zip
⑤ 下载解压命令 yum install -y unzip
⑥ 就可以直接去访问了
一、同一网断不同容器通信
# 创建自定义网络
docker network create --driver bridge --subnet 192.168.0.1/16 --gateway 192.168.0.1 mynet
#创建容器
docker run -di --name c1 --net mynet centos:7
#启动容器后检查网络之间是否可以互通
docker exec -it c1 ping c2
1.自定义网络相关命令
为了演示效果我把昨天创建的网络删除,如下所示:
① 创建自定义网络
docker network create --driver bridge --subnet 192.168.0.1/16 --gateway 192.168.0.1 mynet
参数说明
--driver bridge 设置网络模式
--subnet 192.168.0.1/16 设置子网
--gateway 192.168.0.1 设置网关
mynet 自定义网络的名称
② 创建容器
③ 有两个互通方式 进入c1容器 输入ping c2
直接在外面p互通 docker exec -it c1 ping c2
④ network 帮助命令 docker network --help
⑤ 查看网络中的配置信息 docker network inspect myent(查询哪个网络)
二、不同网段不同容器的通信
#1.使用局域名bridge
docker run --name centos1 -itd centos:latest
docker network inspect bridge
#2.使用局域网mynet
docker run --name centos2 -itd --net mynet --ip 192.168.0.12 centos:latest
docker network inspect mynet
#3.测试centos1和centos2的连接
docker exec -it centos1 ping centos2
#连接失败,控制台出现如下提示
ping: centos2: Name or service not known
#4.如何解决此问题呢?向网络mynet中添加容器centos1
docker network connect mynet centos1
为什么成功了呢?原因:容器centos1具有两个ip
#查看网络信息
docker network inspect mynet
#查看容器详细信息
docker inspect centos1
我们测试c3和c2,c1进行连接,是不行的,我这里就显示一个图片,效果都是一样的:
连接失败,控制台出现如下提示:ping: c3: Name or service not known
① 解决此问题?向网络mynet中添加容器c3
三、Nginx
1.Nginx是什么
Nginx也是一款服务器,我们常用它做如:反向代理、负载均衡、动态与静态资源的分离的工作,
反向代理:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,
并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
负载均衡:目前大多数的网站都会采用负载均衡手段来针对目前用户的指数级增长来减少对单点服务器的负载压力,
比如目前我们拥有3台真实服务器,我们需要根据相应策略决定什么样的用户请求分配到哪个真实服务器,比如按照轮询的方式,
用户请求挨个到达代理服务器,此时代理服务器按照第一个请求转发至第一台真实服务器,第二个请求转发到第二个服务器上,依次类推,
这样可以防止大量的用户请求全部访问到同一台物理机上,单点物理机的性能始终有限的,当然这可能对服务器数据访问时候造成事务性的失效,
在Web方面可能造成Session访问的问题,这不在本文讨论方面内
Nginx+tomcat是目前主流的java web架构
2.安装Nginx
1.搜索nginx镜像
docker search nginx
2.拉取镜像
docker pull nginx
3.在宿主机中创建挂载目录
mkdir -p /data/nginx/{conf,conf.d,html,log}
注1:因为在nginx镜像中没有安装vi或vim编辑器(安装又太麻烦了),无法编辑nginx配置文件,所以直接通过数据卷挂载上去更加方便
注2:将nginx配置文件nginx.conf上传到宿主机的挂载目录“/data/nginx/conf”下
注3:将vue前端项目打包后上传到宿主机的挂载目录“/data/nginx/html”下并解压
unzip dist.zip
注4:nginx配置文件相关调试命令可参考附录二
4.根据nginx镜像创建nginx容器(测试nginx的安装与访问,并没有发布任何的java或vue项目,最后此容器要删除的)
#简单测试nginx镜像
A.使用docker内置网络bridge
docker run \
--name mynginx \
-d -p 80:80 \
nginx:latest
#登录nginx容器
docker exec -it mynginx /bin/bash
B.使用自定义网络mynet ???外部浏览器连接不上
docker run \
--name mynginx \
-d -p 80:80 \
--net mynet --ip 192.168.0.13 \
nginx:latest
注1:记得修改centos7的防火墙放开80端口
# 开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重启防火墙(不重启以上的设置是不会生效的):
firewall-cmd --reload
#查询指定端口号是否开启:
firewall-cmd --query-port=80/tcp
小结: mynginx使用docker内置网络bridge,再mynginx添加至mynet中
5.查看本地的容器,可以看到nginx容器已经创建成功了
docker ps
6.测试nginx是否安装成功
打开浏览器输入:http://192.168.183.133( http://宿主机ip:80),正常情况下会显示nginx的欢迎页面
① 搜索Nginx镜像
docker search nginx
② 拉取镜像
docker pull nginx
③ 在宿主机中创建挂载目录
mkdir -p /data/nginx/{conf,conf.d,html,log}
④ 根据nginx镜像创建nginx容器(测试nginx的安装与访问,并没有发布任何的java或vue项目,最后此容器要删除的)
简单测试nginx镜像
docker run \--name mynginx \-d -p 80:80 \nginx:latest
⑤ 删除简单测试nginx镜像
四、部署前端项目
docker实战之通过nginx镜像来部署SPA项目
nginx+tomcat实现反向代理及均衡
nginx+html静态服务器
① 先把文件复制到/data/nginx/conf/
②创建nginx容器
docker run \--name mynginx \-d -p 80:80 \-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \-v /data/nginx/log:/var/log/nginx \-v /data/nginx/html:/usr/share/nginx/html \nginx:latest
当我们执行这行代码时容易出现的问题,如下图:
在执行效果如下:
解释没访问的原因:
由于我们访问的网站的目录是容器内部,所以我们跟这个目录所挂载的宿主机目录就好了
③ 把dist.zip复制到data/nginx/html文件里
我们nginx里面就有内容了。
④ 解压zip unzip dist.zip
可能会出现没有这个命令,利用阿里云下载就好了