一、Docker简介

1.1、什么是docker

docker的英文意思是 码头工人,意思就是搬运东西的意思,这和docker的特点是一样的,docker提供的就是一种容器化搬运东西(我们的软件、程序)的过程。docker自己本来是运行在操作系统上一个程序软件,它会提供一个容器环境,使我们的程序独立地运行在容器中。

当我们把我们的web网站做成分布式的时候,就需要加服务器,然后在各个服务器配置web所需要的配置,比如:数据库、web服务器。这样的我们的网站才能跑起来,但是每当我们加服务器的时候,我们都要再重新配置一下,很繁琐,有了docker,我们就可以把我们的网站和所需要的环境配置好,打成一个包(docker镜像),然后在服务器上安装docker,用docker拉取打包好的镜像,直接运行容器就行了,更加的便于管理,镜像中修改配置,重新更新,所有的容器就也能修改了,我们的网站也就修改更新了。

1.2、docker和虚拟机

docker是和虚拟机是类似的东西,我们应该知道虚拟机就是在我们的操作系统上虚拟出来一个电脑,然后里边可以安装、运行各种各样的软件,和我们真的电脑是差不多的,我们可以拿着这个虚拟好的电脑(其实是一个文件)在按了虚拟机的其他电脑上可以直接运行,里边的东西就不用我们来回安装和配置了,也是很方便的。docker其实提供的也是这么一种的技术,只不过它比虚拟机效率更加的高,启动快,占用资源小等一系列的优点,而且虚拟机比较笨重,这是因为虚拟机和docker来实现思想上有本质的区别,我们可以通过下边的两张图可以对比一下:

虚拟机的运作原理:是虚拟电脑的硬件资源,把硬件资源分配出来,然后虚拟出来多个操作系统,虚拟出来的是一个完整的电脑。

docker的运作原理:虚拟的软件资源,把电脑中的网络、存储啥的分成几份虚拟成容器,我们的软件运行在容器中,每个容易只占用电脑的部分所需要的资源,并不是一个完整的电脑。

二、Docker的安装

从网络上下载Docker的依赖库,使得docker可以在虚拟机上运行:

下载docker的镜像,这里采用的是阿里云镜像:

在虚拟机上安装docker镜像:

启动docker,准备进行操作:

三、Swarm试用

3.1、创建集群

使用 Docker Machine 创建一个虚拟机作为 manger 节点:

[root@ZhaiXin ~]docker-machine create --driver virtualbox manager1
Running pre-create checks...
(manager1) Unable to get the latest Boot2Docker ISO release version:  Get https://api.github.com/repos/boot2docker/boot2docker/releases/latest: dial tcp: lookup api.github.com on [::1]:53: server misbehaving
Creating machine...
(manager1) Unable to get the latest Boot2Docker ISO release version:  Get https://api.github.com/repos/boot2docker/boot2docker/releases/latest: dial tcp: lookup api.github.com on [::1]:53: server misbehaving
(manager1) Copying /home/zuolan/.docker/machine/cache/boot2docker.iso to /home/zuolan/.docker/machine/machines/manager1/boot2docker.iso...
(manager1) Creating VirtualBox VM...
(manager1) Creating SSH key...
(manager1) Starting the VM...
(manager1) Check network to re-create if needed...
(manager1) Found a new host-only adapter: "vboxnet0"
(manager1) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env manager1

查看虚拟机的环境变量等信息,包括虚拟机的 IP 地址:

[root@ZhaiXin ~]docker-machine env manager1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/zuolan/.docker/machine/machines/manager1"
export DOCKER_MACHINE_NAME="manager1"
# Run this command to configure your shell:
# eval $(docker-machine env manager1)

然后再创建一个节点作为 work 节点:

[root@ZhaiXin ~]docker-machine create --driver virtualbox worker1

现在我们有了两个虚拟主机,但是目前这两台虚拟主机并没有什么联系,为了把它们联系起来,这时需要 使用Swarm 。执行 docker swarm 即可操作虚拟机。

把 manager1 加入集群:

[root@ZhaiXin ~]docker-machine ssh manager1 docker swarm init --listen-addr 192.168.99.100:2377 --advertise-addr 192.168.99.100
Swarm initialized: current node (23lkbq7uovqsg550qfzup59t6) is now a manager.To add a worker to this swarm, run the following command:docker swarm join \--token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r \192.168.99.100:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

用 --listen-addr 指定监听的 ip 与端口:

[root@ZhaiXin ~]docker swarm init --listen-addr <MANAGER-IP>:<PORT>

再把 work1 加入集群中:

[root@ZhaiXin ~]docker-machine ssh worker1 docker swarm join --token \SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r \192.168.99.100:2377
This node joined a swarm as a worker.

集群初始化成功,我们新建了一个有两个节点的“集群”,现在进入其中一个管理节点使用 docker node 命令来查看节点信息:

[root@ZhaiXin ~]docker-machine ssh manager1 docker node ls
ID                       HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
23lkbq7uovqsg550qfzup59t6 *  manager1    Ready      Active         Leader
dqb3fim8zvcob8sycri3hy98a    worker1     Ready      Active

继续新建虚拟机 manger2、worker2、worker3,总共得到五个虚拟机,并把剩余的虚拟机也加到集群中。

查看集群信息:

[root@ZhaiXin ~]docker-machine ssh manager2 docker node ls
ID                            HOSTNAME   STATUS   AVAILABILITY   MANAGER STATUS
16w80jnqy2k30yez4wbbaz1l8     worker1     Ready     Active
2gkwhzakejj72n5xoxruet71z     worker2     Ready     Active
35kutfyn1ratch55fn7j3fs4x     worker3     Ready     Active
a9r21g5iq1u6h31myprfwl8ln *   manager2    Ready     Active        Reachable
dpo7snxbz2a0dxvx6mf19p35z     manager1    Ready     Active        Leader

3.2、建立跨主机网络

将宿主机加入集群得到六个虚拟机以便更加清晰地使用命令。

查看网络状态:

[root@ZhaiXin ~]docker network ls
NETWORK ID         NAME            DRIVER          SCOPE
764ff31881e5        bridge          bridge          local
fbd9a977aa03        host            host            local
6p6xlousvsy2        ingress         overlay         swarm
e81af24d643d        none            null            local

可以看到在 swarm 上默认已有一个名为 ingress 的 overlay 网络, 默认在 swarm 里使用,本例子中会创建一个新的 overlay 网络。

[root@ZhaiXin ~]docker network create --driver overlay swarm_test
4dm8cy9y5delvs5vd0ghdd89s
$ docker network ls
NETWORK ID         NAME                DRIVER              SCOPE
764ff31881e5        bridge              bridge              local
fbd9a977aa03        host                host                local
6p6xlousvsy2        ingress             overlay             swarm
e81af24d643d        none                null                local
4dm8cy9y5del        swarm_test          overlay             swarm

这个网络只是处于待机状态,下一小节我们会在这个网络上部署应用。

3.3、在跨主机网络上部署应用

在五个节点部署一组 Nginx 服务,部署的服务使用 swarm_test 跨主机网络:

[root@ZhaiXin ~]docker service create --replicas 2 --name helloworld --network=swarm_test nginx:alpine
5gz0h2s5agh2d2libvzq6bhgs

查看服务状态:

[root@ZhaiXin ~]docker service ls
ID            NAME        REPLICAS  IMAGE         COMMAND
5gz0h2s5agh2  helloworld  0/2       nginx:alpine  

查看 helloworld 服务详情:

[root@ZhaiXin ~]docker service ps helloworld
ID          NAME          IMAGE         NODE      DESIRED STATE   CURRENT STATE              ERROR
ay081uome3   helloworld.1  nginx:alpine  manager1  Running         Preparing 2 seconds ago
16cvore0c96  helloworld.2  nginx:alpine  worker2   Running         Preparing 2 seconds ago

进入两个节点,查看服务状态:

[root@ZhaiXin ~]docker-machine ssh manager1 docker ps -a
CONTAINER ID   IMAGE         COMMAND         CREATED        STATUS         PORTS            NAMES
119f787622c2   nginx:alpine  "nginx -g ..."   4 minutes ago  Up 4 minutes   80/tcp, 443/tcp  hello ...
$ docker-machine ssh worker2 docker ps -a
CONTAINER ID   IMAGE         COMMAND         CREATED         STATUS        PORTS             NAMES
5db707401a06   nginx:alpine  "nginx -g ..."   4 minutes ago   Up 4 minutes  80/tcp, 443/tcp   hello ...

首先使用 Machine 进入 manager1 节点,然后使用 docker exec -i 命令进入 helloworld.1 容器中 ping 运行在 worker2 节点的 helloworld.2 容器。

[root@ZhaiXin ~]docker-machine ssh manager1 docker exec -i helloworld.1.ay081uome3eejeg4mspa8pdlx \ping helloworld.2.16cvore0c96rby1vp0sny3mvt
PING helloworld.2.16cvore0c96rby1vp0sny3mvt (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: seq=0 ttl=64 time=0.591 ms
64 bytes from 10.0.0.4: seq=1 ttl=64 time=0.594 ms
64 bytes from 10.0.0.4: seq=2 ttl=64 time=0.624 ms
64 bytes from 10.0.0.4: seq=3 ttl=64 time=0.612 ms
^C

然后使用 Machine 进入 worker2 节点,然后使用 docker exec -i 命令进入 helloworld.2 容器中 ping 运行在 manager1 节点的 helloworld.1 容器。

[root@ZhaiXin ~]docker-machine ssh worker2 docker exec -i helloworld.2.16cvore0c96rby1vp0sny3mvt \ping helloworld.1.ay081uome3eejeg4mspa8pdlx
PING helloworld.1.ay081uome3eejeg4mspa8pdlx (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.466 ms
64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.465 ms
64 bytes from 10.0.0.3: seq=2 ttl=64 time=0.548 ms
64 bytes from 10.0.0.3: seq=3 ttl=64 time=0.689 ms
^C

可以看到这两个跨主机的服务集群里面各个容器是可以互相连接的。

四、Docker Swarm优点总结

通过以上操作,可以看到Docker Swarm有六大优点。

4.1、更高效的利用系统资源

docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。

4.2、更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发测试,部署的时间。

4.3、一致的运行环境

开发过程中常见的一个问题是环境一致问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中发现。而docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码在我机器上没问题”这类问题。

4.4、持续支付和部署

对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方运行。(定制应用镜像来实现集成、持续支付、部署。开发人员可以通过dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署)。而且使用dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

4.5、更轻松的迁移

由于docker确保了执行环境的一致性,使得应用的迁移更加的容易。docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

4.6、更轻松的维护和拓展

docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

Swarm安装与应用相关推荐

  1. 单机版swarm安装

    Ubantu下的docker安装 # 1.卸载旧版本 apt-get remove docker docker-engine docker.io containerd runc# 2.安装前提依赖 a ...

  2. Docker Swarm安装(以ubuntu为例)

    Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docke ...

  3. 狂神说Java系列视频教程之docker(记录到swarm安装)

    狂神说B站视频地址–基础 狂神说B站视频地址–进阶 安装docker #1.卸载旧版本yum remove docker \docker-client \docker-client-latest \d ...

  4. 单机版Docker Swarm安装及试用

    Docker Swarm简介 Docker是一种运行于 Linux 和 Windows 上的软件,用于创建.管理和编排容器.Swarm 是Docker官方提供的一款集群管理工具,其主要作用是把若干台 ...

  5. 单机版Swarm 安装教程和试用

    一.背景.功能介绍 Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swarm的集群管理和编排功能.可以通 ...

  6. 剖析Docker Swarm和Mesos:是什么?如何结合?有什么优势?

    本文讲的是剖析Docker Swarm和Mesos:是什么?如何结合?有什么优势?,[编者的话]本文来自Mesosphere,从生产环境的需求出发,简要介绍了Docker Swarm的诞生背景,以及其 ...

  7. Docker swarm集群搭建教程

    一.什么是Swarm Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行为.比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavio ...

  8. Docker容器虚拟化技术---Docker运维管理(Swarm集群管理)3

    Docker容器虚拟化技术-Docker运维管理(Swarm集群管理)3 Swarm集群管理 docker swarm是docker官方提供的一套容器编排系统,是Docker公司推出的官方容器集群平台 ...

  9. Swarm搭建Docker集群

    Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docke ...

最新文章

  1. $state 新标签页
  2. 发光二极管pcb封装图画法_五个方面剖析SIP封装工艺,看懂SIP封装真正用途
  3. JAVA连接hbase伪分布失败_hbase伪分布安装配置
  4. Aspose.Words 开发时遇到的问题
  5. linux 双线,linux 双线接入方案
  6. python 查询sqlserver 视图_在Python中,将SQL查询的输出显示为表,就像在SQL中一样...
  7. 网络知识和交换机的基本配置知识培训
  8. java堆外内存为何比java堆更适合用来进行网络IO操作
  9. [导入]七大千年数学难题
  10. linux缺页异常处理--内核空间
  11. visual studio运行时库MT、MTd、MD、MDd
  12. J1939广播DM1报文
  13. 安装配置Tomcat7教程
  14. oracle 存档终点修改,修改归档模式的存档终点 archive log list
  15. discuz 模板php代码,自定义HTML模板DIY支持PHP代码解析
  16. java 判断今天_java判断日期是否是今天
  17. 初学莫队算法 bzoj2038 小z的袜子 分块算法
  18. linux视频对话框,抖音对话框视频怎么做?如何在视频画面上添加对话气泡框?视频加对话气泡的方法...
  19. 女子花2万元雇友人杀逝世女街坊
  20. LabVIEW编更改研华数字板卡中DIO方向 例程与相关资料

热门文章

  1. 微信营销如何提升转化率与购买率
  2. 花菁染料|cas146368-08-3-齐岳生物
  3. Win11 专业工作站版安装安卓子系统方法 (离线包安装)
  4. 自动安装JDK、HADOOP、ZOOKEEPER、HIVE的shell脚本
  5. [进阶]-多线程、多进程、异步IO实用例子
  6. 生产者消费者问题:管程法
  7. 华为鸿蒙3.0亮相,搭载设备产业链投资机会带来了POKERTIME129263?
  8. 栈展开(stack unwinding)在destructors中的exceptions
  9. c语言赛车编程,基于C语言赛车游戏要点.doc
  10. 海思开发板上挂载额外的存储空间