一、用Chef自动化部署Docker

1.为什么需要自动化部署?

  • Docker引擎需要配置很多参数(cgroups、内存、CPU、文件系统等)
  • 识别Docker容器运行在哪个宿主机上
  • 耗时且容易出错,不易管理

2.Docker的配置管理

  • 从应用开发、演示、测试到部署生产环境,Docker容器可以复制应用程序的全部环境
  • 编译Docker镜像是一种简便使应用程序更新并部署到所有环境中的方法
  • Docker允许团队成员掌握应用程序运行所需要的全部信息,同时可以将必要的变更高效地交付给客户。深入Dockerfile,他们可以知道应用程序的那部分需要更新以及正常运行所需的依赖
  • Docker记录我们对Docker镜像所做的全部环境变更。然后,它通过相应版本的Dockerfile记录,同时记录了变更的内容、变更的操作人以及变更的发生时间。

3.使用Chef

(1)安装docker-engine软件包示例

package 'docker-engine' do
action :install
end

(2)Chef环境部署

A. 注册Chef服务器

Chef服务器包括cookbook、策略、Docker宿主机的元信息

  • 官网创建账号
  • 创建一个组织
  • 点击“Download Starter Kit”下载压缩包

B. 搭建工作站

与Chef服务器进行交互。

Chef资源库包含了所有需要交互的信息并且保持与Chef服务器同步,还保存了私有密钥以及其他需要授权的配置文件。

Chef开发工具包包含了所有与读取chef-repo中配置信息有关的程序。(去官网下载适合的工具包)

C. 启动节点

chef-client负责Chef服务器并下载必要的配置文件,同时将节点配置到预期状态。

  • 在Chef服务器上注册并授权管理当前节点
  • 收集节点上的系统信息用于创建一个节点对象
  • 根据节点需要同步相应的Chef cookbook
  • 通过加载节点所需的recipe来编译资源
  • 执行所有的资源并按照相应的操作去配置节点
  • 报告chef-client的结果给Chef服务器和其他已配置的消息终端
knife bootstrap dockerhost
访问网站确定宿主机已注册成功。

(3)配置Docker宿主机

生成cookbook模板
cd cookbooks
chef generate cookbook dockerhost 编辑cookbook
cd dockerhost
vim metadata.rb
name 'dockerhost'
maintainer 'The Authors'
maintainer_email 'dayun@163.com'
license 'all_rights'
description 'Installs/Configures dockerhost'
long_description 'Installs/Configures dockerhost'
version '0.1.0' depends 'apt', '~> 2.7.0'
depends 'docker', '~> 0.40.3' 开始安装
berks install 编写Chef recipe
vim recipes/default.rb
apt_repository 'docker' do
uri 'http://apt.dockerproject.org/repo'
components %w(debian-jessie main)
keyserver 'p80.pool.sks-keyservers.net'
key '5813fh193f8834fjqewifj9348j34ifjq'
cache_rebuild true
end package 'docker-engine' 应用部署
上传Chef cookbook到Chef服务器
berks upload
通过设置run_list应用dockerhost recipe到节点
knife node run_list set dockerhost dockerhost
在dockerhost中执行chef-client
ssh dockerhost
sudo chef-client

(4)部署Docker容器

解决的问题:

  • 哪些容器需要运行
  • 容器间如何连接
  • Docker容器被部署在哪个宿主机
创建Chef recipe
chef generate recipe . containers
(将在dockerhost目录下创建recipes/containers.rb) 拉取Nginx的Docker镜像
在containers.rb文件中加入如下行:
docker_image 'nginx' do
tag '1.9.3'
end 配置宿主机运行容器
在containers.rb中添加如下行:
node.set['docker']['container_init_type'] = 'systemd' directory '/usr/lib/systemd/system' docker_container 'nginx' do
tag '1.9.3'
container_name 'webserver'
detach true
ort '80:80'
end 发布cookbook,通过metadata.rb中指定信息实现
name 'dockerhost'
maintainer 'the Authors'
maintainer_email 'hdlptz@163.com'
license 'all_rights'
description 'Installs/Configures dockerhost'
long_description 'Installs/Configures dockerhost'
version '0.2.0' depends 'apt', '~> 2.7.0'
depends 'docker', '~> 0.40.3' 更新Berksfile.lock文件来锁定所有将要上传到Chef服务器的cookbook文件版本
berks install 上传cookbook到Chef服务器
berks upload 添加recipes/containers.rb到Docker宿主机的运行列表
knife node run_list add dockerhost dockerhost::containers 重新运行chef-client来更新Docker宿主机配置
ssh dockerhost
sudo chef-client 访问http://dockerhost确认工作正常

二、其他可选方案

  • Puppet
  • Ansible
  • CFEnginc
  • SaltStack
  • Docker machine

云提供商

  • Google Container Engine
  • Amazon EC2 Container Service
  • Azure Docker VM Extension
  • Joyent Elastic Container Service

部署工具

  • Docker Swarm
  • Google Kubernetes
  • CoreOS fleet
  • Mesophere Marathon
  • SmartData Center Docker Engine

Docker容器技术-自动化部署的更多相关文章

  1. 浩若烟海事半功倍|利用Docker容器技术构建自动化分布式web测试集群Selenium Grid

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_195 "世界上有那么多城市,城市里有那么多的酒馆,可她,却偏偏走进了我的-",这是电影<卡萨布拉卡> ...

  2. 如何快速部署 Prometheus?- 每天5分钟玩转 Docker 容器技术(85)

    上一节介绍了 Prometheus 的核心,多维数据模型.本节演示如何快速搭建 Prometheus 监控系统. 环境说明 我们将通过 Prometheus 监控两台 Docker Host:192. ...

  3. ELK 完整部署和使用 - 每天5分钟玩转 Docker 容器技术(90)

    上一节已经部署了容器化的 ELK,本节讨论如何将日志导入 ELK 并进行图形化展示. 几乎所有的软件和应用都有自己的日志文件,容器也不例外.前面我们已经知道 Docker 会将容器日志记录到 /var ...

  4. 部署 Graylog 日志系统 - 每天5分钟玩转 Docker 容器技术(92)

    Graylog 是与 ELK 可以相提并论的一款集中式日志管理方案,支持数据收集.检索.可视化 Dashboard.本节将实践用 Graylog 来管理 Docker 日志. Graylog 架构 G ...

  5. 部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)

    我们将部署三个节点的 Kubernetes Cluster. k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node. 所有节点的操作系统均为 Ubuntu ...

  6. 部署 k8s Cluster(下)- 每天5分钟玩转 Docker 容器技术(119)

    上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署. 安装 Pod 网络 要 ...

  7. 部署 Helm - 每天5分钟玩转 Docker 容器技术(162)

    本节我们将安装和部署 Helm 客户端和 Tiller 服务器. Helm 客户端 通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令: curl http ...

  8. 部署 Prometheus Operator - 每天5分钟玩转 Docker 容器技术(179)

    本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https: ...

  9. Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)

    service 的容器副本会 scale up/down,会 failover,会在不同的主机上创建和销毁,这就引出一个问题,如果 service 有要管理的数据,那么这些数据应该如何存放呢? 选项一 ...

随机推荐

  1. 第二百零一节,jQuery EasyUI,Accordion(分类)组件

    jQuery EasyUI,Accordion(分类)组件 学习要点: 1.加载方式 2.容器属性 3.事件列表 4.方法列表 5.面板属性 本节课重点了解 EasyUI 中 Accordion(选项 ...

  2. 第一百九十节,jQuery,编辑器插件

    jQuery,编辑器插件 学习要点: 1.编辑器简介 2.引入 uEditor 编辑器(Editor),一般用于类似于 word 一样的文本编辑器,只不过是编辑为 HTML 格式的.分类纯 JS 类型 ...

  3. 第一百八十节,jQuery-UI,知问前端--消息提示 UI

    jQuery-UI,知问前端--消息提示 UI 学习要点: 1.HTML 部分 2.CSS 部分 3.jQuery 部分 通过前面已学的 jQuery UI 部件,我们来创建一个注册表单. html ...

  4. Hibernate一对多映射列表实例(使用xml文件)

    如果持久化类具有包含实体引用的列表(List)对象,则需要使用一对多关联来映射列表元素. 在这里,我们使用论坛应用场景,在论坛中一个问题有多个答案. 在这种情况下,一个问题可以有多个答案,每个答案可能 ...

  5. C和MATLAB中:同时对多个变量连续赋值

    C语言中绝对不可以连续赋值!!!这是C语言的基本要求. 可以int a,b,c; a=5;b=5;c=5; 或者int a =5;int b=5;int c=5; 但是! 绝对不可以:int a=b= ...

  6. 从设计到实现,一步步教你实现Android-Universal-ImageLoader-缓存

    转载请标明出处,本文出自:chaossss的博客 Android-Universal-ImageLoader Github 地址 Cache 我们要对图片进行缓存.有两种方式:内存缓存和本地缓存. 这 ...

  7. 【BZOJ4917】Hash Killer IV 乱搞

    [BZOJ4917]Hash Killer IV Description 有一天,tangjz造了一个Hash函数: unsigned int Hash(unsigned int v){     un ...

  8. 关于jquery的取消阻止默认事件

    最近帮朋友做个东西,整个屏幕有一个遮罩层,但是这个遮罩层能滑动,于是百度了一下,返现,用 $('body').bind("touchmove",function(e){ e.pre ...

  9. Velocity模版引擎使用总结

    Velocity是一个基于java的模板引擎.它允许任何人仅仅简单的使用模板语言来引用由java代码定义的对象. 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一 ...

  10. 使用openresty + lua 搭建api 网关(一)安装openresty ,并添加lua模块

    openresty 有点不多说,网上各种介绍,先安装吧. 官方操作在此,http://openresty.org/cn/installation.html, tar -xzvf openresty-V ...