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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM