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
Docker容器技术-自动化部署的更多相关文章
- 浩若烟海事半功倍|利用Docker容器技术构建自动化分布式web测试集群Selenium Grid
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_195 "世界上有那么多城市,城市里有那么多的酒馆,可她,却偏偏走进了我的-",这是电影<卡萨布拉卡> ...
- 如何快速部署 Prometheus?- 每天5分钟玩转 Docker 容器技术(85)
上一节介绍了 Prometheus 的核心,多维数据模型.本节演示如何快速搭建 Prometheus 监控系统. 环境说明 我们将通过 Prometheus 监控两台 Docker Host:192. ...
- ELK 完整部署和使用 - 每天5分钟玩转 Docker 容器技术(90)
上一节已经部署了容器化的 ELK,本节讨论如何将日志导入 ELK 并进行图形化展示. 几乎所有的软件和应用都有自己的日志文件,容器也不例外.前面我们已经知道 Docker 会将容器日志记录到 /var ...
- 部署 Graylog 日志系统 - 每天5分钟玩转 Docker 容器技术(92)
Graylog 是与 ELK 可以相提并论的一款集中式日志管理方案,支持数据收集.检索.可视化 Dashboard.本节将实践用 Graylog 来管理 Docker 日志. Graylog 架构 G ...
- 部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)
我们将部署三个节点的 Kubernetes Cluster. k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node. 所有节点的操作系统均为 Ubuntu ...
- 部署 k8s Cluster(下)- 每天5分钟玩转 Docker 容器技术(119)
上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署. 安装 Pod 网络 要 ...
- 部署 Helm - 每天5分钟玩转 Docker 容器技术(162)
本节我们将安装和部署 Helm 客户端和 Tiller 服务器. Helm 客户端 通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令: curl http ...
- 部署 Prometheus Operator - 每天5分钟玩转 Docker 容器技术(179)
本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https: ...
- Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
service 的容器副本会 scale up/down,会 failover,会在不同的主机上创建和销毁,这就引出一个问题,如果 service 有要管理的数据,那么这些数据应该如何存放呢? 选项一 ...
随机推荐
- 我的第九个java程序--spring和mybatis整合(java project)
思路:入口程序读spring的配置文件-配置文件注入给程序bean--程序拿到bean以操作对象的手法查出程序 入口程序HelloWorld.java package HelloWorld; impo ...
- WPF 属性系统 依赖属性之内存占用分析
关于WPF的属性系统园子内有不少这方面的文章.里面大都提到了WPF依赖属性的在内存方面的优化.但是里面大都一笔带过.那么WPF到底是怎么样节约内存的.我们通过WPF属性和普通的CLR属性对比来看一下W ...
- ApiDoc 和 Swagger 接口文档
ApiDoc:https://blog.csdn.net/weixin_38682852/article/details/78812244 Swagger git: https://github.co ...
- Android开发者必知的5个开源库
摘要:过去的时间里,Android开发逐步走向成熟.而无论出现多少Android相关的开发工具,我们每天使用的大量开源库却始终是不可或缺的.这里,向大家介绍的是,这个任劳任怨的大家庭中,最受开发者喜爱 ...
- Carrot2 in action 初步印象
RawCluster:聚类中的类别单位 RawCluster.getDocuments():获得该类的文档列表 RawDocument:每个类的文档单位 STC:后缀树表示法 2008-11-13 C ...
- hdu 4419 线段树 扫描线 离散化 矩形面积
//离散化 + 扫描线 + 线段树 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层. ...
- 【BZOJ2140】稳定婚姻 Tarjan
[BZOJ2140]稳定婚姻 Description 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. ...
- set集合可以添加重复元素
set集合判断元素的唯一性要重写hashcode和equals方法,这样就能保证不会加入重复的元素, 但是在以下这种情况下任然可以加入重复元素,即使他们的hashcode和equals方法结果相同 p ...
- maven的安装以及查看是否安装成功
Maven安装教程详解 一.准备工作 1.确定电脑上已经成功安装jdk7.0以上版本 2.win10操作系统 3.maven安装包 下载地址:http://maven.apa ...
- SSH远程登陆docker容器
环境: Ubuntu 16.04(mac osx的VMware Fushion环境) 任务: Ubuntu 16.04通过SSH登陆docker(目的是为了运行在其他服务器的Jenkins访问dock ...