文章目录
docker-machine 安装与配置
一、介绍
docker-machine,简单来说就是给你快速创建一个docker容器环境的,怎么说呢,如果你要给100台阿里云ECS安装上docker,传统方式就是你一台一台ssh上去安装,但是有了docker-machine就不一样了,你可以快速给100台ecs安装上docker,怎么快速法呢,你看完这文章就知道了。还有就是你要在本地快速创建docker集群环境,我总不能一台一台创建虚拟机吧,所以docker-machine可以解决这个问题。总之docker-machine就是帮助你快速去创建安装docker环境的工具。
二、安装
docker-machine 需要使用 root 用户安装,以 CentOS7 为例,安装指令如下:
[root@cnkanon ~]# su - root
# 从github上下载docker-machine二进制文件并安装到/usr/local/bin目录(版本持续在更新,可以进入https://github.com/docker/machine/releases查看)
[root@cnkanon ~]# curl -L https://github.com/docker/machine/releases/download/v0.16.0/docker-machine-`uname -s`-`uname -m` > /tmp/docker-machine && install /tmp/docker-machine /usr/local/bin/docker-machine
# 赋可执行权限
[root@cnkanon ~]# chmod +x /usr/local/bin/docker-machine
# 查看版本信息
[root@cnkanon ~]# docker-machine -v
[root@cnkanon ~]# docker-machine version 0.16.0, build 702c267f
三、使用
1、使用VirtualBox驱动创建machine
使用如下指令创建名为 demo 的 machine:
[root@cnkanon ~]# docker-machine create --driver virtualbox demo
Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
如无逆时针度会抛出错误,提示未找到 VBoxManage,因为指令中指定了使用 virtualbox 驱动来来创建 machine,接下来手工安装。
2、安装 VBoxManage
在Windows上使用过VirutalBox虚拟机的小伙伴们都清楚,此神器是大牛公司Oracle公司对抗VMware的桌面化虚拟机,默认的 cenntos yum 源中并未收录该安装源,需要手动创建:
[root@cnkanon yum.repos.d]# vim virtualbox.repo
[virtualbox]
name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
再执行以下指令安装 VBoxManage
[root@cnkanon yum.repos.d]# yum search virtualbox
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
virtualbox | 2.9 kB 00:00:00
virtualbox/7/x86_64/primary_db | 134 kB 00:00:15
===================================================== N/S matched: virtualbox ==================================================
VirtualBox-4.3.x86_64 : Oracle VM VirtualBox
VirtualBox-5.0.x86_64 : Oracle VM VirtualBox
VirtualBox-5.1.x86_64 : Oracle VM VirtualBox
VirtualBox-5.2.x86_64 : Oracle VM VirtualBox
VirtualBox-6.0.x86_64 : Oracle VM VirtualBox
安装最新版(吐槽一下:大牛公司惹不起,相隔十万八千里,咱们小小移动网络下你个110M文件花了1个多小时~~~)
[root@cnkanon ~]# yum install -y VirtualBox-6.0.x86_64
3、重新加载 VirtualBox 服务
[root@cnkanon ~]# /sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
4、重新创建machine
[root@cnkanon ~]# docker-machine create --driver virtualbox demo
Running pre-create checks...
Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
这里提示宿主机未开启虚拟化功能 VT-x/AMD-x,由于我的宿主机 CentOS7 是使用 VirtualBox 创建的,从 Oracle VirtualBox 官方文档上查阅资料得知,在 x86_64 位系统中暂不支持开启嵌套虚拟化(即,基于 VirutualBox 创建的 CentOS7 宿主机的 主板、CPU、BIOS 均要支持虚拟化,貌似在x86 32位机器上可以)。感兴趣的童鞋可以使用 VMware,应该支持嵌套虚拟化。
由于此种方式行不通,换装 VMware 又太过麻烦,接下使用通用驱动方式创建machine。
5、使用通用驱动创建machine
使用如下指令创建:
[root@cnkanon ~]# docker-machine create --driver generic --generic-ip-address=192.168.56.3 --generic-ssh-key=/root/.ssh/id_rsa --generic-ssh-user=root --generic-ssh-port=22 demo
Running pre-create checks...
Error with pre-create check: "SSH key does not exist: \"/root/.ssh/id_rsa\""
--generic-ip-address=192.168.56.102:这里的ip是指本机,如果需要为其他远程docker主机安装可以改为其他docker主机ip(这里是本地创建docker-machine)
--generic-ssh-key=/root/.ssh/id_rsa:指定私钥路径
--generic-ssh-user=root;ssh登录machine的用户
--generic-ssh-port=22:ssh登录machine的端口
注意: 如果指定machine的名称(demo)与远端主机的名称不一致,会使用machine的名称覆盖掉主机的名称。
上述报错,是由于docker-machine为本机创建machine时需要进行ssh认证,而本地root账号下没有私钥,创建私钥:
[root@cnkanon ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'. # 接下来一直回车到结束,会在 /root/.ssh 目录下生成id_rsa,id_rsa.pub两个文件
......
# 将生成的公钥发给宿主机,受信任
[root@cnkanon ~]# ssh-copy-id root@192.168.56.3
再次创建 machine:
[root@cnkanon ~]# docker-machine create --driver=generic --generic-ip-address=192.168.56.3 --generic-ssh-key=/root/.ssh/id_rsa --generic-ssh-user=root --generic-ssh-port=22 demo
Running pre-create checks...
Creating machine...
(demo) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with centos...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env demo
6、查看machine列表
创建成功后,查看创建的machine列表中 demo 正在运行:
[root@cnkanon ~]# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
demo - generic Running tcp://192.168.56.3:2376 v18.09.8
7、查看并加载machine的环境变量
[root@cnkanon ~]# docker-machine env demo
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.56.3:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/demo"
export DOCKER_MACHINE_NAME="demo"
# Run this command to configure your shell:
# eval $(docker-machine env demo)
根据提示加载machine环境变量
[root@cnkanon ~]# eval $(docker-machine env demo)
8、登录machine
[root@cnkanon ~]# docker-machine ssh demo
Last login: Sat Jul 20 22:21:05 2019 from 192.168.56.3
9、镜像与容器同步
先登录本地宿主机查看宿主机上的镜像与容器:
[root@cnkanon ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot-docker-ci v1 f5b8c9bf5e61 2 weeks ago 680MB
gogs/gogs latest 7e516701539f 3 weeks ago 100MB
centos-jenv-custom latest 0f7d0cb63f0a 4 weeks ago 608MB
zookeeper latest 215d317d188b 5 weeks ago 211MB
portainer/portainer latest da2759008147 6 weeks ago 75.4MB
centos latest 9f38484d220f 4 months ago 202MB
hello-world latest fce289e99eb9 6 months ago 1.84kB
java latest d23bdf5b1b1b 2 years ago 643MB
[root@cnkanon ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6b57900ba7a portainer/portainer "/portainer" 2 weeks ago Up 15 minutes 0.0.0.0:9000->9000/tcp portainer-dev
再登录 demo machine 查看镜像与容器:
[root@demo ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot-docker-ci v1 f5b8c9bf5e61 2 weeks ago 680MB
gogs/gogs latest 7e516701539f 3 weeks ago 100MB
centos-jenv-custom latest 0f7d0cb63f0a 4 weeks ago 608MB
zookeeper latest 215d317d188b 5 weeks ago 211MB
portainer/portainer latest da2759008147 6 weeks ago 75.4MB
centos latest 9f38484d220f 4 months ago 202MB
hello-world latest fce289e99eb9 6 months ago 1.84kB
java latest d23bdf5b1b1b 2 years ago 643MB
[root@demo ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6b57900ba7a portainer/portainer "/portainer" 2 weeks ago Up 16 minutes 0.0.0.0:9000->9000/tcp portainer-dev
会发现宿主机上的镜像、容器与 demo machine 上的镜像同步是同步的,这里扩展想象一下:
- 由于鄙人资源有限,demo machine是安装在宿主机上的,效果看不太出来
- 如果此时你公司有1台阿里云服务器,而配置好镜像、容器的服务器在你公司机房,你需要将阿里云上这台服务器都按你公司机房的镜像、容器重新安装一遍,是不是感觉重复劳动
- 此时,如果按前面的步骤 ,创建 demo machine 时,指定的IP是阿里云上的主机(–generic-ip-address=112.91.149.178),这样就可以自动将你公司机房主机上的镜像、容器全部同步到阿里云主机上;如果你在公司机房主机上下载新的镜像、创建新的容器,那么阿里云主机也会相应更新同步
- 如果你公司阿里云上有100台服务器,这种方式的价值就体现出来了
来源:https://blog.csdn.net/acherson/article/details/101441753