BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Puppet发布Blueshift项目中专门针对Docker的特性

| 作者 John Okoro 关注 1 他的粉丝 ,译者 谢丽 关注 11 他的粉丝 发布于 2016年7月23日. 估计阅读时间: 10 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

Blueshift项目为背景,Puppet新增了一组Docker镜像,用于运行发布到Docker Hub的Puppet软件。

这些新Docker镜像的例子里包含一个让用户可以运行Puppet Server(可以独立运行,也可以和PuppetDB同时运行)的Puppet Server镜像和一个附带PostgreSQL镜像的PuppetDB镜像。其中还包含两个代理镜像,一个基于Ubuntu Xenial Puppet代理程序包,另一个基于简化版的Alpine

Blueshift演示了异构软件管理问题的解决方案,使用Puppet作为新软件栈的统一管理方式。Blueshift包含Puppet社区中关于如何集成ConsulCoreOSMesos等技术的信息。Blueshift还包含Puppet的内部工程。

Puppet还提供了如何在Docker中使用Puppet的例子。目前,这些例子展示了如何在VMware Photon OS、Red Hat CentOS Atomic上的Docker容器中和CoreOS上使用Puppet。还有例子展示了如何使用Docker Compose搭建一个Puppet基础设施。

Blueshift项目的一个例子中,Gareth Rushgrove演示了如何使用Puppet管理Docker容器。Puppet Docker模块大约是和Docker同时发布的,自此以后,社区一直致力于这方面的工作。

第一步是安装Puppet Docker示例模块:

# puppet module install garethr-docker

简单来说,Docker模块允许你使用清单文件中的一行代码安装Docker:

include 'docker'

你可以在清单文件中声明任意多的镜像。这个例子使用了一个Ubuntu镜像:

docker::image { ‘ubuntu':
  image => 'trusty',
}

这些简单的Docker容器现在可以通过Puppet轻松地应用了。Docker version会显示Docker已经安装了,并且会显示详细的版本信息:

# puppet apply /vagrant/docker_example.pp

# docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client):a8a31ef
OS/Arch (client): linux/amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.4.1
Git commit (server): a8a31ef
#

Docker ps会显示当前没有任何东西在运行:

# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#

Docker images会显示Docker镜像已经创建:

# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
Ubuntu trusty d0955f21bf24 3 weeks ago 188.3 MB
Ubuntu trusty-20150320 d0955f21bf24 3 weeks ago 188.3 MB
Ubuntu latest d0955f21bf24 3 weeks ago 188.3 MB
Ubuntu 14.04 d0955f21bf24 3 weeks ago 188.3 MB
Ubuntu 14.04.2 d0955f21bf24 3 weeks ago 188.3 MB #

Docker模块支持运行和管理各种Docker容器。容器可以在主机的init系统(如systemdsysvinit)下运行,也可以使用Docker内置的进程管理器。下面的代码增加了两个简单的Docker run资源:

docker::run { 'helloworld':
  image   => 'ubuntu',
  command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
}

docker::run { 'goodbyecruelworld':
  image   => 'ubuntu',
  command => '/bin/sh -c "while true; do echo goodbye cruel world; sleep 1; done"',
}

使用puppet apply,我们可以快速将更新应用到这两个将要在Docker容器中运行的服务上。现在,Docker ps会显示,当前有两个简单的服务正在运行:

# Puppet apply /vagrant/docker_example.pp
Notice: Compiled catalog for localhost in environment production in 0.93 seconds
Notice: /Stage[main]/Main/Docker::Run[helloworld]/File[/etc/init.d/docker-helloworld]/ensure: created
Notice: /Stage[main]/Main/Docker::Run[helloworld]/Service[docker-helloworld]/ensure: ensure changed ‘stopped’to ‘running’
Notice: /Stage[main]/Main/Docker::Run[goodbyecruelworld]/File[/etc/init.d/docker-goodbyecruelworld]/ensure: created 
Notice: /Stage[main]/Main/Docker::Run[goodbyecruelworld]/Service[docker-goodbyecruelworld]/ensure: ensure changed ‘stopped’ to ‘running’
Notice: Finished catalog run in 1.11 seconds

# docker ps 
CONTAINER ID   IMAGE      COMMAND               CREATED         STATUS         PORTS  NAMES
27b9ca786f9b   ubuntu:14.04 “/bin/sh -c ‘while t  18 seconds ago  Up 17 seconds         jolly_wright
4ec0c0225714   ubuntu:14.04 “/bin/sh -c ‘while t  18 seconds ago  Up 17 seconds         focused_wright
#

使用docker attach和容器ID连接到其中一个服务上会显示正在Docker中执行的服务:

# docker attach 27b9ca786f9b
goodbye cruel world
goodbye cruel world
goodbye cruel world 
^C#
#
# docker attach 4ec0c0225714
hello world
hello world
hello world 
^C#
# 

Docker模块还支持类似挂载卷、设置环境变量、运行特权容器和暴露端口这样的动作。Puppet还可以使用docker exec特性在运行中的容器环境中执行命令:

docker::exec { 'helloworld-uptime':
  detach => true,
  container => 'helloworld',
  command => 'uptime',
  tty => true,
}

查看英文原文:Puppet Releases Docker-Focused Features in Project Blueshift

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT