继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

安装docker并运行docker swarm模式

慕码人8056858
关注TA
已关注
手记 1247
粉丝 350
获赞 1323

概要

docker 1.12版本最大的改变在于集成了docker swarm,在docker engine下提供了 swarm 模式,这里主要说一下docker swarm。
docker engine本身只提供了容器技术,没有解决集群环境下的容器编排和通信。docker swarm是一个容器编排管理工具,docker-engine在1.12版本之后集成了docker swarm,不需要再单独安装。
docker swarm的功能,举个例子,有3台机器都安装了docker环境,称为3台docker节点。那么如何管理这3台docker节点,并把容器以类似于负载均衡的模式分别部署到这3台节点上,并让这些分布在不同节点上的容器之间互相通信呢。这时候需要用到容器编排工具,常用的编排工具有Google开源的kubernetes、apache的mesos、docker公司的swarm。
kubernetes作为Google开源的工具,已经在Google的生产环境运行了多年,功能丰富并且稳定可靠,目前有很多公司都在使用。docker在1.12版本之后内置了swarm模式,把容器编排以核心组件的模式集成到了docker engine中,并借鉴了kubernetes的成功经验。

安装docker

以centos7为例,这里附上官网的安装文档,docker官网实在太慢了。
使用yum安装

  1. 更新yum源,sudo yum update

  2. 添加docker的yum仓库

sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/enabled=1gpgcheck=1gpgkey=https://yum.dockerproject.org/gpgEOF
    ```3. 安装docker-engine,`sudo yum install docker-engine`4. 启动docker守护进程,`sudo systemctl start docker`  

docker的安装到这里就结束了,下边说一下在公司内网环境通过代理安装docker需要注意的问题。  
1. 首先让机器能通过代理上网  
修改/etc/profile,增加`export http_proxy=代理用户名:密码@代理地址:端口`  
使修改生效,`source /etc/profile`2. 配置yum使用代理  
`vim /etc/yum.conf` 增加`proxy=http://代理用户名:密码@代理地址:端口`  经过这两步之后,就可以在内网通过代理安装docker了。### 配置docker ###打开docker远程管理端口2375,并配置docker hub国内仓库。  
1. 新建docker配置文件  
`vim /etc/sysconfig/docker`  
增加  
`DOCKER_OPTS="-H unix:///var/run/docker.sock -H 0.0.0.0:2375 --registry-mirror=国内仓库地址"`  
如果需要通过代理访问还需要增加  
`HTTP_PROXY=http://代理用户名:密码@代理地址:端口`  2. 启动docker守护进程时加载配置文件  
`vim /lib/systemd/system/docker.servic`  
修改ExecStart配置为  
`ExecStart=/usr/bin/dockerd $DOCKER_OPTS`  
在[Service]中增加配置文件路径的配置  
`EnvironmentFile=-/etc/sysconfig/docker `  
把配置文件加载路径指定到第一步创建的配置文件/etc/sysconfig/docker  
3. 重启docker守护进程  
`sudo systemctl stop docker`  
`sudo systemctl start docker`4. 检查配置是否生效  
`ps -ef|grep docker`  
如果配置生效,会在dockerd进程后边加上刚才配置的参数。  

### 启动swarm模式 ###只需要在一个docker节点上初始化swarm集群, 其他节点加入这个集群就行了。  
选择一台docker节点作为swarm模式的leader,运行  
`docker swarm init --advertise-addr 主机ip`  
按照提示信息在其他节点上执行命令加入swarm集群  
在leader节点上执行`docker node ls` 查看节点信息  

### 创建集群网络 ###1. 在swarm集群中的任意一个节点上运行  
`docker network ls` 查看当前网络状况  
scope为**local**的网络只能作用于本机,下边创建swarm集群使用的网络。  
2. 运行 `docker network create --driver overlay my-network`  
创建一个名为**my-network**的集群网络  
再次运行 `docker network ls`,可以看到刚才创建的**my-network** ,scope为**swarm**,这个网络可以用于swarm模式,并让多个节点上的容器可以互通。  
在swarm中创建service时可以通过 `--network 网络名称` 指定使用的网络。多个service如果使用同一个scope为swarm的network,可以通过service的名称互相通信。### docker swarm简单使用 ###下边简单介绍docker swarm的使用,有兴趣的可以查看docker官方文档进行深入了解。  
**下边的命令全部是在swarm的leader节点运行!!**  
`docker service create --replicas 1 --name tomcat --publish 9090:8080 tomcat:latest`  
这里创建了一个名为**tomcat** 的service,swarm把容器封装为service,类似于kubernates中的pod,一个service是一个可供swarm调度的容器组合。  
这里的**--replicas 1**指定了service的副本数。  
**--publish 9090:8080**把容器中的8080端口发布到宿主机的9090端口

运行 `docker service ls` 查看当前的服务列表,可以看到有一个名为tomcat的服务。  
运行 `docker service ps tomcat` 可以看到tomcat服务运行在哪个swarm节点,以及当前运行的状态。  

切换到tomcat服务运行的节点,运行 `docker ps` 可以看到容器的ID,以及端口映射的情况。  
运行 `docker logs -f 容器ID` 查看tomcat运行日志。  

tomcat启动成功后,可以在浏览器中访问tomcat主页,地址是docker节点的ip(随便哪一个节点都可以),**端口是9090**,是在创建服务时指定的publish。 

上边已经成功运行了一个tomcat服务,这里对这个服务进行扩展部署。  
运行 `docker service scale tomcat=2` 把tomcat服务扩展为两个实例。  
运行 `docker service ls` 可以看到tomcat服务的replicas变成了**1/2**,第二个实例启动成功之后会变为**2/2**。  
运行 `docker service ps tomcat` 查看两个tomcat服务实例运行在哪个docker节点,以及运行状态。  

**swarm会自动在两个service中做负载均衡**  

swarm还有一些其他的命令,比如 `docker service rm service名称` 删除指定service,以及灰度发布等,具体使用请参照官方文档,这里不再细说。### swarm模式下需要注意的问题 ###swarm只会在docker节点之间调度容器,不会调度容器使用的挂载卷volume。在用swarm部署数据库的容器时,需要注意数据文件的问题。或者加载了外部配置文件的容器,也需要注意配置文件的问题。  
一种简单的解决方式,是让这些容器每次都被调度到相同的docker节点上。需要在创建service时指定**--constraint** 参数,比如 **--constraint 'node.hostname==myhost'** ,这样创建的service只会被调度到主机名为**myhost**的docker节点。  
另一种解决方式,使用docker volume插件,比如flocker。flocker可以在容器调度的时候,连同volume一起调度,这里不再细说,可以参照flocker的官网文档。### 最后 ###这里只是对docker的安装配置以及docker swarm的使用做了简单介绍,想要有更深入的了解,请参照官方文档,官方文档是学习的最好途径。docker只是微服务架构的开篇,想要实践微服务,docker必不可少。

后续会陆续推出基于docker部署的微服务架构,使用spring cloud做微服务解决方案,基于docker的mysql和mongodb的部署,基于docker的rabbitmq和activemq消息中间件的部署,以及基于docker部署的kafka、elk日志收集统计等。

         

             




作者:月冷心寒
链接:https://www.jianshu.com/p/135769e89b7e


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP