目录
- 一、Docker Machine
- 1.machine安装与使用
- 2.管理machine
- 二、Docker Compose
- 1.docker-compose配置
- 2.测试
一、Docker Machine
简介:
1、Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境;支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装配置docker host。
2、Docker Machine 项目基于 Go 语言实现,目前在 Github 上的维护地址: https://github.com/docker/machine/
1.machine安装与使用
真机将 docker-machine-Linux-x86_64-0.16.1安装包传给server1,server1安装machine,之后一键给server3安装docker
把docker-machine-Linux-x86_64-0.16.1移动到/usr/local/bin/下,并改名为docker-machine,因为是二进制文件,所以要赋予执行权限
在真机上,下载get-docker官方安装脚本到http发布目录下
在真机的apache默认发布目录下添加yum源文件,为machine安装提供支持
修改get-docker.sh文件,将yum源修改为宿主机
has_rootless_extras=“0”(不监测rootless:Rootless容器可以利用 user namespaces 将容器中的root用户 uid/gid 映射到宿主机的非特权用户范围内。)
创建machine:machine指的是docker daemon主机,其实就是在host上安装和部署docker,创建machine要求免密登陆远程主机;
server1创建免密登陆的密钥,并给server3
server3有yum源指向文件
创建主机:(离线安装需要在目标主机(server1)提前安装好docker软件包);
server1使用docker-machine为server3部署docker(使用get-docker.sh脚本为ip是172.25.36.3的server3安装docker);
查看所有docker-machine的操作进程,能够看到docker-machine运行在server3上
server3查看2376端口已开放(docker-machine列表中与server3的会话端口)
可以在隐藏目录docker下看到server3的证书
server3在/etc/docker目录下,可以看到证书文件;
docker主机(server3)上生成的配置文件如下所示,可以看出,docker daemon启用了TLS验证功能(安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性),docker-machine已经为其生成好了所需的证书文件。
server3 执行docker info 出现警告
解决办法
手动加载所有的配置文件,即可解决
同理控制server2
查看docker-machine列表中与server2和server3的会话端口为2376
2.管理machine
使用docker-machine来控制server2/3;
docker-machine config server2 :查看machine配置
显示访问server3所需的环境变量;
根据提示执行:eval $(docker-machine env server3),可以直接切入目标主机,eval登陆后,就相当于直接在server2,server3执行操作
但是有个问题在于,不确定自己是在哪个容器里,除非查看env
安装bash脚本,使得行提示符更加的人性化,真机将下面几个组件放置server1这个目录下
vim .bashrc,修改环境变量,显示进入的docker主机名称
退出当前shell,重新登陆即可生效
此时很清楚的显示进入了哪台主机
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是一种编排服务,基于pyhton语言实现,是一个用于在 Docker 上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。
2、用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建,解决了容器与容器之间如何管理编排的问题。
3、Docker Compose 中有两个重要的概念:
服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
docker-compose.yml 属性
Image:指定为镜像名称或镜像 ID,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
Build:指定 Dockerfile 所在文件夹的路径。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
Command:覆盖容器启动后默认执行的命令。
Links:链接到其它服务中的容器。
Ports:端口映射。
Expose::暴露端口信息
Volumes:卷挂载路径设置
1.docker-compose配置
由于需要直接使用docker-compose指令来操作,所以需要在系统的/usr/local/bin目录下有compose的二进制文件,那么用户在命令行输入命令后,系统会在环境变量$PATH内找命令;
docker-compose安装包是二进制文件,放到/usr/local/bin才能执行,/usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件;
家目录下创建compose目录,编写docker-compose.yml文件,一键部署haporxy+nginx,实现负载均衡
配置三个服务,web1,web2和haproxy,web1和web2用nginx镜像安装,haproxy用haproxy镜像安装;
/root/compose/web1挂载到容器内/usr/share/nginx/html下,/root/compose/web2挂载到容器内/usr/share/nginx/html下;
宿主机的80端口映射到容器内的80端口;,网络都是统一的webnet
在当前路径下创建web1和web2子目录,并写入发布内容
在当前路径下创建haproxy子目录
haproxy目录下要有haproxy的配置文件
修改配置文件
负载均衡模式是轮叫,真正的服务器是web1和web2
haproxy镜像导入
运行docker-compose:docker-compose命令必须在项目下运行。
以下是项目目录结构: tree命令用于以树状图列出目录的内容
docker-compose up:创建并启动容器,-d 打入后台
查看状态已开启
查看日志
2.测试
在网页或者在真机是都可以,实现负载均衡
网页输入172.25.36.1/admin/stats 查看haproxy监控
当我们停止web1的服务后
发现负载均衡只剩web2了,也就是说如果web1被down掉了,客户端访问172.25.11.1时,就不会接入web1,只会找web2(haproxy的健康监测功能)
查看监控
将compose服务重启,负载均衡即可恢复
Docker Compose 常用命令
Build: 构建或重新构建服务。
kill:强制停止服务容器。
logs:查看服务的输出。
port:打印绑定的公共端口。
ps:列出所有容器。
pull:拉取服务所需镜像。
rm:删除停止的服务容器。
up:构建并启动容器。