天天看點

Docker容器技術-自動化部署

本文介紹自動化部署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 '[email protected]'
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 '[email protected]'
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

繼續閱讀