在读完《Docker技术入门与实践》这本书后,基本上已对Docker了有一些入门的理解,以及我们为什么要使用Docker
答:我们发现在实际工作中,通过openstack一旦把一个VM创建给开发,或者测试人员后,便很难再回收回来。
openstack使用的KVM或Xen,均是采用声明内存的方式,并且内存是独占方式,无论开发和测试人员有没有用这台机器,它就占坑在那里,
所以开发和测试环境,最先出现的瓶颈应该就是内存不足,导致后续无法再开通开发或测试的虚拟机。常规小服务器开到十几、二十台左右就没法再开了VM了。
Docker出现无疑是解决这个场景的一大利好,在物理机上,无论它这个容器实例有没有使用,内存资源都是竞争态的,默认没有独占内存。所以一台物理机启用Docker可以很容易开到上千台容器
但也有个一弊端,因为没有内存隔离,那内存隔离的安全性问题上就比较难处理,因此,Docker在企业的应用,绝大部份场景是应用在开发环境和测试环境。生产环境照样可以通过DockerFile的布署步骤,完整拉一套KVM生产机
接下来需要实验Docker的集群环境搭建。
参考上面这条链接,它讲解了以下
Docker 集群工具比对:Kubernetes vs Docker Swarm
最终决定实验使用Docker官网提供的Swarm集群管理工具(目的是组件1-2管理上的高可用),由于是实验环境,在openstack开了几台VM机来实验验证
1、注册服务监控与自动发现组件--consul ,使用3台机器
2、管理组件--manager ,使用2台机器
3、容器启动组件--node ,使用2台机器 (无法高可用,节点销毁后,会丢容器)
4、镜像存储组件--registry ,使用1台机器 (暂无高可用方案,需要验证镜像使用其它备份方式的话(比如rysnc方式),节点销毁重建后,能否使用备份目录进行还原)
注:一台机器当然也可以同时启动多个角色
测试主机分配如下
10.40.100.141 docker-manager0.venic.com
10.40.100.142 docker-manager1.venic.com
10.40.100.143 docker-node0.venic.com
10.40.100.144 docker-node1.venic.com
10.40.100.145 docker-consul0.venic.com
10.40.100.146 docker-consul1.venic.com
10.40.100.147 docker-consul2.venic.com
10.40.100.148 docker-registry.venic.com
上层nginx配置需要用到的域名解析如下
10.40.42.10 docker-manager.venic.com
10.40.42.10 docker-consul.venic.com
均采用CentOS7 ,且配置为1核2G内存。并执行了 yum update -y 更新过了。由于更新了,所以下面的组件一定确保关闭
设置每台主机的上的主机名(hostname)
hostnamectl --static set-hostname XXX
关闭防火墙、Selinux、NetworkManager
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
service NetworkManager stop
chkconfig NetworkManager off
vi /etc/selinux/config
重启
配置时钟同步,使用ntpdate或者chrony ,我使用chrony
修改每台主机上的/etc/resolv.conf 配置,实时将DNS服务器指向内网DNS服务器IP地址:10.40.200.100 (当然还要修改/etc/sysconfig/network-script/ifc-eth0 配置DNS1=10.40.200.100)
虽然在主机/etc/hosts上配置上面的域名解析,但我配了,发现Docker集群工作时,它有些服务直接用DNS解析,绕过/etc/hosts,但我也保留了这个/etc/hosts 配置
在10.40.200.100 (dnsmasq) 服务器添加解析记录,将以上9台机器的解析加进入。让其实现域名互访
全部使用有sudo 权限的visn用户执行安装docker-engine安装(当然使用root也可以安装,只是docker它提供它的shell脚本是以普通用户来执行的,不然会提示报错)
# curl -sSL https://get.docker.com/ | sh
切换回root用户
# vi /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry docker-registry.venic.com:5000
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
[Install]
WantedBy=multi-user.target
service docker start
chkconfig docker on
测试docker功能是否正常,在每台上单独运行一下hello-world,如下正常
# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
- Docker集群实验环境布署--swarm【5 容器启动组件--node】
10.40.100.143 docker-node0.venic.com 10.40.100.144 docker-node1.venic.com 原用swarm镜像 直接启动 1 ...
- Docker集群实验环境布署--swarm【3 注册服务监控与自动发现组件--consul】
参考官网集群配置方式 https://hub.docker.com/r/progrium/consul/ 集群中需要manager与node能通信consul的发现服务,不然,管理节点选举不了,无 ...
- Docker集群实验环境布署--swarm【7 让docker客户端支持docker-compose】
Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 登录Docker客户端的服务器(默认是安装了docker-engine的服务器),再安装compose插件 # yum i ...
- Docker集群实验环境布署--swarm【6 配置上层Nginx代理,让任意Docker client访问得到高可用的管理API】
10.40.42.10上,也就是对应的VRRP中的10.40.42.1和2上,配置nginx tcp代理 # cat 4000_manager.venic.com_10.40.100.141-14 ...
- Docker集群实验环境布署--swarm【4 管理组件--manager】
主机分配如下,支持双活,中断其中1台,primary会通过consul自动重新选举 10.40.100.141 docker-manager0.venic.com 10.40.100.142 do ...
- Docker集群实验环境布署--swarm【2 搭建本地镜像仓库】
在10.40.100.148上 # docker run -d -p 5000:5000 --restart=always --name docker-registry.venic.com - ...
- Docker集群管理(一)—— 基础docker+swarm+shipyard
目的 学习docker的集群管理,摸索出高可用的docker微服务架构方案.本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(dock ...
- docker swarm的应用----docker集群的构建
一.docker安装 这里我们安装docker-ce 的18.03版本 yum -y remove docker 删除原有版本 #安装依赖包 [root@Docker ~]# yum -y i ...
- Docker 集群环境实现方式
Docker 集群环境实现的新方式 近几年来,Docker 作为一个开源的应用容器引擎,深受广大开发者的欢迎.随着 Docker 生态圈的不断建设,应用领域越来越广.云计算,大数据,移动技术的快速发展 ...
随机推荐
- 警惕使用WebClient.DownloadFile(string uri,string filePath)方法
原文:警惕使用WebClient.DownloadFile(string uri,string filePath)方法 WebClient.DownloadFile(string uri,string ...
- Asp.Net Identity 深度解析 之 注册登录的扩展
关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下 http://www.asp.net/identity 这里不在赘余. 很多人认为 ...
- Android 实现用户列表信息的功能,然后选择删除幻灯片删除功能
在项目开发过程中.经常须要对用户列表的信息进行删除的操作.Android中经常使用的删除操作方式有两种 .一种就是类似微信的滑动出现删除button方式,另一种是通过CheckBox进行选择.然后通过 ...
- WinXP 无线技巧“区域没有通过无线网络中的发现”一个可能的原因!
貌似WinXP经典或无限.我一直沿用至今,我不知道这一天会放弃. 遇到的问题,也许有XP爱好者都遇到过还得看,写下一点文字注释.----------------------- 切割线 -------- ...
- 什么是Solr搜索
什么是Solr搜索 一.Solr综述 什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理. 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂. ...
- 让.NET程序快速释放内存的办法
原文:让.NET程序快速释放内存的办法 公司里的一个程序,经过了N个人的手后发现上了生产内存会一直涨,直到物理内存几乎被占用完毕后突然就下降下来(估计是GC给释放了),然后再一直涨.这个程序主要是对字 ...
- asp.net MVC4 +MVCpager
asp.net MVC4 +MVCpager 无刷新分页 本人菜鸟,最近在用MVC4和MVCpager做无刷新分页时,发现点击下一页时数据不是Ajax提交的,弄了好久终于找到原因,原来还是Jquery ...
- Cocos2d-x 3.1.1开发环境
Windows7上搭建Cocos2d-x 3.1.1开发环境 前言 现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握C ...
- Javascript多线程引擎(三)
Javascript多线程引擎(三) 完成对ECMAScript-262 3rd规范的阅读后, 列出了如下的限制条件 1. 去除正则表达式( 语法识别先不编写) 2. 去除对Function Decl ...
- 带你走近AngularJS 之创建自定义指令
带你走近AngularJS 之创建自定义指令 为什么使用AngularJS 指令? 使用过 AngularJS 的朋友应该最感兴趣的是它的指令.现今市场上的前端框架也只有AngularJS 拥有自定义 ...