Docker swarm搭建总结

安装

Get Docker CE for Ubuntu

1
2
3
4
#查看可安装版本
apt-cache madison docker-ce
#安装指定版本(降级)
sudo apt install docker-ce=17.09.1~ce-0~ubuntu
  1. docker-ce | 17.12.0~ce-0~ubuntu 安装gitlab出现 Failed to find a load balance… 错误

    解决降级版本17.09.1解决

挂载卷Volume与Bind

Volume 数据卷

会把container的一个目录映射到一个数据卷,一个目录只能映射一个数据卷,不需要新建目录

graph LR
A[containner目录] --> |映射| B[数据卷]
Bind 绑定本地目录

container的一个目录会加载本地目录,因此需要在本地提前新建该目录,不然启动会找不到目录

graph LR
A[本地目录] --> |指向| B[containner目录]
方案选型与测试

方案有

启动顺序

[[vishnubob]/**wait-for-it

entrypoint vs cmd

entrypoint 必须执行服务话

cmd 命令型,可执行

总结:

  1. 如果用wait-for支持alpine,使用sh,wait-for-it使用bash
  2. dockercompose会覆盖dockerfile里面的cmd命令
  3. 通过挂载形式把脚本放进去执行,或者通过dockerfile 构建时构建进去
  4. 在容器内进行测试时,发现不能跟/actuator/health,会连接超时,
  5. 直接执行时,如果服务没启动也会超时,但是可以跟可以跟参数-t设置为0不超时,会一直等待
1
2
3
4
#不能加/actuator/health,请求超时,不能用wait-for-it.sh  ,不支持alpine ,经测试感觉怪,还使用 depends_on
command: ["./wait-for.sh", "config-server:14030", "--", "java","-jar","app.jar"]
depends_on:
- config-server

镜像升级

portainer升级命令

docker service update --image portainer/portainer:latest portainer_portainer

然后重启portainer服务

docker service upadte 命令参数详解
  • --force 强制更新重启服务,无论是否配置或镜像改变都更新

  • --image <image:tag> 制定更新的镜像

  • --with-registry-auth 私有仓库需要携带该参数,否则提示

    1
    2
    3
    image 192.168.1.230:14005/manage/test/ygl/app:latest could not be accessed on a registry to record
    its digest. Each node will access 192.168.1.230:14005/manage/test/ygl/app:latest independently,
    possibly leading to different nodes running different
1
2
# 登陆仓库
docker login 192.168.1.230:14005 -u admin -p password

节点升级

docker node update --role manager node

该命令只会更改角色,部分权限并没有立即更新,因此执行服务操作时有可能提示该错误Error response from daemon: rpc error: code = DeadlineExceeded desc = context deadline exceeded

立即生效更新节点为manger 执行docker node promote node