coreos docker centos,支持docker
大家好,coreos docker centos相信很多的网友都不是很明白,包括支持docker也是一样,不过没有关系,接下来就来为大家分享关于coreos docker centos和支持docker的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
Docker 引擎的 Swarm 模式:入门教程
Swarm,其名听起来仿佛是朋克摇滚乐队的标志,但实际上它是一个新的编排机制,或说是对Docker现有编排系统的改进。从1.12版本开始,Docker引擎集成了一个原生实现,使得创建Docker集群变得更加无缝。这就是撰写本文的原因所在。
在本文中,我们将探索编排后Docker所能实现的功能。本文并非旨在涵盖所有细节,也并不追求对Swarm的全面理解,而是旨在带领你开始你的集群之旅。跟随我的引导,让我们开始吧。
概述
我们已经熟悉了Docker,现在我们想要更多的服务器作为Docker主机,同时希望它们能够作为逻辑实体的一部分协同工作。也就是说,我们希望构建一个集群。
我们从单主机集群开始。在单主机上初始化Swarm集群时,这台主机将成为集群的管理者(manager)。从技术角度来看,它将成为共识组(consensus group)中的一个节点(node)。其背后的数学逻辑基于Raft算法。管理者(manager)负责调度任务。具体的任务则由加入Swarm集群的工作者worker节点执行。这些操作由Node API管理。尽管我讨厌使用API这个词汇,但在这种情况下,我必须使用它。
Service API是这个实现的第二个组件。它允许管理者(manager)节点在所有Swarm集群节点上创建一个分布式的服务。这个服务可以被复制(replicated),这意味着它会被平衡机制分配到集群中(replicated模式,多个容器实例将自动调度任务到集群中的一些满足条件的节点),或者可以分配给全局(global模式),即每个节点都会运行一个容器实例。
此外,还有更多需要考虑的内容,但这些信息已经足够你开始尝试。现在,让我们开始实际操作。我们的目标平台是CentOS 7.2,有趣的是,在我撰写本文时,其软件仓库中只有1.10版本的Docker,因此必须手动更新以使用Swarm。我们将在后续教程中讨论这个问题。接下来,我们还将有一个跟进指南,其中涵盖如何将新的节点加入我们现有的集群(即刚刚建立的单节点集群),并且我们将使用Fedora进行一个非对称配置。请确保正确的配置已经就位,并有一个工作的集群启动并正在运行(第一个节点的Docker已经安装并已进入Swarm模式,但这里并未详细介绍如何初始化Swarm集群,不过别担心,下章将解释)。
配置镜像和服务
我将尝试配置一个负载均衡的Apache服务,并使用多个容器实例通过唯一的IP地址提供页面内容。这是一个标准的负载均衡网页服务器的例子,同时也突出了使用集群的主要原因:可用性、冗余、横向扩展以及性能。当然,你还需要考虑网络和存储,但这些超出了本文涉及的范围。
这个Dockerfile模板其实可以在官方镜像仓库的httpd中找到。你只需一个最简单的设置来起步。至于如何下载或创建自己的镜像,请参考我的入门指南,链接可以在本文的顶部找到。
镜像创建
在继续下一步之前,你应该确保能够无错误地启动一个容器实例并能链接到这个网页服务器上(使用下面的命令)。一旦你确保能够连接,我们就可以开始创建一个分布式的服务。
将这个IP地址输入浏览器,看看会出现什么。
Swarm初始化和配置
下一步就是启动Swarm集群。你需要这些基础命令来开始,它们与Docker博客中的例子非常相似:
这里我们做了什么?我们创建了一个叫做frontend的服务,它有五个容器实例。同时我们还将主机的80端口和这些容器的80端口相绑定。我们将使用刚刚新创建的Apache镜像来做这个测试。然而,当你在自己的电脑上直接键入上面的指令时,你将看到下面的错误:
这意味着你没有将你的主机(节点)配置成一个Swarm管理者(manager)。你可以在这台主机上初始化Swarm集群,或者让它加入一个现有的集群。由于我们目前还没有一个现成的集群,我们将初始化它(即初始化Swarm集群并使当前节点成为manager):
为了向这个Swarm集群添加一个工作者worker,请执行下面的指令:
为了向这个Swarm集群添加一个管理者(manager),请执行docker swarm join-token manager并按照指示操作。
操作后的输出不用解释已经很清楚明了。我们成功的创建了一个Swarm集群。新的节点们将需要正确的令牌token来加入这个Swarm集群。如果你需要配置防火墙,你还需找到它的IP地址和端口。此外,你还可以向Swarm集群中添加管理者节点。现在,重新执行刚刚的服务创建指令:
测试连通性
现在,我们来验证我们的服务是否真的工作了。从某些方面讲,这很像我们在Vagrant和CoreOS中做的事情那样。毕竟它们的原理几乎相同。相同指导思想的不同实现罢了。首先需要确保docker ps能够给出正确的输出。你应该能看到所创建服务的多个容器副本。
我也测试了不同的、非常规的端口,它们都能正常工作。对于你如何连接服务器和收取请求你将会有很多可配置的余地。你可以使用localhost或者Docker网络接口(即默认网桥docker0,其网关为172.17.0.1)的IP地址的正确端口去访问。下面的例子使用了端口1080:
负载均衡服务工作
至此,这是一个非常粗略、简单的开始。真正的挑战是创建一个优化过的、可扩展的服务,但它们需要一个准确的技术用例。此外,你还会用到docker info和docker service(还有inspect和ps)命令来详细了解你的集群是如何工作的。
可能会遇到的问题
你可能会在把玩Docker和Swarm时遇到一些小的问题(也许没那么小)。比如SELinux也许会抱怨你正在执行一些非法的操作(指在强制访问控制策略中没有权限的操作)。然而,这些错误和警告应该不会对你造成太多阻碍。
SELinux警报
docker service不是一条命令(docker service is not a docker command)
当你尝试执行必须的命令去创建一个复制模式(replicated)的服务时,你可能会遇到一条错误说docker:'service' is not a docker command。这表示你的Docker版本不对(使用-v选项来检查)。我们将在将来的教程讨论如何修复这个问题。
docker service create--name frontend--replicas 5-p 80:80/tcp my-apache2:latest docker:'service' is not a docker command.
docker tag无法识别(docker tag not recognized)
你也许会看到下面的错误:
docker service create-name frontend-replicas 5-p 80:80/tcp my-apache2:latest Error response from daemon: rpc error: code= 3 desc= ContainerSpec:"-name" is not a valid repository/tag
关于这个错误已经有多个相关的讨论和帖子了。其实这个错误也许相当无辜。你也许是从浏览器粘贴的命令,在浏览器中的横线也许没被正确解析(笔者注:应该用--name而不是-name)。就是这么简单的原因所导致的。
扩展阅读
关于这个话题还有很多可谈的,包含1.12版本之前的Swarm集群实现(即旧的Swarm集群实现,需要Consul等应用提供服务发现),以及当前的Docker版本提供的(即新的Swarm集群实现,亦被称为Docker引擎的Swarm模式)。也就是说,请别偷懒花些时间阅读以下内容:
总结
你总算看到这里了。到这里仍然无法保证你学到了什么,但我相信你还是会觉得这篇文章有些用的。它涵盖了一些基础的概念,以及一个Swarm集群模式是如何工作的以及它能做什么的概述,与此同时我们也成功地下载并创建了我们的网页服务器的镜像,并且在之后基于它运行了多个集群式的容器实例。虽然我们目前只在单一节点做了以上实验,但是我们将在将来解释清楚(以便解释清楚多节点的Swarm集群操作)。并且我们解决了一些常见的问题。
我希望你能认为这篇指南足够有趣。结合着我过去所写的关于Docker的文章,这些文章应该能给你一个像样的解释,包括:怎么样操作镜像、网络栈、存储、以及现在的集群。就当热身吧。的确,请享受并期待在新的Docker教程中与你见面。我控几不住我记几啊。
祝你愉快。
通过:dedoimedo.com/computers...
作者:Dedoimedo译者:Viz校对:wxy
本文由LCTT原创编译,Linux中国荣誉推出
Docker 的 Image 太大,怎么变小
大家可以慢慢体会以上对话。但无论怎样,对于已经投入 SSD怀抱的同学们来说,要在宝贵的SSD上存放50个大小为800MB左右不等的Docker Image是绝对不可以接受的!!但偏偏从 Docker Hub上下载到的Image,大部分都是这个数字,甚至远大于这个。看着逐渐被Docker侵蚀的磁盘空间,楼主决定给Docker文件进行大瘦身。结果发现效果很显著,请看下图
颤抖吧,凡人!100MB的 Redis压缩到只有7MB!!!
首先纠正一下基本概念:
1. Docker不是虚拟机(切记)
2. Docker里面的程序运行时不需要完整的操作系统!
3. CoreOS,RHEL, Ubuntu, CentOS,等等等,它们都是一个操作系统!
怎么做到的,基本就是以下几个步骤
1.使用 Busybox的 Install命令创建一个最小化的系统环境
2.删除不必要的各种系统文件,具体哪些是不必要的,那就得需要具体程序具体分析,楼主花了大量时间来分析每个程序,现在楼主几乎可以把这些APP的依赖项倒着背出来。
3.将这些文件打包成 rootfs.tar
4.使用 Dockerfile的 ADD指令用 rootfs.tar生成 Image
楼主不码字了,开始码代码,
1.基于 Redis 2.8.13,生成一个最简 rootfs.tar
Dockerfile
2.使用这个 rootfs.tar生成最小的Redis镜像文件
Dockerfile
3.运行一下试试
docker run--rm-it-p 6379:6379 microbox/redis
这个方法生成出来的镜像和普通的redis镜像没有任何区别,尽情使用,楼主已经先行释放了30GB的空间了。
CoreOS,一款 Linux 容器发行版
CoreOS是款最新Linux发行版,具备自动升级内核软件与全面管理集群配置的功能。选择Linux服务器系统的争论中,如CentOS、Fedora与Ubuntu等,如今,CoreOS加入竞争。它采用不同于传统Linux发行版的独特实现方式。
为什么选择CoreOS?CoreOS控制发行版升级,基于ChromeOS代码集成Docker与潜在核对/修复功能,无需停止或重启进程,即可在线升级。测试版本已支持此功能,前所未闻。
CoreOS自α测试阶段起,在硅谷车库中发展,四年间稳定成长。在2017年CoreOS大会上,它已支持谷歌云、IBM、AWS与微软服务,超过1000名开发人员参与项目,感到荣幸。
CoreOS设计为容器轻量级Linux发行版,最初是Docker平台,随着时间推移,它在容器领域独辟蹊径,支持Docker外的容器rkt。不同于其他Linux发行版,CoreOS没有包管理器,而通过Google ChromeOS自动升级软件,增强集群安全性与可靠性。操作系统升级组件与安全补丁定期推送到CoreOS容器,无需系统管理员干预。
CoreUpdate与Web界面允许修改推送周期,控制机器更新时间与集群更新速度。etcd分布式配置服务为Linux集群容器提供配置共享与服务发现功能。服务器下线升级时,发起领袖选举,确保系统与容器应用持续运行。
CoreOS集群管理采用fleet方法结合etcd与systemd,尽管fleet仍在使用,但CoreOS已将etcd整合到Kubernetes容器编排系统中,构成更强大的管理工具。通过cloud-config管理网络配置、用户账号与systemd单元。
CoreOS可自行升级至最新版本,提供从单独系统到集群的完全控制。无需在每台机器上运行Chef改变单一配置。如果扩展DevOps控制,CoreOS轻松部署Kubernetes。
CoreOS设计易于部署、管理和运行容器,RedHat家族的原子项目同样能达到类似效果,但CoreOS从诞生之日起即为容器设计。容器与Docker在商业系统中逐渐流行,CoreOS适合裸机硬件、虚拟机或云端环境。
如有任何CoreOS观点或问题,欢迎留言讨论。如文章有用,分享给他人。感谢Steven J. Vaughan-Nichols为IT领域的贡献,他的见解不代表Linode公司,衷心感谢。了解更多关于他,请关注Twitter@sjvn。