docker三剑客协作部署集群

前言

主要目录是讲解三剑客之间的使用关系以及各自的角色。
需要具备知识docker-compose命令行和文件书写知识,docker命令,docker-swarm命令,docker-compose命令
Compose 命令说明
docker-compose.yml 配置文件编写详解
Docker Compose 配置文件详解(V3)
官方配置详情
官方样例配置

三剑客简介

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或更高版本。
参考阿里云CentOS环境之docker安装,启动,加速器,docker-compose(十四)

docker-swarm操作

参考阿里云CentOS环境之-实战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命令:

扫描二维码关注公众号,回复: 1117077 查看本文章
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-compose.yml 配置文件编写详解
部署命令:

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

猜你喜欢

转载自blog.csdn.net/achenyuan/article/details/80454111
今日推荐