在k8s出现之后,docker-swarm使用的人越来越少,但在本地集成开发环境的搭建上,使用它还是比较轻量级的,它比docker-compose最大的好处就是容器之间的共享和服务的治理,你不需要links容器,也不知道关心失败之后的重启,这些都于swarm来实现。

对于docker-compose和docker-swarm的分工

  1. docker-compose用来进行镜像的编排,同时将多个相关镜像构建
  2. docker-swarm用来启动和管理容器,它不能构建镜像

建立compose文件,不支持build,links,depends_on

services:
db:
image: arungupta/couchbase:latest
ports:
- 8091:8091
- 8092:8092
- 8093:8093
- 11210:11210

swarm初始化

docker swarm init

建立服务

docker stack deploy --compose-file=docker-compose-swarm.yml lind

查看所有服务列表

docker stack ls

查看指定服务

docker stack services lind

更新某个服务

docker service update lind_service1 //有时我们的lind_service1依赖于configserver,当后者没有重启动,前者会一直报错,然后使用默认的配置,由于默认配置为localhost,所以就出现了连接失败的情况

删除服务

docker stack  rm lind

删除指定服务列表

docker service rm  $(docker service ls | awk '$2 ~ /lind_service/ {print $1}')

删除某个镜像下的容器

docker rm -f $(docker ps | awk '$2 ~ /lind/ {print $1}')

痛点

configserver是比较低层的服务,所有项目的配置都来自于这个服务,我们拿eureka配置为例,如果项目从配置中心拿不到它的配置,会使用默认的localhost:8761做为连接地址,这在某些不是localhost:8761的环境下,这简直就成了灾难。

解决方法:把configserver和eureka两个服务越来后,再把具体项目的容器删除,这时docker service会重新启动具体项目的容器,这时,它们就可以正常工作了。

配置中心使用本地仓库

配置中心的配置文件一般存储在git远程,而如果太依赖远程也不是好事 ,你可以把仓库下载到本地,然后挂载到容器目录即可,但在进行操作时也有一些需要注意的点:

  1. 配置中心的目录必须是git仓库,默认是master分支
  2. 使用docker-comopse部署时,使用volumes把宿主目录挂载到容器目录,例如固定为config_repo,它可以在yml文件里提前声明。
  • compose文件
 configserver:
image: swarm_configserver
ports:
- "6200:6200"
- "6201:6201"
environment:
SPRING_PROFILES_ACTIVE: development
PORT: 6200
BG_PORT: 6201
EUREKA_PORT: 6761
MY_IP: 192.168.170.30
volumes:
- /Users/lind.zhang/github/config_repo:/config_repo
  • bootstramp.yml文件
spring:
profiles: development
cloud:
config:
server:
git:
uri: /config_repo

本机使用docker swarm部署环境

  1. 一定要设置eureka.instance.hostname为宿主机IP,或者容器里feign无法访问,宿主机调试没问题
  2. docker-compose里的服务名要与spring.application.name区分开,避免冲突,前者在容器里可以ping通,后者只在feign里有效
  3. 配置健康检查地址,一般都在application里设置,其它项目配置继承即可
spring:
config:
name: ${spring.application.name}
cloud.config:
allowOverride: true
overrideNone: false
overrideSystemProperties: false
name: ${spring.application.name}
profiles.active: development management:
context-path: /manage #从新设置监控检查的地址,默认为/actuator
security.enabled: false
health:
diskspace.enabled: false
endpoint:
health.enabled: true
endpoints:
web:
path-mapping.health: status
base-path: /manage #since spring boot 2.0.0 M6
expose: info,status,health eureka:
instance:
statusPageUrlPath: ${management.context-path}/info
healthCheckUrlPath: ${management.context-path}/${management.endpoints.web.path-mapping.health}
preferIpAddress: false
hostname: 192.168.170.30
client:
fetchRegistry: true
registryFetchIntervalSeconds: 5
healthcheck:
enabled: true

建立client,成功访问

@FeignClient("service2")
public interface Service2Client {
@GetMapping("/get")
String get();
}
@Autowired
Service2Client service2Client; @GetMapping("/")
public String index() {
return "hello index service1:" + service2Client.get();
}

docker-swarm相关命令和注意事项的更多相关文章

  1. Docker(二十二)-Docker Swarm常用命令

    #查看集群节点 docker node ls #创建nginx服务 #docker pull hub.test.com:5000/almi/nginx:0.1 #下载私有仓库镜像 docker ser ...

  2. Docker Swarm常用命令

    #查看集群节点 docker node ls #创建nginx服务 #docker pull hub.test.com:5000/almi/nginx:0.1 #下载私有仓库镜像 docker ser ...

  3. Docker Swarm 常用命令

    # 管理配置文件 docker config     # 查看已创建配置文件     - docker config ls     # 将已有配置文件添加到docker配置文件中     - dock ...

  4. Docker Swarm的命令

    初始化swarm manager并制定网卡地址docker swarm init --advertise-addr 192.168.10.117 强制删除集群docker swarm leave -- ...

  5. Docker - dockerhub 相关命令

    1. 概述 水一发 docker 命令行里 dockerhub 相关的命令 2. 准备 有一个 dockerhub 的账号 ref dockerhub 3. 命令 登录 docker login 概述 ...

  6. 第9章 Docker Swarm 相关问题

    9.1 我的 Docker 版本是 1.12,请问我跑的是一代 Swarm 还是二代 Swarm 啊? ……自己运行的 Swarm 怎么会连自己都不知道跑的是啥?

  7. docker:相关命令

    1.查看正在运行的容器 docker ps docker ps -a 查看所有的容器,包括已经停止了的 2.WORKDIR Dockerfile中的WORKDIR指令用于指定容器的一个目录,容器启动时 ...

  8. docker swarm学习命令

    引用自:https://blog.csdn.net/wanglei_storage/article/details/77508620 引用自:https://www.cnblogs.com/wj563 ...

  9. Docker Swarm 日常运维命令笔记

    之前介绍了Docker管理工具-Swarm部署记录,这里简单总结下Docker Swarm的日常维护命令,以作为平时运维笔记. Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以 ...

随机推荐

  1. 使用vue-awesome-swiper的相关问题

    最近自己在仿做一个旅游网站的vue项目,在首页中使用了vue-awesome-swiper插件来实现轮播图的效果,发现了以下几种问题: 一.需要额外引入swiper.css 原来使用vue-aweso ...

  2. Run Keyword And Ignore Error,Run Keyword And Return Status,Run Keyword And Continue On Failure,Run Keyword And Expect Error,Wait Until Keyword Succeeds用法

    *** Test Cases ***case1 #即使错误也继续执行,也不记录失败,且可以返回执行状态和错误信息 ${Run Keyword And Ignore Error status} ${st ...

  3. 03SQLALchemy外键约束

    一,配置 1,SQLALchemy的配置单独使用config.py文件2,满足如下要求: #dialect+driver://username:password@host:port/database ...

  4. PHP使用CURL抓取网页

    CURL是一个非常强大的开源库,支持很多协议,包括HTTP.FTP.TELNET等,我们使用它来发送HTTP请求.它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS ...

  5. firewalld的基本使用

    参考原文链接:https://www.cnblogs.com/moxiaoan/p/5683743.html 1.firewalld的基本使用 启动: systemctl start firewall ...

  6. 关于XML

    一.XML定义 XML(eXtensible Markup Language)即可扩展标记语言,它与HTML一样,都是处于SGML,标准通用语言.Xml是Internet环境中跨平台的,依赖于内容的技 ...

  7. Java课程之团队开发(团队介绍)

    一.介绍团队和团队成员 团队名称:凯域软创 团队成员介绍:张某某,崔某某,焦某某,陈某 二.关于团队作品 1.作品名称:课程表 2.你的创意解决了用户的什么需求:查看课程信息的需求 3.你有什么招数用 ...

  8. Centos7 编译安装 Nginx Mariadb Asp.net Core2 (实测 笔记 Centos 7.3 + Openssl 1.1.0h + Mariadb 10.3.7 + Nginx 1.14.0 + Asp.net. Core 2 )

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...

  9. Java Fileupload

    fileupload FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpload齐名. 组件 1.FileUpLoa ...

  10. python基础之面向对象1

    一.面向对象VS面向过程 1.面向过程 2.面向对象 二.类与对象 1.类和对象 (1)基本概念 类和对象的内存图如下: 2.实例成员 (1)实例变量 (2)实例方法: 3.类成员: (1)类变量 ( ...