一、Docker Machine
1、Docker Machine简介
Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
Docker Machine支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装配置docker host。
Docker Machine 项目基于 Go 语言实现,目前在 Github 上的维护地址: https://github.com/docker/machine/
2、Docker Machine实践
新建一个纯净的虚拟机server3,用docker-machine在server3上部署docker
准备工作一:需要用到主机的Apache,发布此文件作为给server3部署的docker软件源。
准备工作二:在主机的Apache发布目录中编辑自动执行脚本
准备工作三:通过server1上的docker-machine为server3部署docker
[root@server1 ~]# docker-machine create --driver generic --engine-install-url "http://172.25.254.50/get-docker.sh" --generic-ip-address=172.25.254.3 server3
#指定安装脚本的url; 指定目标主机server3及IP
安装结果如下:已经自动配置好server3的docker源 和docker软件
创建流程:
ssh免密登陆远程主机
安装docker软件包
复制证书
配置docker daemon
启动docker
查看主机:
docker-machine 子命令:
docker-machine upgrade server2 更新docker版本
docker-machine config server2 查看machine配置
docker-machine scp 可以在machine中复制文件
docker-machine ssh 连接machine
docker-machine rm 删除machine
二、Docker Compose
1、Docker Compose简介
微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。
Docker Compose是一种编排服务,基于pyhton语言实现,是一个用于在 Docker 上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。
用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。 解决了容器与容器之间如何管理编排的问题。
Docker Compose 中有两个重要的概念:
服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
2、Docker Compose实践
官方文档:
三、Docker Swarm
1、Docker Swarm简介
Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。
Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。
Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。
Docker Swarm 优点:
任何规模都有高性能表现
灵活的容器调度
服务的持续可用性
和 Docker API 及整合支持的兼容性
Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。
2、Docker Swarm实践
docker集群的创建:
[root@server2 ~]# cat docker-compose.yml
version: "3.9"
services:
webservice:
image: myapp:v1
ports:
- "80:80"
networks:
- web_net
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 2s
restart_policy:
condition: on-failure
visualizer:
image: visualizer
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints:
- "node.role==manager"
networks:
web_net: