本文介紹自動化部署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