docker-swarm相关命令和注意事项
在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为宿主机IP,或者容器里feign无法访问,宿主机调试没问题 - docker-compose里的服务名要与spring.application.name区分开,避免冲突,前者在容器里可以ping通,后者只在feign里有效
- 配置健康检查地址,一般都在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相关命令和注意事项的更多相关文章
- Docker(二十二)-Docker Swarm常用命令
#查看集群节点 docker node ls #创建nginx服务 #docker pull hub.test.com:5000/almi/nginx:0.1 #下载私有仓库镜像 docker ser ...
- Docker Swarm常用命令
#查看集群节点 docker node ls #创建nginx服务 #docker pull hub.test.com:5000/almi/nginx:0.1 #下载私有仓库镜像 docker ser ...
- Docker Swarm 常用命令
# 管理配置文件 docker config # 查看已创建配置文件 - docker config ls # 将已有配置文件添加到docker配置文件中 - dock ...
- Docker Swarm的命令
初始化swarm manager并制定网卡地址docker swarm init --advertise-addr 192.168.10.117 强制删除集群docker swarm leave -- ...
- Docker - dockerhub 相关命令
1. 概述 水一发 docker 命令行里 dockerhub 相关的命令 2. 准备 有一个 dockerhub 的账号 ref dockerhub 3. 命令 登录 docker login 概述 ...
- 第9章 Docker Swarm 相关问题
9.1 我的 Docker 版本是 1.12,请问我跑的是一代 Swarm 还是二代 Swarm 啊? ……自己运行的 Swarm 怎么会连自己都不知道跑的是啥?
- docker:相关命令
1.查看正在运行的容器 docker ps docker ps -a 查看所有的容器,包括已经停止了的 2.WORKDIR Dockerfile中的WORKDIR指令用于指定容器的一个目录,容器启动时 ...
- docker swarm学习命令
引用自:https://blog.csdn.net/wanglei_storage/article/details/77508620 引用自:https://www.cnblogs.com/wj563 ...
- Docker Swarm 日常运维命令笔记
之前介绍了Docker管理工具-Swarm部署记录,这里简单总结下Docker Swarm的日常维护命令,以作为平时运维笔记. Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以 ...
随机推荐
- Windows10用fiddler抓包Android应用(解决手机设置代理后无法上网,设置只抓app包)
1.环境准备 1.电脑上安装fiddler 2.手机和电脑在同一个局域网内 2.设置 1.fiddler>Tools>Fiddler Options>Connections 勾选Al ...
- FCC学习笔记(二)
Nest an Anchor Element within a Paragraph 作为参考,再次看一看a元素的图示: 例如: <p>Here's a <a href="h ...
- 如何使用yql实现跨域访问
应用场景 调用百度的某个API, 例如:https://openapi.baidu.com/api 返回结果是:{"id":123,"name":"t ...
- 关系数据库数据与hadoop数据进行转换的工具 - Sqoop
Sqoop 本文所使用的Sqoop版本为1.4.6 1.官网 http://sqoop.apache.org 2.作用 A:可以把hadoop数据导入到关系数据库里面(e.g. Hive -> ...
- web 11
Obtaining the JSON: 1.首先,我们将把要检索的JSON的URL存储在变量中. 2.要创建请求,我们需要使用new关键字从XMLHttpRequest构造函数创建一个新的请求对象实例 ...
- PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)
Hello!今天我们来学习一下这个神奇的图片处理的第三方函数库——PIL库 (本blog部分图片及代码来自网络) 这是一个支持图像存储.显示和处理的函数库,它能够处理几乎所有图像格式,可以完成对图像的 ...
- Java语法细节 - synchronized和volatile
目录 synchronized关键字 关键字volatile synchronized关键字 synchronized关键字锁住方法和this的不同之处: public synchronized vo ...
- Super Jumping! Jumping! Jumping! ---HDU - 1087
Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...
- 将博客搬至CSDN http://blog.csdn.net/yi_xianyong
将博客搬至CSDN http://blog.csdn.net/yi_xianyong
- jsp中input获得后台传递的值
1.后台赋值 req.setAttribute("openId",openId); 2.前台获取值 value="<%= request.getAttribute( ...