Docker集群
Docker 集群
#Docker
1. 说明
一般情况下,我们用 Docker run 命令将 docker 启成普通进程。有时候我们有多台运行 docker 的机器,希望 Docker 以集群方式运行。与手动启动不同 Docker,集群涉及统一管理,各服务的状态监控,负载均衡,日志文件,重启,统一向外暴露端口等等。
本篇介绍一些 Docker 集群相关的内容:包括集群管理工具 Smarm,卷 Volume,图形化管理工具 Portainer。
2. 安装 Docker 的最新版本
如果 ubuntu 版本较低,用 apt-get 只能安装 docker 的早期版本,像 docker service, docker volume 等工具都无法正常使用,需要下载 docker 较新的版本,方法如下:
1 | $ curl -fsSLO https://get.daocloud.io/docker/builds/Linux/x86_64/docker-17.05.0-ce.tgz |
执行 dockerd 启动 docker 后台服务,就无需再使用系统方式启动(service docker start),用 docker 命令即可与后台服务交互了。该方法也比较适用于在嵌入式系统中安装 docker。
3. Docker Portainer
Portainer 是 Docker 的可视化管理工具,用它可以查看和管理 docker 的映像,容器,卷,后台服务等等。
Docker 的辅助工具,一般也是以 Docker image 的方式提供,安装它们不需要用 apt-get 或者下载 tgz 包,只需要用 docker pull 把镜像下载到本地即可使用。安装 Portainer 方法如下:
1 | $ docker search portainer # 查看portainer相关的工具 |
此时用浏览器访问 http://127.0.0.1:9000,即可看到 portainer 界面,首次访问时需要设置密码 (如:admin, 12345678),登入后即可看到 docker 的各种状态。
4. Docker Volume
上篇提到过,镜像是静态的,当容器关闭之后,对其中内容的修改不能保存,虽然可以用 commit 从容器生成镜像,但很麻烦,所以在手动运行容器时用 -v 参数,将容器外目录映射到容器内,以方便保存。
在集群中以服务的方式启动 docker 时,不使用直接指定路径的映射方式,而使用 volume,简单地说,就是把容器外目录映射成一个 volume,再将该 volume 挂载成容器内目录,这样多个容器可使用同一 volume。
具体方法如下:
1 | $ docker volume create --name 名 # 创建volume, 默认位置在/var/lib/docker/volumes/名/_data |
5. Docker Swarm
Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
Swarm 自己不运行容器,它只是接受 docker 客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使 Swarm 由于某些原因挂掉了,集群中的节点也会照常运行,当 Swarm 重新恢复运行之后,它会收集重建集群信息。
具体方法如下:
1 | $ docker pull swarm # 下载swarm镜像 |
在各个 docker 机器用以下方式加入集群
1 | $ docker run -d swarm join --addr=192.168.1.207:2375 token://集群号 |
在管理节点上运行以下命令
1 | $ docker rn -d -p 2376:2375 swarm manage token: |
此时用 docker ps 就可以看到此管理容器了
6. Docker Stack
一个 stack 就是一组有关联的服务的组合,可以编排在一起管理。具体方法是将各个服务的内容填写在一个 yml 文件中。docker build 时指定的 CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 yml 中再次设置。
yml 文件写法如下:
1 | version: "3.0" |
开启和关系 stack 方法如期下:
1 | $ docker stack deploy --compose-file tmp.yml testme # 开启stack, testme是stack名 |
此时在 portainer 的 stack/service 中可以看到 testme_example
如果启动服务出问题,可能会不停的重启,可用以下命令查看出错的具体原因。
1 | $ docker service logs testme_example |
7. 参考
Portainer -- Docker 可视化管理工具的安装配置及使用
https://blog.csdn.net/A632189007/article/details/78779920
Docker 管理工具 -Swarm 部署记录
https://www.cnblogs.com/liuyansheng/p/8178341.html
深入理解 Docker(镜像、容器、服务、swarm、stack)
https://blog.csdn.net/oChangWen/article/details/75758211
Docker 存储 volume
https://www.cnblogs.com/elvi/p/8463673.html