Appearance
Docker Machine
Docker Machine 是一个工具,可以在本地虚拟机或云服务器上自动安装 Docker,并通过 docker-machine 命令管理多台 Docker 主机。
注意:Docker Machine 官方已停止维护(2021年归档)。目前推荐使用 Docker Desktop(本地)、云服务商的托管容器服务或脚本化安装来替代。本节保留介绍以供了解历史背景,并提供现代替代方案。
Docker Machine 简介
Docker Machine 可以:
- 在本地虚拟机(VirtualBox、VMware)上创建 Docker 主机
- 在云平台(AWS、GCP、Azure、DigitalOcean)上创建 Docker 主机
- 管理多台 Docker 主机,切换工作环境
基本用法
bash
# 安装(已不推荐,仅供参考)
# https://github.com/docker/machine/releases
# 创建本地虚拟机
docker-machine create --driver virtualbox dev-vm
# 查看所有机器
docker-machine ls
# 获取机器 IP
docker-machine ip dev-vm
# 启动/停止机器
docker-machine start dev-vm
docker-machine stop dev-vm
# 切换环境(让 docker 命令指向该机器)
eval $(docker-machine env dev-vm)
# 恢复本地环境
eval $(docker-machine env -u)
# SSH 登录到机器
docker-machine ssh dev-vm
# 删除机器
docker-machine rm dev-vm现代替代方案
方案一:脚本化安装(推荐)
使用 Docker 官方一键安装脚本,快速在远程服务器安装 Docker:
bash
# 在远程服务器上一键安装 Docker
curl -fsSL https://get.docker.com | sh
# 国内服务器使用阿里云镜像
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun通过 SSH 远程操作 Docker:
bash
# 通过 SSH 在远程服务器执行 Docker 命令
ssh user@remote-host docker ps
# 使用 Docker context 管理多台主机(现代方式)
docker context create remote \
--docker "host=ssh://user@remote-host"
# 切换到远程主机
docker context use remote
# 恢复本地
docker context use default方案二:Docker Context(官方现代方案)
Docker Context 是现代的多主机管理方式:
bash
# 创建 SSH 连接的 context
docker context create myserver \
--description "Production server" \
--docker "host=ssh://ubuntu@192.168.1.100"
# 列出所有 context
docker context ls
# 使用指定 context
docker context use myserver
# 在远程主机上执行命令
docker ps
docker run -d nginx
# 恢复本地
docker context use default
# 删除 context
docker context rm myserver方案三:Ansible 批量安装
对于管理多台服务器,推荐使用 Ansible:
yaml
# install-docker.yml
- hosts: docker_servers
become: yes
tasks:
- name: Install Docker
shell: curl -fsSL https://get.docker.com | sh
- name: Start Docker
systemd:
name: docker
enabled: yes
state: started
- name: Add user to docker group
user:
name: "{{ ansible_user }}"
groups: docker
append: yesbash
ansible-playbook -i inventory install-docker.yml方案四:Terraform + 云服务
在云上批量创建预装 Docker 的服务器:
hcl
# main.tf(AWS 示例)
resource "aws_instance" "docker_host" {
count = 3
ami = "ami-ubuntu-22.04"
instance_type = "t3.medium"
user_data = <<-EOF
#!/bin/bash
curl -fsSL https://get.docker.com | sh
usermod -aG docker ubuntu
systemctl enable docker
EOF
tags = {
Name = "docker-worker-${count.index}"
}
}多主机管理实践
使用 Docker Context 管理多台主机
bash
# 设置多个 context
docker context create prod-web \
--docker "host=ssh://ubuntu@web.example.com"
docker context create prod-db \
--docker "host=ssh://ubuntu@db.example.com"
docker context create staging \
--docker "host=ssh://ubuntu@staging.example.com"
# 在不同主机上部署
docker context use prod-web
docker stack deploy -c web.yml webapp
docker context use prod-db
docker stack deploy -c db.yml database
# 查看各主机状态
for ctx in prod-web prod-db staging; do
echo "=== $ctx ==="
docker --context $ctx ps
doneSSH 配置简化
在 ~/.ssh/config 中配置主机别名:
Host prod-web
HostName web.example.com
User ubuntu
IdentityFile ~/.ssh/prod.pem
Host prod-db
HostName db.example.com
User ubuntu
IdentityFile ~/.ssh/prod.pem然后使用别名创建 context:
bash
docker context create prod-web --docker "host=ssh://prod-web"总结
Docker Machine 虽然已停止维护,但其解决的问题(多主机 Docker 管理)依然重要。现代推荐方案:
| 场景 | 推荐方案 |
|---|---|
| 单台远程主机管理 | Docker Context + SSH |
| 多台服务器批量安装 | Ansible / 云平台 user_data |
| 云环境自动化 | Terraform + 云服务 |
| 集群管理 | Docker Swarm / Kubernetes |
Docker Context 是官方推荐的现代多主机管理方案,内置于 Docker CLI,无需额外安装。