容器技术|Docker三剑客之docker

  • 时间:
  • 浏览:1
  • 来源:万人红黑大战棋牌_万人红黑大战棋牌官网

"Addr":"192.168.22.177:2377"

127.0.0.0/8

}

Heartbeat Period: 5 seconds

Swarm Cluster不光要是提供了优秀的高可用性,一起去也提供了节点弹性扩展或缩减的功能。当容器组想动态扩展时,只需通过 scale参数即可一键复制出新的副本出来。仔细观察得话,可以 发现所有扩展出来的容器副本都 run 在要是的节点下面,否则 有需求想在每台节点上都 run 有一另一一5个 相同的副本,法律措施嘴笨 很简单,只须要在命令中将”–replicas n”更加进去”–mode=global”即可!一键复制服务(–replicas n)将一系列一键复制任务分发至各节点当中,具体取决于您所须要的设置情况汇报,这名于“–replicas 3”。全局服务(–mode=global)适用于集群内完整可用节点上的服务任务,这名于“–mode global”。否则 朋友在 Swarm 集群中设有 7 台 Docker 节点,则完整节点之上都将趋于稳定对应容器。

Options:

3、任务与调度

"Description": {

64 bytesfromnode1(192.168.22.175): icmp_seq

"Availability":"active"

update#更新节点

7t7xjpmao533  nginx-cluster.1nginx:latest  manager  Running        Running17seconds ago

2、安装docker环境

#node1 node2配置同上一致即可

Paused: 0

},

This node joined a swarmasa worker.

#swarm集群中node的AVAILABILITY情况汇报一种生活生活:Active、drain。其中actice情况汇报的节点可以 接受管理节点的任务指派;drain情况汇报的节点会现在刚开始了任务,要是会接受管理节点的任务指派,节点趋于稳定下线情况汇报。

[root@manager ~]# docker images

"Name":"null"

q200fo5mja1ab\_nginx-cluster.3nginx:latestnode1ShutdownFailed9minutesago"startingcontainerfailed:sh…"

twytwc5dlp77vu1b7cakks9w2    node2     Ready   Active

Live Restore Enabled: false

192.168.22.175node1

Supports d_type: true

Usage:    docker service COMMAND

vitsgxpdf3bnnginx-cluster.2nginx:latestmanagerRunningRunning10minutesago

Using default tag: latest

demote#将集群中有一另一一5个 或多个节点降级

192.168.22.177:2377

#将所有节点上的所有容器完整删除,任务也将完整删除

192.168.22.175node1

"Engine": {

# /etc/sysconfig/docker

Experimental: false

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为有一另一一5个 整体,否则 通过有一另一一5个 入口统一管理哪此Docker主机上的各种Docker资源。Swarm和Kubernetes比较这名于,否则 更加轻,具有的功能也较kubernetes更少许多。

建立容器并且先创建有一另一一5个 overlay 的网络,用来保证在不同主机上的容器网络互通的网络模式

pmn1fi6lj421        dockernet           overlay             swarm

inspect     Display detailed informationononeormore services

o9w529mmttsw  nginx-cluster.3nginx:latest  node1    Running        Preparing2seconds ago

Swarm cluster的创建过程

**Swarm: active

2)Spread

node2

},

twytwc5dlp77vu1b7cakks9w2    node2     Ready   Active

elyfa6h1lx5o2s98une5vas4x *  manager   Ready   Active        Leader

}

WARNING: bridge-nf-call-ip6tables is disabled

[root@manager ~]# docker service update --image nginx:new nginx-cluster

192.168.22.178node2

64bytesfromnode2(192.168.22.178): icmp_seq=2ttl=64time=1.95ms

1、Swarm v1它是master-slave架构。须要通过服务发现来选举出管理节点,其它各个节点通过运行agent来接受管理节点的统一管理

seccomp

},

PINGnode2(192.168.22.178) 56(84) bytes of data.

5、其它常用命令介绍

1、节点

"Name":"overlay"

Heartbeat Tick: 1

[root@manager ~]# docker service ps nginx-cluster

1)批量创建服务

Logging Driver: journald

tcuv2p8wd6rvmwg39pdav5ozk    node1     Ready   Active

scale       Scale oneormultiple replicated services

"Name":"host"

Node Address: 192.168.22.177

Storage Driver: overlay2

"Type":"Network",

cfz8dkx9p6ih  nginx-cluster.4nginx:latest  node2    Running        Preparing2seconds ago

Swarm命令行说明

--- node2 ping statistics ---

4、节点故障

Nodes: 1

4)调度机制

ps#列出有一另一一5个 或多个服务中的任务信息

ClusterID: vi716cgvw33gzicrfqopasf9p

swarm集群提供给用户管理集群内所有容器的操作接口与使用一台Docker主机基本相同。

"NanoCPUs": 2000000000,

Debug Mode (server): false

2)强大的集群的容错性

leave#从集群中删除某个节点,强制删除加参数--force 

}

wxshzhdvq52y        ingress             overlay             swarm

IDNAMEIMAGENODEDESIREDSTATECURRENTSTATEERRORPORTS

Trying to pull repository docker.io/portainer/portainer ...

在同等条件下,Spread 策略会选则运行容器相当于的那台节点来运行新的容器,binpack 策略会选则运行容器最集中的那台机器来运行新的节点。使用 Spread 策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦有一另一一5个 节点挂掉了只会损失少累积的容器。

[root@manager ~]# docker ps

"Index": 9

Commands:

Task History Retention Limit: 5

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

"Status": {

#否则 加入集群时报错如下

Name: manager

"Name":"bridge"

1、布署服务前创建于个用于集群内不同主机之间容器通信的网络

To add a manager tothisswarm, run'docker swarm join-token manager'andfollow the instructions.

Server Version: 1.13.1

ID            NAME             IMAGE         NODE     DESIRED STATE  CURRENT STATE           ERROR  PORTS

f8b0b2e514eb   nginx@sha256:3e2ffcf0edca2a4e9b24ca442d227baea7b7f0e33ad654ef1eb2006fbd9bedcf0"nginx -g 'daemon ..."3minutes ago   Up3minutes200/tcp  nginx-cluster.4.cfz8dkx9p6ih40lwwwvd96xdg

192.168.22.177manager

init#初始化集群

2、Swarm v2集群是自动通过Raft协议分布式选举出管理节点,不须要配置发现服务,从而解决发现服务的单点故障问題。且它自带了DNS负载均衡和对组织组织结构负载均衡机制的支持

服务主要是在工作节点上执行任务,创建服务时,须要指定容器的镜像。

psListthe tasksofa service

a9d720079fdc7  nginx@sha256:3e2ffcf0edca2a4e9b24ca442d227baea7b7f0e33ad654ef1eb2006fbd9bedcf0"nginx -g 'daemon ..."22seconds ago      Up22seconds200/tcp     nginx-cluster.1.7t7xjpmao5335zaa8wp0c896a

1e6bb16f8cb1: Pull complete 

5、查看下当前的信息

Operating System: CentOS Linux 7 (Core)

太难看出,docker service 嘴笨 不仅仅是批量启动服务没办法 简单,要是在集群中定义了一种生活情况汇报。Cluster 会持续检测服务的健康情况汇报并维护集群的高可用性。

Swarm 调度策略

root119811110:55?00:00:00/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json -H 0.0.0.0:2375 -H unix:///var/run/docker.sock --selinux-enabled --log-driver=journald --signature-verification=false--storage-driver overlay2

promote#将有一另一一5个 或多个节点提升为管理节点

# Modify these options if you want to change the way the docker daemon runs

[root@manager ~]# ping node1

^C

},

CPUs: 1

[root@node1 ~]#  docker swarm join --token SWMTKN-1-32h92m334z200z270d4duqdc3ysl1oyrjmxe1upyyfjyln12xxa-4gm2003mczorxgh6751n5q7jya  192.168.22.177:2377

[root@manager ~]# ps -ef|grep docker

[root@manager ~]# docker service --help 

docker swarm join \

Default Runtime: docker-runc

#否则 集群中节点趋于稳定故障,会从swarm集群中被T除,否则 利用自身的负载均衡及调度功能,将服务调度到其它节点上

createCreateanewservice

=1ttl=64time=9.70ms

节点,是有一另一一5个 已加入到docker swarm集群中的有一另一一5个 容器实例。

[root@node2 ~]# docker ps

Swarm Cluster模式的组织结构

Volume: local

^C

Plugins: 

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

"Platform": {

docker swarm:集群管理

[root@manager ~]# docker pull swarm

},

Run'docker service COMMAND --help'formore informationona command.

k7lupo9xu0cn  nginx-cluster  replicated1/1nginx:latest

},

3、所有节点下载swarm镜像文件

Status: Downloaded newer imagefordocker.io/portainer/portainer:latest

1)发现 Docker 集群中的各个节点,分发节点情况汇报、角色信息,并监视节点情况汇报的变化

root12076118220010:55pts/000:00:00grep --color=auto docker

798b3bea009792321519f5b7144e357ce9c5cea3b9341b5276a4d29f7571684a

7t7xjpmao533  nginx-cluster.1nginx:latest  manager  Running        Running2hours ago

[root@manager ~]# docker network ls

#在manager节点上查看情况汇报信息

OPTIONS='-H 0.0.0.0:2375 -H unix:///var/run/docker.sock --selinux-enabled --log-driver=journald --signature-verification=false'

"ManagerStatus": {

[root@manager ~]#dockerservicepsnginx-cluster

=1ttl=64time=3.64ms

任务是在容器中执行的命令

"Name":"macvlan"

"Role":"manager",

[root@manager ~]# docker info

192.168.22.178node2

Network: bridge host macvlan null overlay

OSType: linux

[root@manager ~]# docker node ls

[root@manager ~]# docker service ps nginx-cluster

8qp5kryo62ha\_nginx-cluster.3nginx:latestnode1ShutdownFailed10minutesago"startingcontainerfailed:sh…"

join#将节点加入集群

4、服务副本与全局服务

4、Task

Running: 0

d913c7a275fe        bridge              bridgelocal

latest: Pulling from docker.io/library/swarm

[root@manager ~]# docker node ls

顾名思义,要是随机选则有一另一一5个 Node 来运行容器,一般用作调试用,spread 和 binpack 策略会根据各个节点的可用的 CPU, RAM 以及正在运行的容器的数量来计算应该运行容器的节点。

NodeID: elyfa6h1lx5o2s98une5vas4x

1、Swarm

},

192.168.22.177:2377

Insecure Registries:

[root@manager ~]# docker node update --availability drain node2

[root@manager ~]# docker rm nginx-cluster

--help   Print usage

"State":"ready",

docker-swarm布署服务

#从输出结果可以 看出否则 将服务动态扩容至5个,也要是5个容器运行着相同的服务

4、创建swarm并初始化

ID            NAME           MODE        REPLICAS  IMAGE

所谓的调度其主要功能是 cluster 的 server 端去选则在哪个服务器节点上创建并启动有一另一一5个 容器实例的动作。它是由有一另一一5个 装箱算法和过滤器组合而成。每次通过过滤器(constraint)启动容器的并且,swarm cluster 都不调用调度机制筛选出匹配约束条件的服务器,并在这顶端运行容器。

3)创建并启动 API 监听服务模块

2、服务、任务、容器

CONTAINER ID  IMAGE                 COMMAND        CREATED        STATUS        PORTS                    NAMES

#登录node2查看正在运行的容器,发现与管理节点上显示的结果相同,node2上运行有一另一一5个 容器

"CreatedAt":"2018-06-14T15:01:19.8200821157Z",

join-token#管理加入令牌

twytwc5dlp77vu1b7cakks9w2    node2     Ready   Drain

Swarm集群目前有有一另一一5个 版本:V1、V2

elyfa6h1lx5o2s98une5vas4x *  manager   Ready   Active        Leader

#当前节点的信息,许多 *表示当前连接在许多 节点上

eac1d68d35d7        host                hostlocal

EOF

},

ls#列出集群中的节点

Managers: 1

REPOSITORY       TAG      IMAGE ID      CREATED      SIZE

[root@manager ~]# docker ps

Kernel Version: 3.10.0-693.el7.x86_64

scale#扩展有一另一一5个 或多个服务

7、管理节点查看集群节点情况汇报

--- node1 ping statistics ---

Containers: 0

]

3、在线动态扩容服务

Binpack 策略最大化的解决容器碎片化,要是说 binpack 策略尽否则 的把还未使用的节点留给须要更大空间的容器运行,尽否则 的把容器运行在有一另一一5个 节点顶端。

{

Stopped: 0

[root@manager ~]# docker service create --replicas 1 --network dockernet --name nginx-cluster -p 200:200 nginx

"EngineVersion":"1.13.1",

PINGnode1(192.168.22.175) 56(84) bytes of data.

ls#列出服务

[root@manager ~]# docker service ls

ps#列出有一另一一5个 或多个节点上运行的任务

"Name":"local"

9p35iunijoronginx-cluster.5nginx:latestnode2RunningRunning9minutesago

runc version: e9c345b3f906d5dc5e8200b05ce37073a811c74a (expected: 9df8b2006d01f59d3a20029be411de015b72004dd8f)

#执行顶端的命令后,当前的服务器就加入到swarm集群中,同都不产生有一另一一5个 唯一的token值,其它节点加入集群时须要用到许多 token。

},

7t7xjpmao533nginx-cluster.1nginx:latestmanagerRunningRunning2hoursago

node2

inspect#列出有一另一一5个 或多个服务的完整信息

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:744677563

--token SWMTKN-1-32h92m334z200z270d4duqdc3ysl1oyrjmxe1upyyfjyln12xxa-4gm2003mczorxgh6751n5q7jya \

NETWORK ID          NAME                DRIVER              SCOPE

"Architecture":"x86_64",

elyfa6h1lx5o2s98une5vas4x *  manager   Ready   Active        Leader

mao4htxp7afr\_nginx-cluster.3nginx:latestnode1ShutdownFailed9minutesago"startingcontainerfailed:sh…"

updateUpdatea service

"Spec": {

k7lupo9xu0cn  nginx-cluster  replicated  5/5       nginx:latest

[root@manager ~]# docker node ls

#将服务缩减到有一另一一5个

0d90a7ef0797: Pull complete

{

containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)

#所有节点加进去去顶端标记的累积,开启2375端口

Init Binary: /usr/libexec/docker/docker-init-current

192.168.22.177manager

2packets transmitted,2received,0% packet loss, time2003ms

3)服务节点的可扩展性

{

Is Manager: true

"Resources": {

dockerd-c11981root5u  IPv6418290t0TCP *:2375(LISTEN)

2、Node

#更新服务的镜像版本

nginx-cluster scaled to5

c5986aec6119        none                nulllocal

Backing Filesystem: xfs

除了顶端使用scale来实现在线动态扩容、缩容之外,还可以 使用update来对服务进行调整

Expiry Duration: 3 months

Number of Docker Hooks: 3

Runtimes: docker-runc runc

Security Options:

create#创建有一另一一5个 新的服务

{

[root@manager ~]# docker service ls

"Type":"Network",

具体安装过程参考前面的文章

pmn1fi6lj421hn1nk7652m41h

lsListservices

Manager Addresses:

docker stack/deploy:试验组织结构,用于多应用部署

3)Binpack

[root@manager ~]# docker swarm init --advertise-addr 192.168.22.177

d85c120077b82: Pull complete 

3、Service

Orchestration:

unlock#解锁集群

ID            NAME           MODE        REPLICAS  IMAGE

COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

c737cf269524        docker_gwbridge     bridgelocal

Number of Old Snapshots to Retain: 0

"Type":"Volume",

"Type":"Network",

fhiecco742y4\_nginx-cluster.3nginx:latestnode1ShutdownFailed10minutesago"startingcontainerfailed:sh…"

一旦创建好许多 cluster,就可以 用命令 docker service 批量对集群内的容器进行操作,在启动容器后,docker 会根据当前每个 swarm 节点的负载判断,在负载最优的节点运行许多 task 任务,用”docker service ls” 和”docker service ps + taskID”可以 看一遍任务运行在哪个节点上。容器启动后,有时须要听候一段时间也能完成容器创建。

CA Configuration:

Registry: https://index.docker.io/v1/

[

docker service:服务管理,

{

ID            NAME             IMAGE         NODE     DESIRED STATE  CURRENT STATE            ERROR  PORTS

docker node:节点管理,

[root@manager ~]# ping node2

Dispatcher:

当容器副本中的其中某有一另一一5个 或某哪多少节点宕机后,cluster 会根据当事人的服务注册发现机制,以及并且设定的值–replicas n,在集群中剩余的空闲节点上,重新拉起容器副本。整个副本迁移的过程越多再人工干预,迁移时会是的集群的 load balance 依旧好使!

"Plugins": [

[root@manager ~]# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

Error responsefromdaemon: rpc error: code =13desc = connection error: desc ="transport: x2009: certificate has expired or is not yet valid"

安装布署swarm集群服务

docker-swarm简介

Unable to find image'portainer/portainer:latest'locally

"Version": {

cfz8dkx9p6ihnginx-cluster.4nginx:latestnode2RunningRunning9minutesago

},

[root@manager ~]# tail -3 /etc/hosts

vitsgxpdf3bn  nginx-cluster.2nginx:latest  manager  Running        Running2seconds ago

inspect#显示有一另一一5个 或多个节点的完整信息

Raft:

update#更新集群

docker.io/swarm  latest   ff454b4a0e84  12 days ago  12.7 MB

[root@node2 ~]# docker swarm join --token SWMTKN-1-32h92m334z200z270d4duqdc3ysl1oyrjmxe1upyyfjyln12xxa-4gm2003mczorxgh6751n5q7jya 192.168.22.177:2377

"Type":"Network",

9p35iunijoro  nginx-cluster.5nginx:latest  node2    Running        Preparing2seconds ago

[root@manager ~]# lsof -i :2375

latest: Pullingfromdocker.io/portainer/portainer

rtt min/avg/max/mdev =1.951/5.826/9.701/3.875ms

85bac13497d7: Pull complete 

tcuv2p8wd6rvmwg39pdav5ozk    node1     Ready   Active

[root@manager ~]# systemctl restart docker

使用swarmkit嵌入docker Engine中的集群管理和编排功能。docker容器初始化启动的一种生活模式

[root@node1 ~]#  docker swarm join --token SWMTKN-1-32h92m334z200z270d4duqdc3ysl1oyrjmxe1upyyfjyln12xxa-4gm2003mczorxgh6751n5q7jya 192.168.22.177:2377

"Addr":"127.0.0.1"

Swarm在scheduler节点(leader 节点)运行容器的并且,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random.

Swarm initialized: current node (elyfa6h1lx5o2s98une5vas4x)isnow a manager.

Swarm的基本架构如下图所示

Digest: sha256:4020022f04a3d0c5ce4dbdb200422f24052c20ab7e6d41ebe5723aa649c3833975

f3a4fb244200a   nginx@sha256:3e2ffcf0edca2a4e9b24ca442d227baea7b7f0e33ad654ef1eb2006fbd9bedcf0"nginx -g 'daemon ..."3minutes ago   Up3minutes200/tcp  nginx-cluster.5.9p35iunijorol1d2ikhyj11oi

CONTAINER ID   IMAGE                                                                           COMMAND                  CREATED             STATUS              PORTS     NAMES

WARNING: You're not using the default seccomp profile

rm          Remove oneormore services

Digest: sha256:2933caa6e578e94b5d91429ea7f47ae9741ee11b71d7cb740e76c5f234cc1d87

64 bytesfromnode2(192.168.22.178): icmp_seq

Profile: /etc/docker/seccomp.json

"Hostname":"manager",

tcuv2p8wd6rvmwg39pdav5ozk    node1     Ready   Active

[root@manager ~]# docker node inspect self

2)初始化组织组织结构调度(scheduler)模块

"OS":"linux"

{

64bytesfromnode1(192.168.22.175): icmp_seq=2ttl=64time=1.64ms

nginx-cluster

root1198611981010:55?00:00:00/usr/bin/docker-containerd-current -lunix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0--start-timeout2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc --runtime-args --systemd-cgroup=true

798b3bea0097  portainer/portainer"/portainer"6seconds ago  Up5seconds0.0.0.0:9000->9000/tcp   amazing_snyder

init version: 5b117de7f824f3d3825737cf09581645abbe35d4 (expected: 949e6facb77383876aeff8a6944dde66b20089574)

#--replicas 指定副本数量

rtt min/avg/max/mdev =1.648/2.644/3.641/0.997ms

ID            NAME           MODE        REPLICAS  IMAGE

Status: Downloaded newer image for docker.io/swarm:latest

1)Random

Images: 1

[root@manager ~]# docker service ls

CONTAINER ID   IMAGE                                                                           COMMAND                  CREATED         STATUS        PORTS   NAMES

f13cun1wyxltnginx-cluster.3nginx:latestmanagerRunningRunning9minutesago

{

"MemoryBytes": 2402566144

Manage services

]

2packets transmitted,2received,0% packet loss, time2006ms

#注意服务器时间同步问題,解决即可。

配置docker

[root@manager ~]# docker service update --replicas 2 nginx-cluster

rm#删除有一另一一5个 或多个服务

Registries: docker.io (secure)

Swarm 的Web管理

[root@manager ~]# docker node update --availability active node2

[root@manager ~]# docker service scale nginx-cluster=5

浏览器访问

[root@manager ~]# docker network create -d overlay dockernet

1、修改主机名,配置hosts文件

群内提供免费的Java架构学习资料(顶端有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用当事人每一分每一秒的时间来学习提升当事人,并不再用"没办法 时间“来掩饰当事人思想上的懒惰!趁年轻,使劲拼,给未来的当事人有一另一一5个 交代!

Trying to pull repository docker.io/library/swarm ...

Swarm 工作法律措施

To add a worker tothisswarm, run the following command:

"UpdatedAt":"2018-06-14T15:01:20.472379584Z",

elyfa6h1lx5o2s98une5vas4x *  manager   Ready   Active        Leader

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

[root@manager ~]# cat >>/etc/hosts<<EOF

6、将node1,node2加入到集群中

Cgroup Driver: systemd

d1e017099d17: Pull complete

ID: 653Y:7CME:GFPW:35SX:IGZL:UJP7:YSPZ:4OMV:J4EV:Z6FS:WFW2:YYHS

[root@manager ~]# vim /etc/sysconfig/docker

Docker Root Dir: /var/lib/docker

Election Tick: 3

k7lupo9xu0cnd5ng1g4f7i7jx

Architecture: x86_64

2、创建服务(nginx为例)

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

Native Overlay Diff: true

Snapshot Interval: 20000

"Type":"Network",

Swarm许多概念说明

This node joined a swarmasa worker.

"ID":"elyfa6h1lx5o2s98une5vas4x",

k7lupo9xu0cn  nginx-cluster  replicated  2/2       nginx:latest

}

"Leader":true,

#--advertise-addr 表示swarm集群中其它节点使用顶端的IP地址与管理节点通讯,顶端也提示了其它节点如保加入集群的命令。

[root@manager ~]# docker node ls

rm#从集群中删除停止的节点,--force强制删除参数

update#更新服务

},

Debug Mode (client): false

"Reachability":"reachable",

Total Memory: 2.238 GiB