Docker容器技术-自动化部署

一、用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
posted @ 2017-11-07 13:24  BXBZ—边学边做  阅读(5176)  评论(0编辑  收藏  举报