Docker swarmkit学习笔记

前提条件:
  • Docker engine 1.12或以上版本
  • 网络:
TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
TCP and UDP port 4789 for overlay network traffic


Create swarm

     --advertise-addr 为可选,如不指定,默认选择eth0网卡的IP。指定时,不支持指定浮动IP。
     输出的信息中,列出了添加work节点的命令和manager节点的命令。
root@docker-1:~# docker swarm init --advertise-addr 192.168.100.23
Swarm initialized: current node (0bw30fkeiredi0fg1pxg710ld) is now a manager.

To add a worker to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-2hayq3edoqv3lc5chpw23e76r8qp67ctx13dcepghdzu9jgngy-0ji06x1fy8pfunlxdy1p2wfm7 \
    192.168.100.23:2377

To add a manager to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-2hayq3edoqv3lc5chpw23e76r8qp67ctx13dcepghdzu9jgngy-00o8m54kldov9bd24mi2dt8gu \
    192.168.100.23:2377
root@docker-1:~#

     添加后,可通过以下命令查看节点信息:
root@docker-1:~# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
0bw30fkeiredi0fg1pxg710ld *  docker-1  Ready   Active        Leader



添加节点

     执行创建swarm步骤中自动生成的命令去添加节点。如忘记该命令,可通过以下命令查询:

root@docker-1:~# docker swarm join-token worker
To add a worker to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-2hayq3edoqv3lc5chpw23e76r8qp67ctx13dcepghdzu9jgngy-0ji06x1fy8pfunlxdy1p2wfm7 \
    192.168.100.23:2377
 
     修改对应的token信息
root@docker-1:~# docker swarm join-token  --rotate worker
To add a worker to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-42vudaylbg4ma3m5u22krw3ivd1rnbc7kryo3frerxo43jdjdm-2fs6gv0me0t158b0ybt0e6fwf \
    192.168.100.23:2377


     添加节点:
root@docker-2:~#     docker swarm join \
>     --token SWMTKN-1-2hayq3edoqv3lc5chpw23e76r8qp67ctx13dcepghdzu9jgngy-0ji06x1fy8pfunlxdy1p2wfm7 \
>     192.168.100.23:2377
This node joined a swarm as a worker.

     节点的升降级
docker node promote node-3 node-2  --将worker升级为manager节点
docker node demote node-3 node-2   -- 将manager节点降级为worker节点




在swarm上部署服务

root@docker-1:~# docker service create --replicas 1 --name helloworld alpine ping www.baidu.com
5ntljnr8mqu94hvdicnqbsxmb
  • docker service create 命令创建服务
  • --name 指定service 的名字为helloworld
  • --replicas指定运行容器的个数

     查看服务运行情况:
root@docker-1:~# docker service ls
ID            NAME       REPLICAS  IMAGE   COMMAND
5ntljnr8mqu9  helloword  1/1       alpine  ping www.baidu.com


检查集群上的服务

root@docker-1:~# docker service inspect --pretty helloword
ID:        5ntljnr8mqu94hvdicnqbsxmb
Name:        helloword
Mode:        Replicated
 Replicas:    1
Placement:
UpdateConfig:
 Parallelism:    1
 On failure:    pause
ContainerSpec:
 Image:        alpine
 Args:        ping www.baidu.com
Resources:

     查看哪些节点运行服务
root@docker-1:~# docker service ps helloword
ID                         NAME         IMAGE   NODE      DESIRED STATE  CURRENT STATE           ERROR
5pujmicjjp25mm1w26m3yz1vk  helloword.1  alpine  docker-1  Running        Running 33 minutes ago 



伸缩service的数量

docker service scale <SERVICE-ID>=<NUMBER-OF-TASKS>

     调整helloworld的数量:
root@docker-1:~# docker service scale helloword=5
helloword scaled to 5



从swarm中删除service

root@docker-1:~# docker service rm helloword
helloword



滚动更新服务

     创建一个redis服务
$ docker service create \
  --replicas 3 \
  --name redis \
  --update-delay 10s \
  redis:3.0.6

0u6a4s31ybk7yw2wyvtikmu50
     --update-delay : 设置更新的时间间隔,seconds Ts, minutes Tm, or hours Th. So 10m30s indicates a 10 minute 30 second delay.
     --update-parallelism  : 设置每次更新的容器数
     --update-failure-action  : 设置更新失败之后的操作

      --update-delay、--update-parallelism 、--update-failure-action参数也可以在 update时指定。
$ docker service update --image redis:3.0.7 redis
redis
     
     更新时的步骤:
  • 停止第一个容器
  • 启动一个容器
  • 如果更新容器返回running,等待设置的时间间隔的时间后,停止下一个容器
  • 如果更新失败,暂停更新



Drain节点

     node设置为drain之后,节点上的容器会自动停止,然后在其他的可用节点上创建新容器。

docker node update --availability drain worker1

worker1

$ docker node update --availability active worker1

worker1



Service相关命令

     基本参数
docker service create --name helloworld \
  --env MYVAR=myvalue \
  --workdir /tmp \
  --user my_user \
  --replicas 3 \
  --publish 8080:80 \
  --network my-multi-host-network \
  --update-delay 10s \
  --update-parallelism 2 \
  --update-failure-action continue \
  alpine ping docker.com

     volume相关
# type=volume,将容器目录映射到卷存储上。docker volume create创建出的卷,可用在此处。
docker service create \
  --mount type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=<DRIVER>,volume-opt=<KEY0>=<VALUE0>,volume-opt=<KEY1>=<VALUE1>
  --name myservice \
  <IMAGE>

# type=bind,将容器目录直接映射在宿主机
docker service create \
  --mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH> \
  --name myservice \
  <IMAGE>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值