1. docker machine
1.1 machine简介
- 是官方编排工具之一,负责在多平台上快速安装docker环境
- 支持常规linux系统,虚拟化平台,openstack,公有云等不同环境下安装配置docker host
- 基于go语言实现,目前在github上的维护地址:github.com/docker/machine
1.2 安装machine
server1作为管理端,创建machine: 首先获取包:docker-machine-Linux-x86_64-0.16.1
mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine
chmod +x /usr/local/bin/docker-machine
创建machine要求对远程主机server2作免密:
ssh-keygen
ssh-copy-id server2
创建主机:(l离线安装需要在目标主机提前安装号docker软件包) docker-machine create --driver generic --generic-ip-address 172.25.38.2 server2 如果联网,会自动升级docker,比较慢 此时顺便在新建一个server3 此时,在server1上,可以通过docker-machine env server2 进入server2上容器 总结创建流程:
- ssh免密登陆远程主机
- 安装docker软件包
- 复制证书
- 配置docker daemon
- 启动docker
此时,需要进一步安装官方脚本,使得在切换docker服务器时能有提示:
yum inastall -y bash-* 准备三个bash文件: 放置目标目录:mv /root/*.bash /etc/bash_completion.d 在默认bash配置目录下添加:vim ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
PS1='[\u@\h \W$(__docker_machine_ps1)]\$'
退出重新登陆server1
docker-machine env server2
eval $(docker-machine env server2)
若要继续切换,则执行:eval $(docker-machine env server1) 若要退回server1,则logout,重新连接server1
1.2 利用machine在server上安装
传统的安装方法需要先在server上配置docker-ce源和Centos源 在利用machine在server上安装docker时,相关依赖性可以在本地仓库提前准备好 搭建本地docker-ce.repo仓库
在利用machine安装时均为执行脚本,首先获取脚本wget https://get.docker.com 并重新命名:mv index.html get-docker.sh
放到主机的apache发布目录下: scp get-docker.sh 172.25.38.250:/var/www/html/
在主机上设置docker-ce需要的各种变量
在将脚本放置与apache发布目录 在server1上对server3进行免密登陆 执行脚本: 若是用网络安装:docker-machine create --driver generic --engine-install-url "https://get.docker.com" --generic-ip-address 172.25.38.3 server3 离线安装:docker-machine create --driver generic --engine-install-url "http://172.25.38.250/get-docker.sh"" --generic-ip-address 172.25.38.3 server3 在此还需要打开桥接参数:
scp /etc/sysctl.d/docker.conf server3:/etc/sysctl.d/
sysctl --system
2. docker compose
2.1 简介
- 微服务架构的应用系统一般会包括多个微服务,每个微服务一般都会部署多个实例,若每个微服务都要手动启停,则会明显效率过低,且维护工作量巨大
- docker compose时一种编排服务,基于python实现,时一个用于在docker上自定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用
- 用户可以轻松用一个配置文件定义一个或多个容器应用,然后使用一条指令安装这个应用的所有依赖,完成构建
- 主要解决的时容器与容器之间如何管理编排的问题
两个重要概念:
- 服务(service):一个应用的容器,实际上可以包含若干运行相同镜像的容器实例。
- 项目(project):由一组关联的应用容器组成一个完整业务单元,在docker-compose.yml文件中定义
安装
- 方法1,官方,速度慢
curl -L github chmod +x /usr/local/bin/docker-compose - 方法2,阿里云,速度快
https://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/ 下载后放置上述方法1位置
docker-compose.yml属性
官方文档
2.1 示例
在此做一个由haproxy控制两个nginx代理服务器的容器化实验,均在server1上: 首先利用docker pull拉取nginx和haproxy镜像 在默认目录下,新建compose文件夹,并编写一个docker-compose.yml文件 文件中,定义了使用的两个nginx的镜像,网络,挂载卷,以及做代理的haproxy的镜像,网络,端口,挂载卷,配置文件
version: "3.9"
services:
web1:
image: nginx
networks:
- mynet
volumes:
- ./web1/:/usr/share/nginx/html
web2:
image: nginx
networks:
- mynet
volumes:
- ./web2/:/usr/share/nginx/html
haproxy:
image: haproxy
networks:
- mynet
ports:
- "80:80"
volumes:
- ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
networks:
mynet:
在compose内新建haproxy文件夹,内包含haproxy的配置文件:
global
maxconn 65535
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local0
uid 200
gid 200
#chroot /var/empty
daemon
defaults
mode http
log global
option httplog
option dontlognull
monitor-uri /monitoruri
maxconn 8000
timeout client 30s
retries 2
option redispatch
timeout connect 5s
timeout server 5s
stats uri /stats
frontend public
bind *:80 name clear
#bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
#use_backend static if { hdr_beg(host) -i img }
#use_backend static if { path_beg /img /css }
default_backend dynamic
backend dynamic
balance roundrobin
server app1 web1:80 check inter 1000
server app2 web2:80 check inter 1000
启动时,在compose文件内,因为包含了docker-compose.yml文件,所以可以用docker-compose up 进行启动
启动后,在浏览器中可看到: 此时,可使用docker-compose stop web1 关闭部分容器 强制删除:kill 卸载rm
|