AIGC在金融场景是如何落地的? 了解详情
写点什么

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

  • 2016-07-22
  • 本文字数:2087 字

    阅读完需:约 7 分钟

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

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

Blueshift 演示了异构软件管理问题的解决方案,使用 Puppet 作为新软件栈的统一管理方式。Blueshift 包含 Puppet 社区中关于如何集成 Consul CoreOS Mesos 等技术的信息。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 系统(如 systemd sysvinit )下运行,也可以使用 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

2016-07-22 19:00982
用户头像

发布了 1008 篇内容, 共 362.8 次阅读, 收获喜欢 335 次。

关注

评论

发布
暂无评论
发现更多内容

【SSM】Mybatis系列——配置解析

胖虎不秃头

mybatis ssm 9月月更

java之面向对象2

喜羊羊

java; 9月月更

一文带你深入掌握ES6 Proxy数据代理

海底烧烤店ai

JavaScript node.js 全栈开发 9月月更

下载量已过亿次!阿里内部不外传秘籍50万字Java面试手册首次开放

钟奕礼

Java 程序员 架构 后端 java面试

【SSM】Mybatis系列——mybatis的简介、环境搭建、CRUD操作

胖虎不秃头

mybatis SSM框架 9月月更

质量问题不是不爆,时候未到

知了一笑

Java 架构 职场

Java 并发:这是你需要的最后一篇文章

Joseph295

安全工作杂想 - 2022.9.12

心在飞

构建自动化运维体系的三大层级

穿过生命散发芬芳

自动化运维 9月月更

【SSM】Mybatis系列——解决属性名和字段名不一致的问题、日志

胖虎不秃头

mybatis SSM框架 9月月更

美团前端面试题(附答案)

hellocoder2029

JavaScript 前端

【云原生】Nacos中的事件发布与订阅--观察者模式

石臻臻的杂货铺

云原生 nacos 9月月更

应届的我,面试37次,16个offer上岸后总结了一些面试心得

收到请回复

Java 项目管理 面试 语言 & 开发 秋招

图灵访谈 | 一位半路出家的程序员的“天命”之选

图灵教育

Java 人工智能 大数据 编程语言 可视化

滴滴前端面试题合集

coder2028

JavaScript 前端

网络协议

想要飞的猪

三次握手 网络协议、 TCP四次挥手

架构师的十八般武艺:测试保障

agnostic

测试

图灵访谈 | 一位半路出家的程序员的“天命”之选

图灵社区

Java 人工智能 大数据 编程语言 可视化

GitHub上标星90k+的《Java知识总结+面试指南》到底有什么魅力?

钟奕礼

Java 程序员 架构 后端 java面试

万字长文带你吃透SpringCloudGateway工作原理+动态路由+源码解析

Java快了!

MySQL必知必会-检索数据

阿柠xn

MySQL sql 数据检索 9月月更

常见的主要监控数据获取方式

阿泽🧸

监控 9月月更

Java之面向对象3(终结篇)

喜羊羊

java; 9月月更

四个小时的轮番轰炸,三面蚂蚁金服,拿到offer的那天我的眼泪止不住的流了下来!

钟奕礼

Java 程序员 架构 后端 java面试

C++学习---变长参数(stdarg.h)的实现原理

桑榆

c++ 源码阅读 9月月更

2022-09-12:以下go语言代码输出什么?A:true;B:false;C:无法编译;D:运行时 panic。 package main func main() { var x chan<-

福大大架构师每日一题

golang 福大大 选择题

面试突击82:SpringBoot 中如何操作事务?

王磊

Java 面试题

到底什么才是完美的回答:什么是事务?

Joseph295

java之面向对象1

喜羊羊

java; 9月月更

Java基础(一)| Java概述与基础语法案例

timerring

Java core 9月月更

关于SpringCloudAlibaba,看阿里这篇笔记真香

程序知音

Java 微服务 阿里 SpringCloud 后端技术

  • 扫码添加小助手
    领取最新资料包
Puppet发布Blueshift项目中专门针对Docker的特性_DevOps & 平台工程_John Okoro_InfoQ精选文章