Docker-进阶(容器网络、compose、harbor、swarm)

接着Docker-入门,上次了解了Docker的基本命令,镜像容器操作,自定义镜像两种方式(容器和DockerFile),数据卷实现容器数据持久化和容器间数据共享,都是日常工作中最常用的。

执行命令:

网卡类型:

  • lo:本地网卡
  • ens33:连接网络的网卡
  • docker0:docker的网卡

网卡信息:

  • 状态:UP/DOWN/UNKOWN等
  • link/ether:MAC地址
  • inet:绑定的IP地址

为网卡添加IP:

删除网卡ip:

network namespace能创建多个隔离的网络空间,每个空间拥有独立的网络信息。是实现网络虚拟化的重要功能

添加命名空间,并查看该空间的网卡信息:

可以看到,创建出的命名空间内,默认本地网卡是停用状态

目前命名空间只有一个本地网卡,并不能和外界进行通讯,包括宿主机。veth pair是一个成对的端口,是命名空间实现外界通讯的桥梁

创建veth pair

veth-ns1分配给ns1空间,并分配IP与启用:

宿主机创建另一个命名空间ns2,并做相同的操作:

ping操作:

官方tomcat镜像不带扩展指令,需要自动搭建tomcat镜像

DockerFile内容,使用ADD将tomcat传入并解压,再安装JDK环境:

构建镜像:

最后创建两个容器:

容器默认使用的是Bridge模式,查看两个容器的IP信息

tm1对外网卡eth0@if141的IP为172.17.0.2,tm2对外网卡eth0@if143的IP为172.17.0.3,并且容器间可以ping通:

查看宿主机IP信息:

发现除了之前的三个网卡外,还多了两个网卡:veth346c0f4@if140veth3ed01fc@if142,并且是由docker0创建的,注意docker0的IP为172.17.0.1,由此得知,每创建一个容器,docker会相对应的为该容器创建一个类似veth-pair的映射对,容器共享docker0的网络,在该网段下的容器都能够相互通信

Docker默认只有三种:

创建容器时指定网络:

查看网络信息:

由于tm3tm1处于不同的网段,所以ping不通:

tm1添加网络,再次尝试ping:

Host模式就是共享宿主机的网络,此时就不需要指定端口映射

浏览器上进行访问:

None模式不能与外部进行通信,只有lo网卡:

一台宿主机可能会部署多个容器,容器还可能有依赖关系,每次都手动启动容器是非常麻烦的,Compose就是定义和运行多容器的工具,使用yml文件配置应用程序需要的所有服务,使用docker-compose up命令创建并启动所有服务

直接通过yum安装:

内容为:

内容为:

内容为:

内容为:

等待镜像拉取等操作完成后,出现如下输出,说明启动成功:

另开终端查看docker镜像和容器信息:

浏览器访问:

常用的如下:

docker compose命令都需要在工作目录下进行,如上述的composetest目录下

创建目录:

docker-compose.yml文件:

一键启动:

浏览器访问:

水平扩展也很简单,一条命令即可:

运用:

Harbor是私有的镜像仓库,实际开发项目中,必然有自己打包的镜像,需要上传到仓库,以便于其他开发和运维人员拉取,首先来看下如何上传到Docker Hub

输入账号密码后提示登陆成功:

上传到docker hub有一个规则,即镜像名需要包含账号id(账户名),具体规则为:userId/镜像名

可以通过命令修改:docker tag 新镜像名 原镜像名

修改镜像名后,上传:

上传成功后,就可以在docker hub上搜索到了:

创建完成后会有提示如何使用:

根据提示操作即可

登录:

重命名镜像:

上传镜像:

下载后,传入linux系统,进行解压:

修改配置文件:

修改如下3处,换成自己对应的IP:

harbor内部使用nginx反向代理和https,所以要配置CA签名证书

3.2.1 生成CA证书

3.2.2 生成服务器公私钥

3.2.3 生成一个x509 v3扩展文件

  • 域名方式:
  • IP方式:

3.2.4 生成CA签名证书

3.2.5 将CA签名证书和服务器私钥放入/data/cert/目录

上面我们为harbor准备了证书,同样Docker也需要进行配置,因为Docker是要与仓库进行交互的

3.3.1 CA签名证书类型crt转换为cert

3.3.2 存放到Docker的证书目录

docker需要CA公钥,CA签名证书(cert文件)与服务器私钥:

3.3.3 重启Docker

执行harbor的prepare脚本,为nginx配置HTTPS,此过程会拉取nginx镜像:

执行harbor的install脚本,初始化harbor:

运行harbor

浏览器中访问:

yml中可以找到默认的登录账号密码:admin/Harbor12345

正常登录后:

harbor上创建一个项目:

再创建一个账号:

为该账号赋予管理员权限:

将该账户分配为刚刚创建项目的成员:

Docker登录到harbor:

上传镜像:

等待上传成功后,查看harbor中的镜像仓库:

前面我们了解了Docker容器间通信,使用虚拟网络技术实现,但还有一个问题,对于多台服务器部署的docker容器间通信,该如何实现呢?
Swarm是Docker官方提供的一款集群管理工具,由若干个Docker管理机抽象成一个整体,一个Docker管理机又能集中管理它下面的Docker工作机,功能与k8s类似,但更轻量,功能也比k8s少些

Swarm和Redis集群一样遵循半数原则,超过1/2(包括1/2)个Manager节点挂了,整个集群将不可用

克隆三台虚拟机,分别设置HOSTNAME,以便后续标识

修改/etc/sysconfig/network

内容为:

修改/etc/hosts

追加内容:

另外两台也做相应的配置,只是主机名不同,修改完后重启

Manager节点执行下面命令:

其他节点执行上面的提示命令,加入到集群中:

查看集群节点,可以看到一个manager statusLeader,即Manager节点:

Manager节点可以将Worker节点的类型进行升降级

将一个节点升级为Manager节点:

由于我们只有三个节点,所以要测试集群可用,只能把三个节点都上升为Manager节点,都上升完后,关闭Leader主机后,查看节点状态,发现有一台Worker已经成为Leader节点了:

上面compose可以在一个宿主机上实现水平扩展,Swarm则可以在Docker集群中实现水平扩展,容器是Docker中的叫法,在Swarm中,称为服务Service

Service相关命令如下:

成功后查看服务:

再查看容器信息,发现创建在node2上:

将service扩展到3个:

再次查看容器信息,发现三个节点上都创建了:

如果手动停止或删除容器,或者遇到异常导致服务崩溃退出,Swarm还是会自动创建启动容器,以拉起服务

随便找个节点将tomcat-service容器停止,发现又会有一个新的容器被创建并启动:

Swarm是通过VXLAN(Virtual eXtensible LAN)实现的多机之间的通信,VXLAN(Virtual eXtensible LAN)技术是当前最为主流的Overlay标准,仅仅做了解即可

重新部署一个tomcat服务:

从上面可知,目前服务只部署在一个节点上,Manager节点的IP为:192.168.42.4,使用其他节点IP在浏览器进行访问:

结果发现其他节点同样可以访问,这就是VXLAN实现的,可以通过网络命令查看下:

发现ingress的类型为overlay

原文链接:https://blog.csdn.net/qq_24000367/article/details/127362548?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168994567316800182722850%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168994567316800182722850&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-21-127362548-null-null.268%5Ev1%5Ekoosearch&utm_term=docker%E3%80%81wordpress%E3%80%81wordpress%E5%BB%BA%E7%AB%99%E3%80%81wordpress%E4%B8%BB%E9%A2%98%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享