Docker容器技术-自动化部署

1、用Chef自动化部署Docker

1.为何须要自动化部署?node

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

2.Docker的配置管理nginx

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

3.使用Chef
(1)安装docker-engine软件包示例web

package 'docker-engine' do
  action :install
end

(2)Chef环境部署
A. 注册Chef服务器
Chef服务器包括cookbook、策略、Docker宿主机的元信息docker

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

B. 搭建工做站
与Chef服务器进行交互。
Chef资源库包含了全部须要交互的信息而且保持与Chef服务器同步,还保存了私有密钥以及其余须要受权的配置文件。bootstrap

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

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

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

(3)配置Docker宿主机ssh

生成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确认工做正常

2、其余可选方案

  • 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
相关文章
相关标签/搜索