容器生态系统,包括核心技术,平台技术和支持技术。
容器核心技术,包括容器规范,容器runtime,容器管理工具,容器定义工具,容器OS,Registries。
容器核心技术使得容器能够在单个host上运行,容器平台技术能够让容器作为集群在分布式环境中运行。
容器编排引擎就是docker swarm 和 k8s,容器管理平台就是rancher。
Rancher 是一个 Kubernetes 管理工具,让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托管服务提供商的集群,创建节点并安装 Kubernetes,或者导入在任何地方运行的现有 Kubernetes 集群。 Rancher 基于 Kubernetes 添加了新的功能,包括统一所有集群的身份验证和 RBAC,让系统管理员从一个位置控制全部集群的访问。 此外,Rancher 可以为集群和资源提供更精细的监控和告警,将日志发送到外部提供商,并通过应用商店(Application Catalog)直接集成 Helm。如果你拥有外部 CI/CD 系统,你可以将其与 Rancher 对接。没有的话,你也可以使用 Rancher 提供的 Fleet 自动部署和升级工作负载。 Rancher 是一个 全栈式 的 Kubernetes 容器管理平台,为你提供在任何地方都能成功运行 Kubernetes 的工具。
容器对外提供的技术能力,包括容器网络,服务发现,监控,数据管理,日志管理,安全。
虚拟机提供整台机器(服务器)的虚拟化。虚拟机模拟物理机的硬件组件,例如 CPU、内存、网络接口卡、USB 控制器和声卡。您可以在虚拟环境中运行客户机操作系统和多个应用程序。 Docker 允许您在任何操作系统上运行应用程序。它采用隔离的用户空间实例,称为容器。
docker使软件具有超强的可移植能力,轻量级,可移植,自包含。
容器优势:build once,run anywhere,configure once,run anything
升级了docker版本,发现在构建镜像过程中,docker没有输出echo, ls, pwd等类似命令的类容,并且没有输出构建过程。老版本的docker则没有这个问题(具体哪个版本没有深究)
2. 解决方案
2.1. 方案一 (不推荐)
增加DOCKER_BUILDKIT参数,譬如这么执行构建命令:DOCKER_BUILDKIT=0 docker build .
2.2. 方案二 (强烈推荐)
增加--progress=plain参数,譬如这么执行构建命令:docker build --no-cache --progress=plain .
环境:172.16.7.151 CentOS 7.0 主机名:node1
[root@node1 ~]# docker run -d -p 5000:5000 --name wisedu_registry registry:2
本地push镜像到registry仓库:
[root@node1 ~]# docker pull ubuntu:16.04
[root@node1 ~]# docker tag ubuntu:16.04 localhost:5000/my-ubuntu
[root@node1 ~]# docker push localhost:5000/my-ubuntu
删除本地的ubuntu:16.04和localhost:5000/my-ubuntu镜像:
[root@node1 ~]# docker image remove ubuntu:16.04
[root@node1 ~]# docker image remove localhost:5000/my-ubuntu
从本地registry中拉取 localhost:5000/my-ubuntu 镜像:
[root@node1 ~]# docker pull localhost:5000/my-ubuntu
但是这种registry只是本地能使用,我们找另外一台主机172.16.7.152往该registry中push镜像就不行,需要HTTPS。
详见:
https://www.cnblogs.com/zhaojiankai/p/7813969.html
容器的生命周期依赖于启动时执行的命令,只要命令不结束,容器也就不会退出。
connect/docker server/join
docker-proxy 通过 iptables 实现了 nat 转发
volume数据放在host里
volume数据放在container里
docker 不会消除bind mount,删除数据的工作只能由host负责,对于docker manged volume,需要docker rm时带上-v参数,如果没用其他容器使用这个volume,就会删除容器的同时一并删除这个volume。
1》 Docker Compose:单机,是用来组装多容器应用的工具,可以在 Swarm集群中部署分布式应用。 2》 Docker Machine:是支持多平台安装Docker的工具,使用 Docker Machine,可以很方便地在笔记本、云平台及数据中心里安装Docker。 3》 Docker Swarm:集群,是Docker社区原生提供的容器集群管理工具
它们可以说是几乎实现了容器化技术中所有可能需要的底层技术手段。
前面我们已经学习过使用一个Dockerfile
模板文件,可以很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器或者缓存服务容器,甚至还包括负载均衡容器等。Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。所以只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
负责在多种平台上快速安装 Docker 环境 创建docker虚拟机
ssh-copy-id -i .ssh/id_rsa.pub 用户名字@http://192.168.x.xxx
有问题就查看:tail /var/log/secure -n 20
create前-D 可以debug
Swarm 集群 docker环境的集群 docker虚拟机的集群
可以看到有很多网络方案,那如此众多的方案是如何与docker集成在一起呢?答案就是libnetwork和CNM。
这里只学一个flannel就完了,既有overlay的网络模型,也有underlay的纯三层。
flannel是centos开发的容器网络解决方案,flannel为每个host分配一个subnet,容器从此subnet中分配ip,这些ip可以在host间路由,容器无须nat和port mapping就可以跨主机通信。每个subnet都是从更大的IP池划分,每个host上运行的flanneld的agent去从池子中划分subnet,然后为了各个主机间共享信息,会使用到etcd。数据包在各个主机转发使用的是backend实现,最常用的是vxlan和host-gw。
mkdir -p /tmp/etcd-download-test
tar xzvf etcd-v3.5.15-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version
/tmp/etcd-download-test/etcdutl version
# start a local etcd server
/tmp/etcd-download-test/etcd -listen-client-urls http://192.168.134.31:2379 -advertise-client-urls http://192.168.134.31:2379&
# write,read to etcd
/tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
/tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
mkdir -p /tmp/flannel-download-test/
tar xzvf flannel-v0.25.5-linux-amd64.tar.gz -C /tmp/flannel-download-test
/tmp/flannel-download-test/flanneld -etcd-endpoints=http://192.168.134.31:2379 -iface=eth0 -etcd-prefix=/docker-test/network
就是这种感觉:
设置两边host的默认网桥地址
vim /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker.service
这里遇到一个小问题,修改docker.service文件不生效问题,原因应该是第二台主机使用的是docker machine安装,所以docker.service.d目录下会生成一个10-machine.conf的配置,因此它会优先加载docker.service.d中的启动项,我把这个目录删除就可以了:
就是这种感觉:
可见,同主机的还是通过docker0进行转发,跨主机的使用flannel.1转发
Prometheus提供了一整套解决方案,包括数据的采集,存储,处理和可视化,告警,灰常牛。架构如下:
host上安装node expoter进行数据采集
配置Prometheus server
也可以自定义一个采集器exporter,client library一大堆,什么语言都有:
https://blog.csdn.net/m0_62856417/article/details/139351251
FileBeat导入容器日志到ELK
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。