Docker network入门、简配容器网络、容器间互相访问

这节学下网络的配置,上一节我们做了三个容器 其中一个nginx容器 两个使用apache做的简单模拟网站 通过容器和容器之间完成一个负载均衡 如果把nginx容器放在主机上 这个过程就很简单了 因为主机和容器之间可以进行端口映射 主要在nginx里面做下配置 就可以完成 但是如果nginx容器本身也在一个容器里面 那样就涉及到一个容器和容器之间的访问
那容器之间到底如何访问 以及容器的ip是什么呢 下面学习下这部分知识
上节学到了compose编排工具 在配置文件里可以非常方便的对容器启动方式以及端口映射进行编排 只要通过一句命令就可以方便的启动多个容器 上节把web1和web2容器写在了配置文件里
这节首先把我们的nginx镜像也写入配置文件


image.png

接下来首先把之前创建的mynginx容器删掉 否则 会报错 容器名冲突


image.png

下面是用docker-compose编排启动容器
image.png

可以看见启动了三个容器 到了后面我们可以把里面复杂的业务全部写在yml配置文件里面 传给队友一个文件即可 启动并且生成相关镜像启动容器
下面看下三个容器里面内容是否能访问
image.png

image.png

image.png

下面看下容器之间如何通过ip方式(互相)访问
首先看下文档


image.png

docker容器启动必定有个网络存在 今天学下简单并且经典的模式 桥接模式
文档中说明了如何创建虚拟网络以及默认值是什么
image.png

可以看见默认值是我们创建的mycompose里面的yml配置文件启动后自动创建的一个网络叫做mycompose_default 是默认的网络
如果我们创建并启动一个容器 如果没有设置并且没有指定网络名称自动会加入bridge(桥接模式)
一般会采用bridge模式使主机和容器互通
下面看下mycompose_default里面有什么内容
image.png

image.png

其中config里面的事子网和网关
containers表示加入的容器 当容器启动时候会有三个容器加入 因为配置文件里面就是这样配置的 并且自动为我们分配了ip地址
image.png

以交互式方式进入nginx容器下
image.png

其中 cat /ect/hosts 这个下面专门记录了我们的ip地址 可以发现与nginx的ip地址一模一样

所以在这个(nginx)容器里面访问另外的容器(web1或者web2)
首先我们ping 下ip


image.png

这样容器之间可以通过ip方式进行互通 这里ip的分配依赖默认的桥接模式(创建一个虚拟的网络地址)
上节课我们使用docker-compose 启动容器 没有做任何设置 可以看到会自动帮我们设置一个mycompose_default的名字 这个部分是可以自定义的 当我们创建并且启动时候会自己创建一个网络 这个时候 下面看下通过单独的命令怎么去启动创建一个网络并且自己设置子网产生一些ip
image.png

首先停掉我们启动的三个容器
image.png

把这三个容器不加入默认的mycompose_default中 而是我们自己创建的网络中
image.png

创建一个网络(一般需要指定子网)
下面看下子网
设置子网后可以自动帮我们计算有效ip(第一个及最后一个)
image.png

通过这个工具可以算出有效ip个数
我们在启动容器时候可以自己指定ip(如果不指定 则默认分配里面的ip)
下面查看下我们创建的网络mynginx
image.png

image.png

可以发现子网地址是我们指定的 containers里面什么都没有 因为当前没有任何容器加入到该网络里
我们可以使用命令的方式启动容器 加入网络配置参数
但是上节课我们学到了docker-compose方式启动容器
所以使用docker-compose
image.png

需要对compose配置文件进行网络设置 这里面可以自动创建的 不需要我们在外部手动创建 今天我们先演示下在外部创建好了 然后我们在配置文件去启用并且映射它
下面修改下docker-compose.yml
image.png

其中我们的外部网络mynginx一定要存在 networks下面的name名字mynginx-net和services里面的容器部分的networks名字相同
由于我们使用的是外部容器 所以不需要使用up命令重新创建容器删除容器启动容器 我们可以直接使用start来进行启动
image.png

image.png

可以发现出现了三个容器 加入的不是默认的网络 而是加入到了我们新建的自己的 ip变成192.128.0.4
然后我们再次进入容器内部
image.png

image.png

image.png

外部可以访问 容器之间可以互通 到这一步 我们可以自行来完成一个nginx的基本配置
image.png

你可能感兴趣的:(Docker network入门、简配容器网络、容器间互相访问)