zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    新一代MQ apache pulsar的架构与核心概念
    Flutter使用fluwx实现微信分享
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
    Codeforces 873F Forbidden Indices 字符串 SAM/(SA+单调栈)
    Codeforces 873E Awards For Contestants ST表
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/7798336.html
Copyright © 2011-2022 走看看