Docker swarm集群与Docker compose编排工具

Docker swarm

  • 环境准备

    1、准备三台已近安装docker engine的centos/Ubuntu系统主机(docker版本必须在1.12以上的版本,老版本不支持swarm)
    
    2、docker容器主机的ip地址固定,集群中所有工作节点必须能访问该管理节点
    
    3、集群管理节点必须使用相应的协议并且保证端口可用
    集群管理通信:TCP,端口2377    
    节点通信:TCP和UDP,端口7946    
    覆盖型网络(docker网络):UDP,端口4789   overlay驱动    
    说明:三台容器主机的ip地址分别为:
    192.168.200.162(管理节点)
    192.168.200.163(工作节点)
    192.168.200.158(工作节点)
    主机名称分别为:manager1、work1以及work2
    vim /etc/hostname  (修改完成后需要重启)
    
  • 创建docker swarm

    1、在manager1机器上创建docker swarm集群
    docker swarm init ‐‐advertise‐addr 192.168.200.162
    (‐‐advertise‐addr将该IP地址的机器设置为集群管理节点;如果是单节点,无需该参数)
    
    2、查看管理节点集群信息:
    docker node ls
    
  • 向docker swarm中添加工作节点:在两个工作节点中分别执行如下命令,ip地址是manager节点的

    1、添加两个work节点
    docker swarm join ‐‐token xxx 192.168.200.162:2377  (worker1)
    docker swarm join ‐‐token xxx 192.168.200.162:2377  (worker2)
    (‐‐token xxx:向指定集群中加入工作节点的认证信息,xxx认证信息是在192.168.200.162创建docker swarm时产生的)
    
    2、继续查看管理节点集群信息与之前的区别
    docker node ls
    
  • 在docker swarm中部署服务(管理节点运行)

    • 在Docker Swarm集群中部署服务时,既可以使用Docker Hub上自带的镜像来启动服务,也
      可以使用自己通Dockerfile构建的镜像来启动服务。
    • 如果使用自己通过Dockerfile构建的镜像来启动服务那么必须先将镜像推送到Docker Hub中心仓库。(alpine镜像为Docker Hub上随便选取的一个镜像)
    docker service create ‐‐replicas 1 ‐‐name helloworld alpine ping docker.com
    docker service create指令:用于在Swarm集群中创建一个基于alpine镜像的服务
    	‐‐replicas参数:指定了该服务只有一个副本实例
    	‐‐name参数:指定创建成功后的服务名称为helloworld
    	ping docker.com指令:表示服务启动后执行的命令
    
  • 查看docker swarm集群中的服务

    查看服务列表:docker service ls
    查看部署具体服务的详细信息:docker service inspect 服务名称
    查看服务在集群节点上的分配以及运行情况:docker service ps 服务名称
    
  • 修改副本数量

    在manager1上,更改服务副本的数量(创建的副本会随机分配到不同的节点)
    docker service scale helloworld=5
    
  • 删除服务(在管理节点)

    docker service rm 服务名称
    
  • 访问服务

    1、查看集群环境下的网络列表:docker network ls
    
    2、在manager1上创建一overlay为驱动的网络(默认使用的网络连接ingress)
    docker network create ‐d=overlay my‐multi‐host‐network
    
    3、在集群管理节点manager1上部署一个nginx服务
    docker service create \
      ‐‐network my‐multi‐host‐network \
      ‐‐name my‐web \
      ‐p 8080:80 \
      ‐‐replicas 2 \
      nginx
    
    4、在管理节点查看服务的运行情况:
    docker service ps my‐web
    

Docker compose

安装docker compose

1、环境要求:Docker Compose是依赖于Docker引擎的,所以在安装Docker Compose之前
要确保机器上已经安装了Docker。https://github.com/docker/compose/releases(查看docker compose版本)

2、下载docker‐compose工具
curl ‐L
https://github.com/docker/compose/releases/download/1.24.0/docker‐
compose‐`uname ‐s`‐`uname ‐m` ‐o /usr/local/bin/docker‐compose

3、设置docker compose可执行文件权限
chmod +x /usr/local/bin/docker‐compose
r:read  w:write x:ex

4、查看docker compose版本
docker‐compose ‐‐version
PS:卸载docker compose
sudo rm /usr/local/bin/docker‐compose

使用(在创建的一个空目录下执行)

  • 编写Dockerfile文件(为每个服务构建需要的镜像,方便迁移‐不是必须的)
  • 编写docker‐compose.yml文件(编写部署服务相关指令)
  • 运行docker‐compose up(启动yml文件中服务)
1、准备:两个镜像
docker pull mysql:5.7
#一个博客系统镜像
docker pull wordpress

2、需要新建一个空白目录,例如rwtest。新建一个docker‐compose.yml,编辑该文件:
version: '3'
#创建服务的容器
services:
   #db容器
   db:
     image: mysql:5.7
     volumes:
       ‐ db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress       
   #wordpress容器
   wordpress:
     depends_on:
       ‐ db
     image: wordpress:latest
     ports:
       ‐ "8001:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
       
该文件中内容:新建db和wordpress容器。等同于:
docker run ‐‐name db ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
docker run ‐‐name some‐wordpress ‐‐link db:mysql ‐p 8002:80 ‐d wordpress


3、启动docker compose
docker‐compose up


4、浏览器访问:http://ip:8001


5、停止/重启服务:docker‐compose stop/restart

docker compose 指令说明

#例子
 1 version: '3'  
 2 services:  
 3   web:  
 4     image: id/imagename:lable  
 5     restart: on‐failure  
 6     container_name: my‐web‐container  
 7     ports:  
 8       ‐ 8080:8080  
 9    networks:    
 10       ‐ example‐net 
 11     depends_on: 
 12       ‐ db 
 13     deploy: 
 14       replicas: 2 
 15       restart_policy: 
 16         condition: on‐failure 
 17   db: 
 18     image: mysql:5.6 
 19     restart: on‐failure 
 20     container_name: my‐mysql‐container    
 21     ports: 
 22       ‐ 3306:3306 
 23     volumes: 
 24       ‐ example‐mysql:/var/lib/mysql 
 25     networks: 
 26       ‐ example‐net 
 27     environment: 
 28       MYSQL_ROOT_PASSWORD: root 
 29       MYSQL_DATABASE: mysql_database 
 30     deploy: 
 31       replicas: 1 
 32       restart_policy: 
 33         condition: on‐failure 
 34       placement: 
 35         constraints: [node.role == manager] 
 36 networks: 
 37   example‐net: 
 38 volumes: 
 39   example‐mysql:
  • version :version通常在一个docker-compose.yml文件的最顶部,用来表示文件内容的约束版本(类似于XML文件约束)(版本越高,支持的指令越多)
  • services 用来声明服务,在services下的所有同缩进的应用名称都代表一个服务,如上面示例中的web和db。在进行多服务部署的时候,有多少个服务需要同时部署,就需要在services参数下面声明并配置多少个服务
    • image :容器启动需要依赖的镜像(如果本地没有会自动pull)
    • restart :服务重启策略
      • restart: “no” # 服务默认值为no,即服务失败后没有任何动作
      • restart: always # 表示服务会一直重新启动
      • restart: on-failure # 表示服务提示失败错误后会重新启动
      • restart: unless-stopped # 表示只有服务在停止后才会重启
    • container_name :指定容器名称
    • ports :指定服务向外暴露的端口
    • networks :指定容器使用的网络
    • depends_on :服务依赖决定了服务的依赖关系,如示例中的web依赖db,所以db服务会先于web服务启动,但并不表示db服务完全启动成功后才启动web服务,它只决定启动的先后顺序而已
    • deploy :deploy参数是Docker Compose针对Swarm集群部署提供的,子参数专门用于指定与服务部署和运行相关的配置
      • replicas :表示服务实例的副本数量
      • restart_policy :estart_policy参数同前面介绍的restart类似,都是用来配置服务重启策略的,只是该属性配置在deploy参数下,并只在集群环境下生效。该参数包含多个子属性及属性值
        • condition: on-failure # 表示服务重启的条件,值有none、on-failure和any
        • delay: 5s # 表示重启服务之间等待时间,默认为0
        • max_attempts: 3 # 表示失败后尝试重启的次数
        • window: 120s # 表示等待多久来确定服务是否启动成功
      • placement :placement用来配置指定位置的约束,当服务在Swarm集群环境下部署时会随机分配到管理节点和其他工作节点上。在上述示例中由于将mysql数据挂载到了本机example-mysql数据卷中,所以使用了placement的子参数constraints: [node.role == manager]指定该服务只在manager管理节点上运行 :
    • environment 用于配置服务启动时需要的环境变量。如上述示例中MYSQL_ROOT_PASSWORD表示数据库root用户的密码,MYSQL_DATABASE表示数据库启动后自动创建的数据库。
  • networks :用于配置服务网络
  • volumes :目录挂载,上述示例中是将mysql数据挂载到本地example-mysql数据卷中,如果该数据卷不存在,服务启动时也会默认创建

其他配置可参考:https://docs.docker.com/compose/compose-file/

发布了109 篇原创文章 · 获赞 47 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43934607/article/details/104385540