Docker快速入门(十二)Docker多主机管理
Docker多主机管理
之前在一台Centos7上安装了Docker,如果是在多台主机上都安装Docker,用手动安装的方法不光效率低下,而且有可能出错,所以可以使用Docker Machine
进行多台主机的Docker安装和管理。
具体安装过程可以参照官方文档https://docs.docker.com/machine/install-machine/.
首先准备两台Centos7的虚拟机(一台IP为192.168.41.133
,安装Docker Machine
,另一台IP为192.168.41.135
),在其中一台机器上安装Docker,安装过程可以参照分享01.
然后下载Docker Machine
二进制文件并将其解压缩到PATH。
[root@promote ~]# base=https://github.com/docker/machine/releases/download/v0.14.0 && > curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && > sudo install /tmp/docker-machine /usr/local/bin/docker-machine % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 617 0 617 0 0 583 0 --:--:-- 0:00:01 --:--:-- 584 100 26.7M 100 26.7M 0 0 1730k 0 0:00:15 0:00:15 --:--:-- 3488k
接着通过显示机器版本来检查安装:
[root@promote ~]# docker-machine version docker-machine version 0.14.0, build 89b8332
为了更好的体验接着安装bash完成脚本,将脚本保存到/etc/bash_completion.d
或 /usr/local/etc/bash_completion.d
。
[root@promote ~]# cd /etc/bash_completion.d [root@promote bash_completion.d]# base=https://raw.githubusercontent.com/docker/machine/v0.14.0 [root@promote bash_completion.d]# for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine. bash > do > sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d > done --2018-07-11 01:47:47-- https://raw.githubusercontent.com/docker/machine/v0.14.0/contrib/completion/bash/docker- machine-prompt.bash Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.40.133 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.40.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1469 (1.4K) [text/plain] Saving to: ‘/etc/bash_completion.d/docker-machine-prompt.bash’ 100%[=======================================================================>] 1,469 --.-K/s in 0s 2018-07-11 01:47:48 (192 MB/s) - ‘/etc/bash_completion.d/docker-machine-prompt.bash’ saved [1469/1469] --2018-07-11 01:47:48-- https://raw.githubusercontent.com/docker/machine/v0.14.0/contrib/completion/bash/docker- machine-wrapper.bash Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.40.133 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.40.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1525 (1.5K) [text/plain] Saving to: ‘/etc/bash_completion.d/docker-machine-wrapper.bash’ 100%[=======================================================================>] 1,525 --.-K/s in 0s 2018-07-11 01:47:50 (160 MB/s) - ‘/etc/bash_completion.d/docker-machine-wrapper.bash’ saved [1525/1525] --2018-07-11 01:47:50-- https://raw.githubusercontent.com/docker/machine/v0.14.0/contrib/completion/bash/docker- machine.bash Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.40.133 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.40.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 12205 (12K) [text/plain] Saving to: ‘/etc/bash_completion.d/docker-machine.bash’ 100%[=======================================================================>] 12,205 --.-K/s in 0.02s 2018-07-11 01:47:51 (489 KB/s) - ‘/etc/bash_completion.d/docker-machine.bash’ saved [12205/12205]
这样就下载好了脚本。
接着申明环境变量。
[root@promote bash_completion.d]# source /etc/bash_completion.d/docker-machine-prompt.bash
可以先使用docker-machine ls
查看一下当前的machine
.
[root@promote ~]# docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
因为还没有安装Docker所以使用这条命令什么都没有。
接着创建第一台机器,就是另外一台Centos虚拟机(IP:192.168.41.155).
1.首先需要让这两台Centos可以SSH免密登陆。
[root@promote ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:T6qcnNvYwepsMhGfdvG/Gk+BtzVe2eCLiF0aMAI6wqc root@promote.cache-dns.local The key's randomart image is: +---[RSA 2048]----+ | . | |. . . | |..o. . o . | | .o.. ..o . . .o| | E o .So+ + +.o| | . +..*.* * + | | o .= *.+ o | | o+.O . +. | | =%.o ..o. | +----[SHA256]-----+ [root@promote ~]# ssh-copy-id 192.168.41.135 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '192.168.41.135 (192.168.41.135)' can't be established. ECDSA key fingerprint is SHA256:JqAC8jcLCLobvRy0wzY9VGBNuZU3EydpO8n2fEtQ178. ECDSA key fingerprint is MD5:5d:26:a1:60:c3:eb:02:e9:97:7a:bb:7a:49:8a:14:0b. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.41.135's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.41.135'" and check to make sure that only the key(s) you wanted were added.
2.创建第一个机器
使用docker-machine create
命令,因为是Linux,所以driver
就用generic
,目标地址选项用--generic-ip-address
。
[root@promote ~]# docker-machine create --driver generic --generic-ip-address=192.168.41.135 machine1 Creating CA: /root/.docker/machine/certs/ca.pem Creating client certificate: /root/.docker/machine/certs/cert.pem Running pre-create checks... Creating machine... (machine1) No SSH key specified. Assuming an existing key at the default location. 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 machine1
现在到192.168.41.135
上去验证。
[root@promote ~]# docker version Client: Version: 18.05.0-ce API version: 1.37 Go version: go1.9.5 Git commit: f150324 Built: Wed May 9 22:14:54 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.05.0-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.5 Git commit: f150324 Built: Wed May 9 22:18:36 2018 OS/Arch: linux/amd64 Experimental: false
也可以在192.168.41.133
上验证。
[root@promote ~]# docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS machine1 - generic Running tcp://192.168.41.135:2376 v18.05.0-ce
发现安装完成。
接着我通过192.168.41.133
这台主机来使用192.168.41.135
主机上的Docker,首先查看访问machine所需要的环境变量。
[root@promote ~]# docker-machine env machine1 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.41.135:2376" export DOCKER_CERT_PATH="/root/.docker/machine/machines/machine1" export DOCKER_MACHINE_NAME="machine1" # Run this command to configure your shell: # eval $(docker-machine env machine1)
可以看到倒数第二行:运行此命令来配置你的shell
也就是指运行eval $(docker-machine env machine1)
命令配置上面的环境变量进入machine1
.
运行之后发现并无变化,是因为一开始我们没有配置shell
提示.
接着启用docker-machine
shell提示,添加 $(__docker_machine_ps1)
到您的PS1
设置中~/.bashrc
。
[root@promote ~]# PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ' [root@promote ~ [machine1]]#
这时发现shell变了,在当前状态下的所有docker操作都是运行在machine1
上的,即192.168.41.135
主机上。
如果要切回回来的环境使用unset
命令,取消环境变量即可:
[root@promote ~ [machine1]]# unset export DOCKER_TLS_VERIFY [root@promote ~ [machine1]]# unset DOCKER_HOST [root@promote ~ [machine1]]# unset DOCKER_CERT_PATH [root@promote ~ [machine1]]# unset DOCKER_MACHINE_NAME [root@promote ~]#
发现变回来了。
docker-machine
的其他用法可以使用docker-machine --help
命令来查看。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App