docker三剑客协作部署集群
发布日期:2021-06-29 14:16:05 浏览次数:2 分类:技术文章

本文共 4376 字,大约阅读时间需要 14 分钟。

前言

主要目录是讲解三剑客之间的使用关系以及各自的角色。

需要具备知识docker-compose命令行和文件书写知识,docker命令,docker-swarm命令,docker-compose命令

三剑客简介

Docker Machine

Docker Machine是一个简化安装Docker环境的工具,主要作用是创建和管理docker主机。一般公司云服务器毕竟少,个人觉得Docker Machine在实际使用中用处不大。直接在云服务器上安装即可。

docker-compose

这个和下面要介绍的docker-swarm用处较大,compose是服务编排,即事先安排好服务的启动,依赖,创建服务的数量等等。主要作用在于服务的安排和部署上。dcoker-compose技术,就是通过一个.yml配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里。便利了复杂的多服务的部署。

docker-swarm

服务的集群。创建docker服务集群。通过暴露的简单的几条api命令实现集群的创建和使用。与docker-compose配合使用。docker-swarm关注的更多的是服务的查询,实际使用中不需要我们手动通过docker-swarm命令创建服务,创建服务交给docker-compose。

开始

安装docker

要求至少版本1.13或更高版本。

参考

docker-swarm操作

参考集群管理创建一个集群。

安装swarm

docker pull swarm

创建集群

docker swarm init --listen-addr 127.0.0.1:8280 --advertise-addr 127.0.0.1

至此集群操作告一段落。上面我说过,docker swarm关注的是集群创建和查询,管理,我们不需要docker service create 手动创建服务,交给docker-compose来做。

docker-compose操作

执行安装docker-compose命令:

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose

写2个yml,一个用于编译,一个用户部署

编译配置文件docker-compose-build.yml:

version: '3'services:  eureka-server:    build: eureka-server    image: eureka-server    ports:      - 8284:8284  service-hi:    build: service-hi    image: service-hi    ports:      - 8286:8286

build指定需要编译的项目,image指定编译成功后镜像名(默认镜像名为当前项目名+服务名)。ports指定端口号

执行编译命令:

docker-compose -f docker-compose-build.yml build

部署配置文件docker-compose.yml:

version: '3'services:  eureka-server:    image: eureka-server    restart: always    ports:      - 8284:8284  service-hi:    image: service-hi    restart: always    ports:      - 8286:8286

image指定部署的镜像名,重点是deploy配置,指定在集群部署里的参数,具体配置建议看

部署命令:

docker stack deploy -c docker-compose.yml getstartedlab

getstartedlab是应用名,启动的服务为应用名+服务名,比如getstartedlab_eureka-server

docker-compose.yml

V3版本配置文件

version: "3"services:  redis:    image: redis:alpine    ports:      - "6379"    networks:      - frontend    deploy:      replicas: 2      update_config:        parallelism: 2        delay: 10s      restart_policy:        condition: on-failure  db:    image: postgres:9.4    volumes:      - db-data:/var/lib/postgresql/data    networks:      - backend    deploy:      placement:        constraints: [node.role == manager]  vote:    image: dockersamples/examplevotingapp_vote:before    ports:      - "5000:80"    networks:      - frontend    depends_on:      - redis    deploy:      replicas: 2      update_config:        parallelism: 2      restart_policy:        condition: on-failure  result:    image: dockersamples/examplevotingapp_result:before    ports:      - "5001:80"    networks:      - backend    depends_on:      - db    deploy:      replicas: 1      update_config:        parallelism: 2        delay: 10s      restart_policy:        condition: on-failure  worker:    image: dockersamples/examplevotingapp_worker    networks:      - frontend      - backend    deploy:      mode: replicated      replicas: 1      labels: [APP=VOTING]      restart_policy:        condition: on-failure        delay: 10s        max_attempts: 3        window: 120s      placement:        constraints: [node.role == manager]  visualizer:    image: dockersamples/visualizer:stable    ports:      - "8080:8080"    stop_grace_period: 1m30s    volumes:      - "/var/run/docker.sock:/var/run/docker.sock"    deploy:      placement:        constraints: [node.role == manager]networks:  frontend:  backend:volumes:  db-data:

与集群协作

例如:

version: '3'services:  eureka-server:    image: chapter11-2_eureka-server    restart: always    ports:      - 8284:8284    deploy:        replicas: 3  service-hi:    image: chapter11-2_service-hi    restart: always    ports:      - 8286:8286    deploy:        replicas: 3

构建镜像

docker-compose -f docker-compose-dev.yml up

相关命令:

部署

语法:docker stack deploy -c <composefile> <appname>

docker stack deploy -c docker-compose.yml getstartedlab

getstartedlab服务的前缀名,相当于app名,里面的每个服务都属于应用下面。

删除服务:

docker stack rm getstartedlab

释放集群(在manager上执行)

docker swarm leave --force

展示应用下有多少服务

docker stack ls

展示应用下具体服务

docker stack ps getstartedlab

删除TAG为none的镜像

rm.sh

#删除TAG为none的容器docker ps --all|grep "`docker images|grep none|awk '{print $3}'`"|awk '{print $1}'|xargs docker rm删除服务名为“oil”,状态为"Exited"的容器docker ps --all|grep "Exited"|grep "oil"|awk '{print $1}'|xargs docker rm#删除TAG为none镜像docker images|grep none|awk '{print $3}'|xargs docker rmi

转载地址:https://chenyuan.blog.csdn.net/article/details/80454111 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:thymeleaf 使用详解
下一篇:阿里云CentOS环境之-实战docker集群swarm(十五)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月12日 18时15分50秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章