目录

  • 一、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 双人小游戏 docker游戏机_docker 双人小游戏


把docker-machine-Linux-x86_64-0.16.1移动到/usr/local/bin/下,并改名为docker-machine,因为是二进制文件,所以要赋予执行权限

docker 双人小游戏 docker游戏机_docker_02


在真机上,下载get-docker官方安装脚本到http发布目录下

docker 双人小游戏 docker游戏机_运维_03


在真机的apache默认发布目录下添加yum源文件,为machine安装提供支持

docker 双人小游戏 docker游戏机_docker 双人小游戏_04


docker 双人小游戏 docker游戏机_docker 双人小游戏_05


修改get-docker.sh文件,将yum源修改为宿主机

docker 双人小游戏 docker游戏机_运维_06


has_rootless_extras=“0”(不监测rootless:Rootless容器可以利用 user namespaces 将容器中的root用户 uid/gid 映射到宿主机的非特权用户范围内。)

docker 双人小游戏 docker游戏机_docker 双人小游戏_07


创建machine:machine指的是docker daemon主机,其实就是在host上安装和部署docker,创建machine要求免密登陆远程主机;

server1创建免密登陆的密钥,并给server3

docker 双人小游戏 docker游戏机_容器_08


docker 双人小游戏 docker游戏机_运维_09


server3有yum源指向文件

docker 双人小游戏 docker游戏机_docker 双人小游戏_10


创建主机:(离线安装需要在目标主机(server1)提前安装好docker软件包);

server1使用docker-machine为server3部署docker(使用get-docker.sh脚本为ip是172.25.36.3的server3安装docker);

docker 双人小游戏 docker游戏机_Docker_11


查看所有docker-machine的操作进程,能够看到docker-machine运行在server3上

docker 双人小游戏 docker游戏机_运维_12


server3查看2376端口已开放(docker-machine列表中与server3的会话端口)

docker 双人小游戏 docker游戏机_Docker_13


可以在隐藏目录docker下看到server3的证书

docker 双人小游戏 docker游戏机_运维_14


server3在/etc/docker目录下,可以看到证书文件;

docker主机(server3)上生成的配置文件如下所示,可以看出,docker daemon启用了TLS验证功能(安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性),docker-machine已经为其生成好了所需的证书文件。

docker 双人小游戏 docker游戏机_运维_15


server3 执行docker info 出现警告

docker 双人小游戏 docker游戏机_docker_16


解决办法

docker 双人小游戏 docker游戏机_docker 双人小游戏_17


手动加载所有的配置文件,即可解决

docker 双人小游戏 docker游戏机_docker_18


同理控制server2

docker 双人小游戏 docker游戏机_运维_19


查看docker-machine列表中与server2和server3的会话端口为2376

docker 双人小游戏 docker游戏机_docker 双人小游戏_20


docker 双人小游戏 docker游戏机_docker_21

2.管理machine

使用docker-machine来控制server2/3;

docker-machine config server2 :查看machine配置

docker 双人小游戏 docker游戏机_容器_22


显示访问server3所需的环境变量;

根据提示执行:eval $(docker-machine env server3),可以直接切入目标主机,eval登陆后,就相当于直接在server2,server3执行操作

docker 双人小游戏 docker游戏机_docker_23


docker 双人小游戏 docker游戏机_容器_24

docker 双人小游戏 docker游戏机_运维_25


docker 双人小游戏 docker游戏机_docker 双人小游戏_26


但是有个问题在于,不确定自己是在哪个容器里,除非查看env

docker 双人小游戏 docker游戏机_Docker_27


安装bash脚本,使得行提示符更加的人性化,真机将下面几个组件放置server1这个目录下

docker 双人小游戏 docker游戏机_Docker_28


vim .bashrc,修改环境变量,显示进入的docker主机名称

docker 双人小游戏 docker游戏机_容器_29


docker 双人小游戏 docker游戏机_运维_30


退出当前shell,重新登陆即可生效

docker 双人小游戏 docker游戏机_Docker_31


此时很清楚的显示进入了哪台主机

docker 双人小游戏 docker游戏机_docker 双人小游戏_32

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 双人小游戏 docker游戏机_运维_33

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目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件;

docker 双人小游戏 docker游戏机_docker 双人小游戏_34


家目录下创建compose目录,编写docker-compose.yml文件,一键部署haporxy+nginx,实现负载均衡

docker 双人小游戏 docker游戏机_容器_35


配置三个服务,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

docker 双人小游戏 docker游戏机_docker_36


在当前路径下创建web1和web2子目录,并写入发布内容

docker 双人小游戏 docker游戏机_Docker_37


docker 双人小游戏 docker游戏机_docker 双人小游戏_38


在当前路径下创建haproxy子目录

docker 双人小游戏 docker游戏机_docker 双人小游戏_39


haproxy目录下要有haproxy的配置文件

docker 双人小游戏 docker游戏机_docker 双人小游戏_40


修改配置文件

docker 双人小游戏 docker游戏机_Docker_41


负载均衡模式是轮叫,真正的服务器是web1和web2

docker 双人小游戏 docker游戏机_docker_42


docker 双人小游戏 docker游戏机_容器_43


haproxy镜像导入

docker 双人小游戏 docker游戏机_运维_44


运行docker-compose:docker-compose命令必须在项目下运行。

以下是项目目录结构: tree命令用于以树状图列出目录的内容

docker 双人小游戏 docker游戏机_运维_45


docker-compose up:创建并启动容器,-d 打入后台

docker 双人小游戏 docker游戏机_容器_46


查看状态已开启

docker 双人小游戏 docker游戏机_Docker_47


查看日志

docker 双人小游戏 docker游戏机_运维_48

2.测试

在网页或者在真机是都可以,实现负载均衡

docker 双人小游戏 docker游戏机_docker_49


网页输入172.25.36.1/admin/stats 查看haproxy监控

docker 双人小游戏 docker游戏机_容器_50


当我们停止web1的服务后

docker 双人小游戏 docker游戏机_运维_51


发现负载均衡只剩web2了,也就是说如果web1被down掉了,客户端访问172.25.11.1时,就不会接入web1,只会找web2(haproxy的健康监测功能)

docker 双人小游戏 docker游戏机_Docker_52


查看监控

docker 双人小游戏 docker游戏机_docker_53


将compose服务重启,负载均衡即可恢复

docker 双人小游戏 docker游戏机_Docker_54


docker 双人小游戏 docker游戏机_容器_55


docker 双人小游戏 docker游戏机_docker 双人小游戏_56

Docker Compose 常用命令
Build: 构建或重新构建服务。
kill:强制停止服务容器。
logs:查看服务的输出。
port:打印绑定的公共端口。
ps:列出所有容器。
pull:拉取服务所需镜像。
rm:删除停止的服务容器。
up:构建并启动容器。