- Docker Compose:是用来组装多容器应用的工具,可以在 Swarm集群中部署分布式应用。
- Docker Machine:是支持多平台安装Docker的工具,使用 Docker Machine,可以很方便地在笔记本、云平台及数据中心里安装Docker。
- Docker Swarm:是Docker社区原生提供的容器集群管理工具。
- Compose是用来定义和运行一个或多个容器应用的工具。使用compaose可以简化容器镜像的建立及容器的运行。
- Compose使用python语言开发,非常适合在单机环境里部署一个或多个容器,并自动把多个容器互相关联起来。
Compose 中有两个重要的概念:
- 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
- Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
- Docker Machine 项目基于 Go 语言实现,目前在 Github 上进行维护。
- Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。
- Swarm mode内置kv存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm 集群具备与 Mesos、Kubernetes 竞争的实力。
Docker-compose官方文档
设置tabl键的空格距离
通过识别一个docker-compose.yml的配置文件,去管理容器。
命令解释
- 第一个部分: version: 指定语法格式的版本。
- 第二部分:service:定义服务,(想要运行什么样的容器)
- nginx: //服务的名称
- container_name: web-nginx //容器名称
- image: nginx:latest //使用的镜像
- restart: always //容器跟随docker服务自启
- ports: //端口映射
- volumes:: //持久化 本地:容器
运行
PS:如果想要退出终端占用,加-d 选项。
在运行container的过程中,还可以支持Dockerfile
PS: 如果文件内有Dockerfile,可以提前执行:docker-compose build 或者在up -d 的时候添加–build 选项。
(1)帮助信息
(2)创建或重新创建服务使用的镜像
(3)通过容器发送SIGKILL信号强行停止服务
PS:kill 服务名称,默认所有服务
(4)显示service的日志信息
(5)暂停和恢复服务
- docker-compose pause #暂停服务
- docker-compose unpause #恢复被暂停的服务
(6)查看服务中的端口与物理机的映射关系
PS:docker-compose port nginx_web 80 #查看服务中80端口映射到物理机上的那个端口
(7)显示当前项目下的容器
PS:此命令与docker ps不同作用,此命令会显示停止后的容器(状态为Exited),只针对某个项目。
(8)拉取服务依赖的镜像
(9)重启某个服务中的所有容器
(10)删除停止的服务(服务里的容器)
- -f #强制删除
- -v #删除与容器相关的卷(volumes)
(11)在服务中运行一个一次性的命令
这个命令会新建一个容器,它的配置和srvice的配置相同。但两者之间还是有两点不同之处
- run指定的命令会直接覆盖掉service配置中指定的命令
- run命令启动的容器不会创建在service配置中指定的端口,如果需要指定使用–service-ports指定
(12)启动/停止运行某个服务的所有容器
- docker-compose start 启动运行某个服务的所有容器
- docker-compose stop 停止运行某个服务的所有容器
(13)指定某个服务启动的容器个数
PS:如果需要运行多个容器,那么容器名称就不要给了,会随机生成,还有注意端口映射问题,不要冲突(docker-compose port 字段支持仅写一个容器暴露的端口)
- -f :用于指定配置文件
- -p :用于指定项目名称
Docker-machine官方文档
PS:Docker-machine环境主机没有安装docker服务的主机!!!
1.关闭防火墙和SELinux、清空iptables
2.安装machine
3.查看是否安装成功
4.给machine主机做域名解析和免密登录
4.创建machine
PS:对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机。创建 Machine指的就是在 host 上安装和部署 docker。
- –driver generic:驱动类型
- –generic-engine-port:用于 Docker 守护的端口
- –generic-ip-address:主机所需的 IP 地址
- –generic-ssh-key: SSH 用户私钥的路径
- –generic-ssh-user: 用于连接的 SSH 用户名
- –generic-ssh-port:用于 SSH 的端口
用同样的方法吧其余两台添加到machine中
查看已添加的主机
添加加速器
5.常用命令
- active 查看活跃的 Docker 主机
- config 输出连接的配置信息
- create 创建一个 Docker 主机
- env 显示连接到某个主机需要的环境变量
- inspect 输出主机更多信息
- ip 获取主机地址
- kill 停止某个主机
- ls 列出所有管理的主机
- provision 重新设置一个已存在的主机
- regenerate-certs 为某个主机重新生成 TLS 认证信息
- restart 重启主机
- rm 删除某台主机
- ssh SSH 到主机上执行命令
- scp 在主机之间复制文件
- mount 挂载主机目录到本地
- start 启动一个主机
- status 查看主机状态
- stop 停止一个主机
- upgrade 更新主机 Docker 版本为最新
- url 获取主机的 URL
- version 输出 docker-machine 版本信息
- help 输出帮助信息
6.管理machine
1.优化docker-machine的shell
这样在 bash 能够通过 tab 键补全 docker-mahine 的子命令和参数。
2.显示访问 node01 需要的所有环境变量
3.根据提示访问node02和node03
4.在此状态下执行的所有 docker 命令其效果都相当于在 host3上执行,例如启动一个 busybox 容器
5.更新 machine 的 docker 到最新版本,可以批量执行
6.查看 machine 的 docker daemon 配置
7.在不同 machine 之间拷贝文件
docker swarm集群:
关闭防火墙、禁用selinux、3台dockerhost区别主机名、时间同步
Docker-swarm官方文档
PS:–advertise-addr:指定与其他Node通信的地址。
添加其他节点
扩展
PS:如果想要添加manager 节点: 运行下边的命令:
PS:如果想要添加worker节点: 运行下边的命令:
查看节点详情
1.1基本命令
(1)节点服务离开一个集群
PS:查看节点状态会变成down.然后可以通过manager node 将其删除。
(2)删除某个节点
(3)生成加入集群令牌
(4)升级
将node02节点的work升级为manager
(5)降级
将node02节点的manager降级为work.
(6)设置节点状态
节点状态有三个参数
- active:正常
- pause:暂停
- -drain:排除自身work任务
- overlay:覆盖型网络。
- attachable: 这个参数必须要加,否则网络不能用于容器。
PS:我们在node1上创建的此网络,但在swarm的其他节点,是查看不到此网络信息的。但却能够直接使用此网络。
PS:上述方法创建镜像httpd:v2、 httpd:v3
默认的Ingress 网络,包括创建的自定义overlay网络,为后端真正为用户提供服务的container,提供了一个统一的入口。
PS:扩容与缩容直接直接通过scale进行设置副本数量
PS:再次查看使用镜像已经从httpd:v1变成httpd:v2了
默认情况下,swarm一次只更新一个副本,并且两个副本之间没有等待
时间,我们可以通过
–update-parallelism; 设置并行更新的副本数量。
–update-delay: 指定滚动更新的时间间隔。
回滚操作
PS:docker swarm的回滚操作,默认只能回滚到上一次操作的状态,并不能连续回滚操作。
给node02上添加一个标签(磁盘容量最大)
删除标签
指定节点,运行服务