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
相關文章
相關標籤/搜索