简介
docker技术已经出来很久了,发展已经很完善了,本人初次使用,遇到的问题希望能帮助到其他人。
环境情况
阿里云的服务器,共有3台,搭建Swarm集群。因为现有环境是使用18年的阿里云提供的Docker Swarm搭建的,一直没有维护更新,突然出现问题,服务器重启造成docker集群无法正常启动,因为阿里已经下架了该服务,所以只能自己重新搭建。
- UDP端口问题4789 ,因为已经安装了docker,所以直接初始一个swarm集群,但是因为阿里禁用了4789端口,造成各节点间无法通讯;
- cluster-advertise冲突 , 因为是老环境,daemon.json里有之前集群的参数,需要去掉,不去掉不能初始化swarm集群。比如:cluster-store,cluster-advertise;
- 解决 UDP端口4789 问题,需要升级到19.02版本以上,所以重装操作系统【原为Ubuntu 16,顺便升级,怕新版与操作系统又不兼容】,安装新的版本docker;
Docker 安装
# 更新源
sudo apt update
# 安装环境
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 下载验证
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 增加docker源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 查看有哪些可用版本,选择
sudo apt-cache madison docker-ce
#//根据终端显示的版本选择一个
sudo apt install docker-ce=5:20.10.23~3-0~ubuntu-focal
# 启动docker
systemctl start docker
# 查看docker 信息
docker info
Docker 拉取镜像
# 配置阿里的镜像地址,在 /etc/docker/目录下修改或建立 daemon.json文件,增加下面内容
{
"registry-mirrors":["https://registry.cn-beijing.aliyuncs.com"]
}
# 重启docker服务
systemctl daemon-reload
systemctl restart docker
# 登录阿里云镜像服务器,根据自己的需要修改参数
docker login --username=aaa registry.cn-beijing.aliyuncs.com
#然后输入密码
666666
# 拉取镜像
docker pull registry.cn-beijing.aliyuncs.com/my/my-web:latest
# 查看本地镜像
docker images
创建Swarm集群
建立集群
# 需要--data-path-port 参数设置端口,否则默认是4789,阿里云会有问题。
docker swarm init --autolock=false --advertise-addr 172.17.94.42 --listen-addr 172.17.94.42:2377 --data-path-port 5789
# 然后显示
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4eupxdkjxoflf2rhqfh9g89fna625he0njg-46vuoig9t90ry4uym2 172.17.94.42:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
# 在其它Node节点上输入下面指令,将会加入swarm集群
docker swarm join --token SWMTKN-1-4eupxdkjxoflf2rhqfh9g89fna625he0njg-46vuoig9t90ry4uym2 172.17.94.42:2377
建立网络
# 建立一个 my-network 网络,在compose.yml配置文件里会用到,指定网络。
docker network create --scope=swarm --attachable -d overlay my-network
# 删除网络
docker network rm my-network
# 网络查看
docker network ls
# 查看网络详细信息
docker network inspect my-network
配置节点
# 节点列表
docker node ls
# 节点删除
docker node rm 节点id
# 节点退出集群
docker swarm leave
# 删除指定节点 (管理节点上操作)
docker node rm g36lvv23ypjd8v7ovlst2n3yt
# 管理节点,解散集群,需要 --force 参数
docker swarm leave --force
# 给节点增加标签,方便在compose.yml配置时指定运行某服务。
docker node update --label-add role=node197 Node的ID
发布服务
# 发布或更新服务,在管理节点上操作,my-stack为堆名称
docker stack deploy --compose-file ./docker-compose/my-web.yml my-stack
# 移除所有服务
docker stack rm my-stack
# 查看服务是否成功启动
docker service ls
# 当前机器查看启动的服务
docker ps
# 进入docker 里,必须是已经启动的,启动失败的不行。
docker exec -it 容器名称 /bin/bash
docker-compose 简介
docker-compose 只是一个cli工具,主要用来写 yaml 配置来编排docker的,可用于单机的发布。
# 查看版本
docker-compose -v
# 直接下载替代老版本,替代前先备份
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 需要设置运行权限
chmod +x /usr/bin/docker-compose
# 发布一个服务
docker-compose -f my-web.yml up -d
# 停止一个服务
docker-compose -f my-web.yml stop
兼容情况
docker-compose.yaml 中的version 则是 compose 文件格式的版本号。这里是需要和docker engine 对应的。
Compose file format | Docker Engine release |
---|---|
Compose specification | 19.03.0+ |
3.8 | 19.03.0+ |
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |