当前位置: 首页 > 工具软件 > ue4-docker > 使用案例 >

Docker容器之Docker Swarm集群详解(下)

蒋昊天
2023-12-01

目录

多服务Swarm集群部署

Swarm中使用Volume存储卷

Docker和K8s的关系与区别

Swarm和K8s的区别


多服务Swarm集群部署

1、编写docker-compose.yml文件

Docker三剑客中有个compose,compose是对一台机器进行统一编排的,通过docker-compose.yml的文件实现,这里我们就可以结合compose和swarm进行多服务的编排。

[root@manager ~]# mkdir swarm-test
[root@manager ~]# cd swarm-test
[root@manager swarm-test]# vim docker-compose.yml 
version: "3"
services:
  nginx01:
    image: nginx
    ports:
      - 8888:80
    deploy:
      mode: replicated
      replicas: 3
  redis01:
    image: redis
    ports:
      - 8379:6379
    deploy:
      mode: replicated
      replicas: 5

2、通过yml文件部署服务

[root@manager swarm-test]# docker stack deploy -c docker-compose.yml deploy_daemon
Creating network deploy_daemon_default
Creating service deploy_daemon_nginx01
Creating service deploy_daemon_redis01

# 通过上面的执行过程可以看出这样创建会默认创建一个网络并使用它,名字都是我们给的名字的前缀加上服务名

查看创建的服务

[root@manager swarm-test]# docker stack ls
NAME            SERVICES   ORCHESTRATOR
deploy_daemon   2          Swarm

[root@manager swarm-test]# docker service ls
ID             NAME                    MODE         REPLICAS   IMAGE          PORTS
khvaldmikzj8   deploy_daemon_nginx01   replicated   3/3        nginx:latest   *:8888->80/tcp
vfq0gscm43f6   deploy_daemon_redis01   replicated   5/5        redis:latest   *:8379->6379/tcp

[root@manager swarm-test]# docker service ps deploy_daemon_nginx01
ID             NAME                      IMAGE          NODE      DESIRED STATE
pjr79efkir0z   deploy_daemon_nginx01.1   nginx:latest   worker2   Running
rfgcpzhipck0   deploy_daemon_nginx01.2   nginx:latest   worker1   Running
5stjpf29bck2   deploy_daemon_nginx01.3   nginx:latest   manager   Running

[root@manager swarm-test]# docker service ps deploy_daemon_redis01
ID             NAME                      IMAGE          NODE      DESIRED STATE
1hjqj3z3taes   deploy_daemon_redis01.1   redis:latest   worker2   Running
826al8vfk5yw   deploy_daemon_redis01.2   redis:latest   worker1   Running
uhxtl1rdvtyd   deploy_daemon_redis01.3   redis:latest   manager   Running
qeko1g6sfo1k   deploy_daemon_redis01.4   redis:latest   worker2   Running
ogsnl5r950c3   deploy_daemon_redis01.5   redis:latest   manager   Running

3、对端口进行测试

192.168.58.151:8888
192.168.58.152:8888
192.168.58.153:8888

Swarm中使用Volume存储卷

1、查看volume的帮助信息

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

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

Run 'docker volume COMMAND --help' for more information on a command.

2、创建一个volume

[root@manager ~]# docker volume create --name volume01
volume01

# 查看创建的volume
[root@manager ~]# docker volume ls
DRIVER    VOLUME NAME
local     volume01

# 查看volume详情
[root@manager ~]# docker volume inspect volume01
[
    {
        "CreatedAt": "2021-10-20T17:01:49+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/volume01/_data",
        "Name": "volume01",
        "Options": {},
        "Scope": "local"
    }
]

3、创建新的服务并挂载volume01(以nginx为例)

[root@manager ~]# docker service create --name nginx01 --replicas 3 --mount type=volume,src=volume01,dst=/suda -p 8080:80 nginx
kwrhuki0n9zg5o60wbxlea1gk
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 

# 参数src写成source也可以;dst表示容器内的路径,也可以写成target

# 查看创建服务
[root@manager ~]# docker service ls
ID             NAME      MODE         REPLICAS   IMAGE          PORTS
kwrhuki0n9zg   nginx01   replicated   3/3        nginx:latest   *:8080->80/tcp
[root@manager ~]# docker service ps nginx01
ID             NAME        IMAGE          NODE      DESIRED STATE  CURRENT STATE
ue2qky4tcdft   nginx01.1   nginx:latest   worker2   Running        Running 6 minutes ago 
q4csv0hz4w3f   nginx01.2   nginx:latest   worker1   Running        Running 6 minutes ago 
cqdazhco2ld5   nginx01.3   nginx:latest   manager   Running        Running 6 minutes ago

查看是否挂载成功

# 进入容器内操作
[root@manager ~]# docker exec -it 1fd75349b440 /bin/bash
root@1fd75349b440:/# cd suda
root@1fd75349b440:/suda# echo "huyuxuan" >test.txt
root@1fd75349b440:/suda# ls
test.txt

# 在本地路径中查看是否挂载成功
[root@manager ~]# cd /var/lib/docker/volumes/volume01/_data
[root@manager _data]# ls
test.txt
[root@manager _data]# cat test.txt 
huyuxuan

Docker和K8s的关系与区别

Docker作为单一的容器技术工具并不能很好地定义容器的“组织方式”和“管理规范”,难以独立地支撑起生产级大规模容器化部署的要求。因此容器技术的发展就迅速走向了以Kubernetes为代表的“容器编排”的技术路线,而这也是为什么Docker容器没有直接在生产环境中大规模部署的关键原因。

从背景上说,Kubernetes是由Google与RedHat公司共同主导的开源“容器编排”项目,它起源于Google公司的Borg系统。所以它在超大规模集群管理方面的经验要明显优于其他容器编排技术,加上Kubernetes在社区管理方面的民主化,使得它很快打败了Docker公司推出的容器编排解决方案(Compose+Swarm)。

Docker和Kubenetes之间的关系其实很简单,我们用Kubernetes去管理Docker集群,其实就可以将Docker看成是Kubernetes内部使用的低级别组件。

Swarm和K8s的区别

Swarm是Docker公司自己发布的一套用来管理Docker集群的较为简单的工具。

K8s是谷歌项目下的容器编排工具,是Google多年大规模容器管理技术的开源版本,起源于Google公司的Borg系统,是众多厂商推崇的docker管理优秀之作,同时K8s也是云原生基金会的项目之一。

K8s的集群管理更趋于完善稳定,性能和功能要比Swarm有优势。

K8s属于Google的生态系统,从未来的更新与发展方面考虑,在容器编排工具上来说,选择K8s要优于Swarm。

 类似资料: