docker 门外初体验--docker swarm (四)

系列文章目录

docker 门外初体验–docker swarm (四)



前言

本文主要对docker swarm 进行学习,及谈一谈本人对docker swarm的理解.


一、docker swarm是什么?

如下为本文中使用的docker-compose.yml文件的具体内容。

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: pan19881018/friendlyhello:part2
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

docker swarm 是 docker 的集群管理工具,初次接触可以不太好理解,我们通过实际的操作来理解,在前面的service样例,相当于在一台机器上,创建五个容器,并且有负载均衡的功能。 在本文的docker swarm实操中,我们将通过操作来体验在两台docker主机,创建5个容器副本,这5个容器副本分布在这两台机器上,实现真正的跨主机集群并且有负载均衡的功能。

二、 安装docker-machine

Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,换一种理解就是docker-machine可以用来创建具有docker服务的虚拟机。在本例上可以理解为在虚拟机上,使用docker-machine创建两个docker主机,然后将这两个docker主机并成集成,最后把服务部署到这两个主机当中。docker-machine的安装:

$ base=https://github.com/docker/machine/releases/download/v0.14.0 &&   \
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&  \
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine

参考 :https://docs.docker.com/machine/install-machine/

三、创建docker主机

使用docker-machine create创建docker主机,创建第一台docker主机:docker-machine create –driver virtualbox myvm1

# docker-machine create –driver virtualbox myvm1
Running pre-create checks…
(myvm1) No default Boot2Docker ISO found locally, downloading the latest release…
(myvm1) Latest release for github.com/boot2docker/boot2docker is v18.06.1-ce
(myvm1) Downloading /root/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso…
(myvm1) 0%.10%.20%.30%.40%.50%.60%.70%.80%.90%.100%
Creating machine…
(myvm1) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/myvm1/boot2docker.iso…
(myvm1) Creating VirtualBox VM…
(myvm1) Creating SSH key…
(myvm1) Starting the VM…
(myvm1) Check network to re-create if needed…
(myvm1) Found a new host-only adapter: “vboxnet0”
(myvm1) 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 myvm1

创建第二台docker主机:docker-machine create –driver virtualbox myvm2

# docker-machine create –driver virtualbox myvm2
Running pre-create checks…
Creating machine…
(myvm2) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/myvm2/boot2docker.iso…
(myvm2) Creating VirtualBox VM…
(myvm2) Creating SSH key…
(myvm2) Starting the VM…
(myvm2) Check network to re-create if needed…
(myvm2) 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 myvm2在这里插入代码片

四、查看docker主机

使用docker-machine ls查看docker主机,

# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 – virtualbox Running tcp://192.168.99.100:2376 v18.06.1-ce
myvm2 – virtualbox Running tcp://192.168.99.101:2376 v18.06.1-ce

五、创建docker主机集群

myvm1集群初始化

# docker-machine ssh myvm1 "docker swarm init –advertise-addr 192.168.99.100:2376"
Swarm initialized: current node (mwy9dpd6ea1bqzvhqpi4j2ov3) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join –token SWMTKN-1-1n6a2nkkkutdrij7hdg71hih8x5c2l7oanxa08dmvm9u20kli4-3okzvyjr4hpzu8j4q7ldhfchb 192.168.99.100:2377

To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.

将myvm2加入集群当中

# docker-machine ssh myvm2 "docker swarm join –token SWMTKN-1-1n6a2nkkkutdrij7hdg71hih8x5c2l7oanxa08dmvm9u20kli4-3okzvyjr4hpzu8j4q7ldhfchb 192.168.99.100:2377"
This node joined a swarm as a worker.
root@vmuser-virtual-machine:/home/vmuser/workdir/services# docker-machine ssh myvm1 “docker node ls”
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
mwy9dpd6ea1bqzvhqpi4j2ov3 * myvm1 Ready Active Leader 18.06.1-ce
ecvpnan32s3oug4h28bf66rxl myvm2 Ready Active 18.06.1-ce

六、查看docker主机环境变量

使用docker-machine env命令显示连接到某个主机需要的环境变量,有了这些变量之后,我们就可以登录docker主机,部署应用服务。

# docker-machine env myvm1
export DOCKER_TLS_VERIFY=1″
export DOCKER_HOST=”tcp://192.168.99.100:2376″
export DOCKER_CERT_PATH=/root/.docker/machine/machines/myvm1″
export DOCKER_MACHINE_NAME=”myvm1″
# Run this command to configure your shell:
# eval $(docker-machine env myvm1)

七、登录docker主机

使用docker-machine ssh 可以登录docker主机,前提是需要使用 eval $(docker-machine env docker主机名称) 配置shell变量。

# eval $(docker-machine env myvm1)
# docker-machine ssh myvm1
## .
## ## ## ==
## ## ## ## ## ===
/”””””””””””””””””\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| ‘_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ ‘__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.06.1-ce, build HEAD : c7e5c3e – Wed Aug 22 16:27:42 UTC 2018
Docker version 18.06.1-ce, build e68fc7a

登录docker主机之后,我们可以通过docker node ls 查看集群当中的节点列表。

docker@myvm1:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
mwy9dpd6ea1bqzvhqpi4j2ov3 * myvm1 Ready Active Leader 18.06.1-ce
ecvpnan32s3oug4h28bf66rxl myvm2 Ready Active 18.06.1-ce
// 退出docker 主机
docker@myvm1:~$ exit

八、集群中部署应用服务

将docker-compose.yml传到myvm1当中:

# docker-machine scp docker-compose.yml myvm1:~
docker-compose.yml 100% 371 72.8KB/s 00:00

在myvm1上面创建服务:

# docker-machine ssh myvm1 “docker stack deploy -c docker-compose.yml getstartedlab”
Creating network getstartedlab_webnet
Creating service getstartedlab_web

通过如下指令我们可以看到5个副本当中2个副本在myvm1当中,3个副本在myvm2当中,从而实现本docker主机集群:

# docker-machine ssh myvm1 “docker stack ps getstartedlab”
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
y597za9yvdcb getstartedlab_web.1 pan19881018/get-start:part2 myvm2 Running Preparing 20 seconds ago
0x8gp8t2r8v2 getstartedlab_web.2 pan19881018/get-start:part2 myvm1 Running Preparing 20 seconds ago
qwkkru77pyib getstartedlab_web.3 pan19881018/get-start:part2 myvm2 Running Preparing 20 seconds ago
v7jry6xie03j getstartedlab_web.4 pan19881018/get-start:part2 myvm2 Running Preparing 20 seconds ago
cucyq1fdgzbh getstartedlab_web.5 pan19881018/get-start:part2 myvm1 Running Preparing 20 seconds ago

九、总结

学习是一个循序渐进的过程,本文主要是通过docker-mackine 学习如何创建docker主机,创建docker集群,并且使用docker stack部署服务,在此过程中没有对相关的命令进行详细说明,对于docker-machine其实还有其他的命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式实操

希望博文有助于您,您不必加班。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值