接着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@if140
和veth3ed01fc@if142
,并且是由docker0
创建的,注意docker0
的IP为172.17.0.1
,由此得知,每创建一个容器,docker会相对应的为该容器创建一个类似veth-pair
的映射对,容器共享docker0
的网络,在该网段下的容器都能够相互通信
Docker默认只有三种:
创建容器时指定网络:
查看网络信息:
由于tm3
和tm1
处于不同的网段,所以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 status
为Leader
,即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%2522168623078216800184162743%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168623078216800184162743&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-27-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