Docker stack 使用演示案例一

位置:首页>文章>详情   分类: 教程分享 > Linux和Shell教程   阅读(970)   2024-04-13 17:04:29

Docker stack 使用演示案例一

环境准备

  • 安装好docker swarm(本文以1manager+3worker为例)
  • spring boot demo演示项目
  • 通过NFS实现共享目录访问
  • 资源文件 docker-stack.zip(访问密码: 9987)

实现结果

  • 同一个docker swarm集群中不通主机之间可以网络互通(通过overlay网络方式);
  • docker stack部署服务并能实现共享文件访问
程序简单架构
程序简单架构

 

compose文件配置

version: '3.5'
networks:
  stackDemoNetwork:
    #网络类型必须是overlay
    driver: overlay
    external: false
services:
  mysql:
    image: mysql:5.7
    networks:
      - stackDemoNetwork
    ports:
      - "3306:3306"
    environment:
      - MYSQL_DATABASE=demo
      - MYSQL_ROOT_PASSWORD=YOUR_PWD
    command:
      --lower_case_table_names=1
      --character-set-server=utf8
      --collation-server=utf8_general_ci
      --explicit_defaults_for_timestamp=true
      --sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
    volumes:
      #先创建本机目录(这里指定的本机为swarm的manager节点,只部署1个)
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
    deploy:
      placement:
        constraints: [node.role == manager]
      mode: replicated
      replicas: 1
  web:
    image: nginx:1.13-alpine
    ports:
      - "80:80"
    networks:
      - stackDemoNetwork
    volumes: 
       #注意:主机目录必须手动先创建
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/html:/usr/share/nginx/html
    deploy:
      placement:
        constraints: [node.role == manager]
  app:
    image: openjdk:8-alpine
    volumes:
      #sudo mount -t nfs 192.168.79.129:/nfs /share
      #先将demo.jar应用程序拷贝到共享目录
      - /share/demo.jar:/demo.jar
    networks:
      - stackDemoNetwork
    command: ['java','-Xms256M','-Xmx256M','-Duser.timezone=Asia/ShangHai', '-jar', '/demo.jar',"--spring.profiles.active=test"]
    deploy:
      mode: replicated
      replicas: 3


nginx 配置 nginx/conf/default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

	location / {
		proxy_set_header Host $http_host;
		proxy_pass  http://app_upstream;
	}
	
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

upstream app_upstream{
	server app:8080;
}

 

文件结构参考
文件结构参考

 

先将NFS挂载到每一个主机的/share目录下,作为共享目录,并创建compose.yml配置的/share开头的文件夹,必须预先创建,否则通过docker stack命令执行失败

 

启动/更新服务

 

docker 部署结构图
docker 部署结构图

提示,app123的顺序不一定是图中的顺序。

 

sudo docker stack deploy -c docker-compose.yml demo

启动和更新命令一致


启动完成后查看启动结果:
查看启动的stack


查看某个服务的日志:

sudo docker service logs -f  demo_app


查看某个服务日志

 

访问演示

 

访问演示1
访问演示1

 

多次访问
多次访问

通过多次访问可以看到,ip地址变化等于访问了不通的容器,每次变化还都能访问到数据库中名字

 

提示:
官方不建议使用NFS作为MySQL的数据挂载目录,建议直接使用宿主机目录

 


 

 

地址:https://www.leftso.com/article/1066.html

相关阅读

Docker stack 使用演示案例一环境准备安装好docker swarm(本文以1manager+3worker为例)spring boot demo演示项目通过NFS实现共享目录访问资源...
环境准备docker swarm 集群环境NFS服务资源文件docker-mutil-stack.zip(访问密码: 9987)1.创建overlay网络网络名称:stackMutilNetwo...
Docker swarm 简介Docker swarm 集群,Docker swarm是docker官方提供的一种集群方式,用于小量微服务部署还算不错,比庞大的k8s体系更轻量。节点 运行 Do...
Docker swarm 集群NFS共享目录 NFS 主机安装服务端服务端安装命令如下:sudo apt install nfs-kernel-server -yNFS服务端安装 服务端配置NF...
Docker overlay网络_Docker 集群网络overlay网络overlay网络用于连接不同机器上的docker容器,允许不同机器上的容器相互通信,同时支持对消息进行加密,当我们初始...
网络信息 主机1 192.168.79.128主机2 192.168.79.133主机1/2关闭防火墙sudo ufw disable  修改 docker0 ip  sudo vi /lib/...
Docker安装部署Redisdocker 安装部署Redis环境Linux系统dockerdocker-compose 相关文章:Ubuntu 在线安装 Docker-左搜 (leftso.c...
docker 常用命令整理(持续更新)docker运行容器资源相关 查看所有运行docker的资源消耗情况docker stats 查看指定运行容器资源消耗情况docker stats 容器ID...
安装篇国外:curl -fsSL https://get.docker.com | bash国内:curl -fsSL https://get.docker.com | bash -s dock...
docker与docker-compose配置文件版本对应关系Compose file version 3 reference  Compose file formatDocker Engine...