内容简介:在k8s出现之后,docker-swarm使用的人越来越少,但在本地集成开发环境的搭建上,使用它还是比较轻量级的,它比docker-compose最大的好处就是容器之间的共享和服务的治理,你不需要links容器,也不知道关心失败之后的重启,这些都于swarm来实现。configserver是比较低层的服务,所有项目的配置都来自于这个服务,我们拿eureka配置为例,如果项目从配置中心拿不到它的配置,会使用默认的localhost:8761做为连接地址,这在某些不是localhost:8761的环境下,这简
在k8s出现之后,docker-swarm使用的人越来越少,但在本地集成开发环境的搭建上,使用它还是比较轻量级的,它比docker-compose最大的好处就是容器之间的共享和服务的治理,你不需要links容器,也不知道关心失败之后的重启,这些都于swarm来实现。
对于docker-compose和docker-swarm的分工
- docker-compose用来进行镜像的编排,同时将多个相关镜像构建
- 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远程,而如果太依赖远程也不是好事 ,你可以把仓库下载到本地,然后挂载到容器目录即可,但在进行操作时也有一些需要注意的点:
- 配置中心的目录必须是git仓库,默认是master分支
- 使用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部署环境
eureka.instance.hostname
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容器注意事项:命令结束容器退出
- AndroidStudio配置注意事项
- JWT使用一些注意事项
- 编写智能合约的注意事项
- 写出优美Java代码注意事项
- 使用 Spring AOP 注意事项
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux命令行与shell脚本编程大全 第3版
[美]布鲁姆,布雷斯纳汉 / 门佳、武海峰 / 人民邮电出版社 / 2016-8-1 / CNY 109.00
这是一本关于Linux命令行与shell脚本编程的全方位教程,主要包括四大部分:Linux命令行,shell脚本编程基础,高级shell脚本编程,如何创建实用的shell脚本。本书针对Linux系统的最新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的shell脚本。一起来看看 《Linux命令行与shell脚本编程大全 第3版》 这本书的介绍吧!