加入docker管理员
在短短两年内,将Docker用作应用程序容器管理系统已成为开发人员和系统工程师的标准做法。 有人喜欢说,自OpenSSH以来,还没有看到这样的技术进步。 Docker现在是主要参与者,并广泛用于云系统架构中。 不仅如此:Docker知道如何赢得开发者的青睐。
让我们看一下对Docker所做的概述,以及对未来和即将出现的竞争的评估。
Docker是使用libcontainer的微容器管理工具。 Docker由所罗门·海克斯(Solomon Hykes)在Go中开发,于2013年成为开源软件,并很快被主要客户采用。 该工具的灵活性改变了游戏规则。
在其到达之前,创建应用程序容器需要掌握相对高级的概念。 LXC已经开始抢占最大份额,为“纯虚拟化”解决方案提供了一笔可观的收入。 OpenVZ和Xen也起到了一定作用。 但是这些系统主要是为服务器解决方案设计的,需要大量的配置工作。
让我们清楚一点:Docker不能替代LXC,OpenVZ或Xen。 它不是KVM,VirtualBox和VMWare的虚拟化解决方案。 Docker具有另一种愿景,另一种操作方法,并且不能达到完全相同的目的。
像OpenVZ,Xen和LXC一样,Docker使用rootfs
原理,仅是根文件系统。 它使用树结构作为远程系统的根(就像chroot一样),并提供网络层和设置系统。 但它也有其不同之处。
首先,使用联合安装文件系统(如aufs,devicemapper等)将其映像和容器分层。 一方面,这节省了磁盘空间,但也使得无需复制整个根即可快速构建容器。
另一个区别是Docker避免了来宾系统的初始化阶段。 换句话说,容器的根仅用作目标应用程序的环境。
最后,Docker标配了管理映像版本控制注册表的功能。 默认情况下,使用公共注册表。 该注册表提供大量现成的图像(官方图像或社区中用户提交的图像),以及可以收费使用的私人空间。 从理论上讲,Docker与Git非常相似,其Hub可以与GitHub之类的服务进行比较。 它还使用了常见的概念,例如提交,标签和远程注册表服务器。
该社区一直活跃在该项目周围,为自动启动(图,现在为Docker Compose)或简化云集成和管理流程(CoreOS)的工具,监视工具(cAdvisor)提出了建议。
如今,Docker席卷了IT世界。 OpenStack,Amazon,Google,CoreOS等:如果尚未将其与基础架构集成,他们都在研究该技术。
但是竞争来了!
Docker的主要吸引力无疑是其创建容器来管理微服务的简便性 。 首先,容器是一种完全隔离应用程序的方法。 借助其libcontainer库,Docker通过管理cgroup使用了内存和进程隔离。
除非明确要求,否则Docker不会在主机上打开端口。 如果两个容器需要通过IP层进行通信,则可以将它们链接在一起,以便这两个实例可以使用名称而不是IP地址进行通信(每次重新启动容器时,它们可能会更改)。
Docker因其所使用的低级资源,其卷管理和其联合安装文件系统而在云中变得非常流行, 从而减少了所需的磁盘空间 。 在研究Docker的工作原理时,您意识到创建可伸缩和/或高可用性系统非常简单。
实际上,“ docker”命令是与守护程序通信的简单REST客户端。 默认情况下,服务(守护程序)创建一个提供该API的unix套接字(/var/run/docker.sock)。 “ docker”命令仅使用API。
该API可用于侦听事件,例如在创建,启动或停止容器时。 使用此API提供的信息时,可以确定哪个容器在运行哪个服务,在哪个端口上运行等等。
如果您不想或无法使用CoreOS,OpenStack等所需的结构,则可以相对轻松地创建自己的体系结构和工具。 该API相当易于访问且非常有效。
这是我们的一个项目中使用的体系结构示例。
在这种安排下:
每个物理从服务器都有一个侦听服务,该服务侦听Docker套接字。
当容器启动或停止时,服务会将信息发送到主服务器。
然后,主服务器可以采取适当的措施,例如,通过修改nginx服务器的配置,或删除/删除上游服务器。
另一个选择是更改Docker的配置,以便可以以TCP模式访问API(使其可以通过网络访问)。 在这种特定情况下,小型客户端连接到所有从属服务器,并侦听其所有事件。 否则,原理与上述相同:每个事件都将允许在nginx中添加或删除上游服务器(例如)。
此处的区别在于,主机必须处理与所有从机的所有连接。 前一种方法成本较低,因为从属设备是连接到主设备的设备。
在这两种情况下,每次容器启动或停止时都会通知主服务器,并且可以修改主Nginx服务器,重新启动容器或防止发生事件。
当然也可以设置两个主服务器进行故障转移管理。 该解决方案适应性强,易于维护。
没错,Docker非常适合系统管理员。 但是它对于生产(即对开发人员)也可能非常有用。 我们为客户使用的一种解决方案是Dockerfile和docker-compose文件的组合 (用于Docker检索fig项目)。
这个想法是要定义开发人员的工作站运行项目所需的内容,然后创建将根据约束构建映像的Dockerfile(如果需要),以及链接容器的docker-compose.yml文件。
然后,在使用版本控制服务器(Git,Mercurial,SVN等)时,只需设置项目目录以包括那些文件和项目的源代码,并指定要馈送到容器的卷。 接下来,团队检索项目,启动服务所需的唯一命令是“ docker-compose up”。
让我们以Drupal项目为例。 可以使用两个容器:
一个MySQL容器;
一个带有Apache + PHP模块的容器。
Drupal的源代码放在“ / src”中,并发送到Apache容器。 这是卷的原理:主机上的本地目录或文件可以附加到特定目录中的一个或多个容器。 然后,对MySQL存储目录执行相同的操作,以免丢失保存到数据库的记录。
Dockerfile例如可以是:
FROM debian:7
MAINTAINER [email protected]
# Install software
RUN apt-get update && apt-get install apache2 php5 php5-mysql libapache2-mod-php5
# Start Apache
CMD /usr/sbin/apache2ctl -D FOREGROUND
还有docker-compose.yml文件:
网络:
dockerfile :。
数量:
-“ ./src:/var/www/drupal
端口:
-“ 8080:80”
链接:
- “D b”
D b:
图片:mysql
数量:
-“ ./data:/var/lib/mysql”
“ Web”服务链接到“ db”(请参见上例中的“ links”指令),因此可以读取提供MySQL地址和端口(在其Dockerfile中提供)的环境变量。
例如,在这里,可以在“网络”容器中访问以下变量:
DB_PORT_3306_TCP_ADDR=172.17.1.24
DB_PORT_3306_TCP_PORT=3306
也可以使用解析的容器名称,并且“ web”和“ db”被视为两个容器中的计算机名称。
换句话说,地址“ mysql:// db”被解析。 然后,您只需要修改Drupal配置文件来访问数据库,就可以完成工作。 该项目将具有以下结构:
为了使示例简单,我们没有提到Apache配置文件也是与容器共享的卷。 最终结果是Web服务器的配置是可修改的。
您还将注意到端口绑定也已处理。 因为开发人员不一定具有使用端口80的权利,所以我们将本地端口8080映射到Apache容器的端口80。开发人员只需要访问127.0.0.1:8080即可查看正在运行的Drupal实例。
要了解这种连接,请看下面的图。
看起来Docker似乎孤零零地在其赞誉中如鱼得水。 但是请记住,Docker使用libcontainer和cgroups,这意味着,要能够使用这些内核功能,该服务必须作为根运行。 这可能被利用。
尽管它明显吸引了这项技术,但实际上这是CoreOS和其他人对Docker的批评,这使CoreOS可以创建当今最著名的云系统之一。 Docker需要root权限才能与cgroup交互。 但是,作为根用户运行的服务可能会在系统中造成漏洞。
Docker的开发团队做出了礼貌的回应。 显然,将来的升级将考虑到该问题,并且将对所有纠正这些缺陷(到目前为止尚未引起任何特定问题)的建议进行研究。 但是不要惊慌:利用此缺陷的可能性相对较低。 迄今为止,唯一被利用的故障可追溯到2014年的版本(1.0),并已被插入。
简而言之,CoreOS决定创建自己的名为Rkt(发音为“ rock-it”)的容器系统(可以使用Docker映像)。 但是,没有什么可以阻止您继续将Docker与CoreOS解决方案一起使用。 Rkt只是在LinuxContainers(LXC背后的伞项目)与Canonical合作公布LXD的开发时才宣布的。
如您所见,容器管理已准备就绪,可以尽可能地靠近内核,从而提高性能水平。
时间越长,就越需要更多的容器。
但是Windows和OS X呢? 对于OS X,没有公告,也没有现有产品。 因此,使用boot2docker (为运行Docker而创建的虚拟机)不是可选的。 Windows也暂时需要boot2docker,尽管最近的公告暗示可能看到在Microsoft操作系统上运行的容器。 未完待续...
显然,Docker是一种既适合开发又适合系统管理的技术。 它对简化和性能的贡献以及它的适应性,使得以以前无法访问的方式轻松设置服务成为可能。 无论您的基础架构大小如何,Docker都可以为您提供选择。
但是它的优势也可以用于生产。 开发正变得标准化,开发人员与系统之间的界线越来越细。 下一版本将带来多大的发展以及竞争对手将提供什么,还有待观察。
目前,Docker仍是该领域的王者。
翻译自: https://opensource.com/business/15/7/how-get-systems-administrators-and-developers-agree
加入docker管理员