Docker三剑客

Docker集群管理工具

实验环境:CentOS 6.9

  • Docker Machine
  • Docker Compose
  • Docker Swarm

Docker Machine

  • 安装
# https://github.com/docker/machine/releases
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/docker-machine

# 查看版本
[root@db-slave ~]# docker-machine -v
docker-machine version 0.13.0, build 9ba6da9
  • 使用

Docker Machine 支持多种后端驱动,包括虚拟机、本地主机和云平台,使用 virtualbox 类型的驱动,创建一台 Docker 主机,命名为 aniu

[root@db-slave ~]# docker-machine create -d virtualbox aniu
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
# 注意这里报错提示需要安装VirtualBox环境
  • 配置VirtualBox源
# cat /etc/yum.repos.d/virtualbox.repo 
[virtualbox]
name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
You have new mail in /var/spool/mail/root
  • 安装VirtualBox
yum install -y VirtualBox-5.2 # 使用yum search VirtualBox 然后安装指定版本的VirtualBox
[root@db-slave ~]# sudo /sbin/vboxconfig # 重新加载VirtualBox服务
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
# 如果内核版本不一样可能会出错,需要:
[root@db-slave ~]# rpm -qa | grep kernel-lt
kernel-lt-4.4.103-1.el6.elrepo.x86_64
kernel-lt-devel-4.4.103-1.el6.elrepo.x86_64
# yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt-headers -y --skip-broken
  • 继续利用docker-machine创建docker主机
[root@db-slave ~]# docker-machine create -d virtualbox aniu
Running pre-create checks...
(aniu) Image cache directory does not exist, creating it at /root/.docker/machine/cache...
(aniu) No default Boot2Docker ISO found locally, downloading the latest release...
(aniu) Latest release for github.com/boot2docker/boot2docker is v17.11.0-ce
(aniu) Downloading /root/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.11.0-ce/boot2docker.iso...
(aniu) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(aniu) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/aniu/boot2docker.iso...
(aniu) Creating VirtualBox VM...
(aniu) Creating SSH key...
(aniu) Starting the VM...
(aniu) Check network to re-create if needed...
(aniu) Found a new host-only adapter: "vboxnet0"
(aniu) 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 aniu
You have new mail in /var/spool/mail/root
  • 查看主机
# docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
aniu   -        virtualbox   Running   tcp://192.168.99.100:2376           v17.11.0-ce  
  • 创建主机成功后,可以通过 env 命令来让后续操作目标主机
$ docker-machine env aniu
  • 可以通过 SSH 登录到主机
$ docker-machine ssh aniu

官方支持的驱动列表

# 通过 -d 选项可以选择支持的驱动类型。
amazonec2
azure
digitalocean
exoscale
generic
google
none
openstack
rackspace
softlayer
virtualbox
vmwarevcloudair
vmwarevsphere
  • 常用操作命令
active 查看活跃的 Docker 主机
config 输出连接的配置信息
create 创建一个 Docker 主机
env 显示连接到某个主机需要的环境变量
inspect 输出主机更多信息
ip 获取主机地址
kill 停止某个主机
ls 列出所有管理的主机
provision 重新设置一个已存在的主机
regenerate-certs 为某个主机重新生成 TLS 认证信息
restart 重启主机
rm 删除某台主机
ssh SSH 到主机上执行命令
scp 在主机之间复制文件
mount 挂载主机目录到本地
start 启动一个主机
status 查看主机状态
stop 停止一个主机
upgrade 更新主机 Docker 版本为最新
url 获取主机的 URL
version 输出 docker-machine 版本信息
help 输出帮助信息

#每个命令,又带有不同的参数,可以通过
docker-machine COMMAND --help

Docker Compose

安装参考:http://blog.csdn.net/wh211212/article/details/78665052

[root@aniu-k8s ~]# docker-compose --help
Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name (default: directory name)
  --verbose                   Show more output
  --no-ansi                   Do not print ANSI control characters
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the name specified
                              in the client certificate (for example if your docker host
                              is an IP address)
  --project-directory PATH    Specify an alternate working directory
                              (default: the path of the Compose file)

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the Compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  images             List images
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

Docker Swarm

Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。

  • Swarm mode Docker 1.12 Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm。请注意与旧的 Docker Swarm 区分开来。 Swarm mode 内置 kv 存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm 集群具备与 Mesos、Kubernetes 竞争的实力。
  • 基本概念

Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具

  • 节点

运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。 节点分为管理 (manager) 节点和工作 (worker) 节点。 管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。 工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。也可以通过配置让服务只运行在管理节点。

  • 服务和任务

任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。 服务 (Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式: replicated services 按照一定规则在各个工作节点上运行指定个数的任务。 global services 每个工作节点上运行一个任务 两种模式通过 docker service create 的 –mode 参数指定。 来自 Docker 官网的这张图片形象的展示了容器、任务、服务的关系。

创建Swarm 集群

  • 初始化集群(实验环境:CentOS7 Docker CE)

由于切换了实验主机,需要重新安装VirtualBox,注意CentOS6/7安装VirtualBox貌似不同,参考:

# CentOS7 安装VirtualBox
cd /etc/yum.repos.d
wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo

yum --enablerepo=epel install dkms
yum groupinstall "Development Tools" -y && yum install kernel-devel -y
# 安装VirtualBox
yum install VirtualBox-5.2 -y

# 参考链接:https://wiki.centos.org/HowTos/Virtualization/VirtualBox
  • 使用 docker swarm init 在本机初始化一个 Swarm 集群
[root@aniu-saas-4 ~]# docker swarm init --advertise-addr 192.168.0.209
Swarm initialized: current node (s2ffwdkzjntux1rarf139vygb) is now a manager.

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

    docker swarm join --token SWMTKN-1-4uijqfvw990m8j065ulwdzuv14ec6rmzgpljm5lhyd3rmv358o-ersojr3gglsj7v4i2enmmvt3z 192.168.0.209:2377

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

如果 Docker 主机有多个网卡,拥有多个 IP,必须使用 –advertise-addr 指定 IP

  • 增加工作节点

使用 Docker Machine 创建两个 Docker 主机,并加入到swarm集群中

$ docker-machine create -d virtualbox worker1
$ docker-machine ssh worker1

docker@worker1:~$ docker swarm join --token SWMTKN-1-4uijqfvw990m8j065ulwdzuv14ec6rmzgpljm5lhyd3rmv358o-ersojr3gglsj7v4i2enmmvt3z 192.168.0.209:2377

# Running pre-create checks...
Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"

# 注意安装运行dockers swarm必须支持VT-X/AMD-v
$ docker-machine create -d virtualbox worker2
docker@worker1:~$ docker swarm join --token SWMTKN-1-4uijqfvw990m8j065ulwdzuv14ec6rmzgpljm5lhyd3rmv358o-ersojr3gglsj7v4i2enmmvt3z 192.168.0.209:2377

细心的读者可能通过 docker-machine create –help 查看到 –swarm* 等一系列参数。该参数是用于旧的 Docker Swarm,与本章所讲的 Swarm mode 没有关系

  • 查看集群
$ docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
03g1y59jwfg7cf99w4lt0f662    worker2   Ready   Active
9j68exjopxe7wfl6yuxml7a7j    worker1   Ready   Active
dxn1zf6l61qsb1josjja83ngz *  manager1  Ready   Active        Leader

参考教程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

记一次线下赛靶机攻击过程

咋一眼看过去除了 80 端口的 web 以为就没其他端口了,尝试着进行全端口扫描发现,还是一样。

630
来自专栏yw的数据分析

centos 7 安装VCL播放器

centos 自带播放器MP4都无法播放,因此安装VCL播放器 安装epel和remi的repository sudo yum localinstall --n...

2986
来自专栏散尽浮华

完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip

之前在测试环境(centos7.2)上部署了openstack云平台(完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建)...

2438
来自专栏向治洪

ios打包ipa文件并上传到托管平台

当我们开发完app后,需要将ipa/apk提交给测试人员测试,然后才能上线。下面就来看一下如何打包ipa文件,并上传托管平台。 做过ios开发的童鞋都知道,io...

3809
来自专栏菩提树下的杨过

docker学习(7) docker-compose使用示例

上一回学习了如何利用docker搭建一个mysql + java service + nginx,总共4个docker容器,如果采用docker run的方式一...

2018
来自专栏A周立SpringCloud

Docker系列教程27-在生产环境中使用Docker Compose

在development中使用Compose定义应用程序时,可使用此定义,在不同环境(如CI,staging和production)中运行应用程序。

1285
来自专栏余生开发

vue - .babelrc

        // env项是借助插件babel-preset-env,下面这个配置说的是babel对es6,es7,es8进行转码,并且设置amd,comm...

632
来自专栏乐沙弥的世界

基于Linux (RHEL 5.5) 安装Oracle 10g RAC

    本文所描述的是在Red Hat 5.5下使用vmware server 来安装Oracle 10g RAC(OCFS + ASM),本文假定你的RHEL...

1013
来自专栏乐沙弥的世界

Linux 下卸载MySQL Enterprise Monitor

    MySQL Enterprise Monitor是专门为MySQL数据库而设计的一款企业级监控,能非常好地与MySQL各方面特性相结合,包括:MySQ...

662
来自专栏云计算教程系列

Linux命令行小贴士

本文内容需要一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费...

1182

扫码关注云+社区