Windows下Docker安装与配置
路径说明
Toolbox安装路径该路径保存了docker相关命令的所有可执行文件,包括docker,docker-compose,docker-machine,安装后的快速启动命令Docker Quickstart Terminal打开后的默认路径就是这里
dokcer虚拟机路径Docker虚拟机在宿主机的路径 C:/Users/Administrator/.docker/machine
docker配置文件路径Docker虚拟机内部的Docker配置文件路径 /var/lib/boot2docker/profile
hosts路径Docker虚拟机内部的Hosts配置文件路径 /etc/hosts
Vm保存路径VirtualBox保存vm虚拟机的默认路径 C:/Users/Administrator/VirtualBox VMs
安装toolbox
使用阿里云开源镜像站下载Toolbox
https://developer.aliyun.com/mirror/docker-toolbox?spm=a2c6h.13651102.0.0.57e31b11SOhnGf
按照指示进行安装,使用全部安装(包括virtualbox和git)
复制boot2docker镜像
官网下载:https://github.com/boot2docker/boot2docker
复制boot2docker.iso到
dokcer虚拟机路径的cache下
第一次启动
执行Docker Quickstart Terminal会打开Docker命令行终端
- 从git上拉取boot2docker镜像(这里如果卡住,检查
dokcer虚拟机路径的cache下存在最新版本的boot2docker.iso镜像)- 使用默认配置创建名为default的Vm
- 生成ssh秘钥(保存在
dokcer虚拟机路径的certs下)- 启动vm
- 检查网络
- 建立ssh连接
- 登录免密配置
- 配置docker
- 进入命令输入模式
重建default Vm
默认创建的default Vm规格:
- core:1
- memory:1 GB
- disk:20 GB
如果无法满足需求,必须重建default Vm:
- 删除default Vm
docker-machine rm default- 创建default Vm
docker-machine create default [option,option...]
常用Option 说明 –virtualbox-disk-size 分配磁盘大小,单位MB,例(50GB):–virtualbox-disk-size 50000 –virtualbox-memory 分配内存大小,单位MB,例(4GB):–virtualbox-memory 4096 –virtualbox-cpu-count 分配cpu数量,单位个,例(2个):–virtualbox-cpu-count 2 –egnine-storage-driver Vm内部Docker的storage-driver配置,windows暂时只能使用overlay –egnine-insecure-registry Vm内部Docker的insecure-registry配置,使用Registry时配置 –engine-registry-mirror Vm内部Docker的registry-mirror,使用国内源时配置 –virtualbox-host-dns-resolver 配置DNS服务器地址
- 可以通过
docker-machine create查看帮助,了解更多的option
- 重建成功后,关闭当前终端
- 重新开启终端,通过
docker info检查Vm规格(或者前往VirtualBox的管理界面查看)
克隆default Vm
由于Docker Quickstart Terminal自动建立的Vm,所有的文件都在
dokcer虚拟机路径下,即C:盘,为了防止C盘因为磁盘容量满导致的系统问题,需要将default Vm迁移到其他磁盘空间充足的路径下。
- 打开VirtualBox管理界面
- 全局设定,修改
Vm保存路径至其他磁盘空间充足的驱动器路径- 完全复制default Vm,重新命名(==注意:==不要重置网卡的mac地址)
- 删除defalut Vm
- 完全复制
步骤3创建的default Vm副本,命名为default- 验证新的default Vm的磁盘位置是否在新指定的
Vm保存路径- 启动Docker Quickstart Terminal,验证
docker info
Docker Image镜像的迁移
两种方式:
- 第一种是通过save和load的方式迁移docker镜像(==注意:==该方法需要注意镜像源和目标的docker是否使用了相同的storage driver,实践证明主流的linux内核默认采用了overlay2,而windows基本都只支持overlay)
- 第二种是通过push和pull的方式迁移docker镜像,这种方法操作起来会比较安全不会因为跨平台导致的兼容性问题,但是实施起来会比较复杂
save和load
save命令,打包镜像到指定文件docker save -o <OutputFilePath> <SourceImageTag>
load命令,用指定文件还原镜像docker load < <ImageFilePath>
save和load的命令可以通过docker --help查看
push和pull
push和pull是要通过私有镜像库才能实施,所以一般情况下,需要目标或者源至少一侧可以提供公网访问,作为私有镜像库。步骤如下:
提供公网访问的服务器安装并启动Docker守护进行
拉取并运行私有镜像库
官方参考:https://hub.docker.com/_/registry
docker run -d -p 5000:5000 --restart always --name registry registry:2暴露私有镜像库的服务端口
linux(安装iptables):
echo -A INPUT -m state --state NEW -m tcp -p tcp --dport 5000 -j ACCEPT >>/etc/sysconfig/iptableswindows:
window防火墙->入站规则->新建规则->端口->5000
注意:
window使用了default Vm,需要配置default Vm的端口转发,方法如下:
设备->网络->网络->网卡1->高级->端口转发->新增转发规则如下:
名称 协议 主机IP 主机端口 子系统IP 子系统端口 <自定义> TCP 宿主机连接公网的本地IP(非公网IP) 5000 不需要设置 5000 如果开放给宿主机,配置:127.0.0.1 源镜像服务器重打镜像标签
docker tag <SourceImage>[:tag] <私有镜像库地址>:5000/<TargetImageName>[:tag]*注意:*当配置tag时,自动使用
latest标签源镜像服务器配置信任镜像库
linux:
修改
/etc/docker/daemon.json,添加属性{ "insecure-registries":"<私有镜像库地址>:5000" }window:
如果重建default Vm时没有指定,则需要进入default Vm中进行设置:
启动Docker Quickstart Terminal,进入终端
docker-machine ssh default进入defaut Vm内部(也可以通过VirtualBox管理页面进入),修改docker配置文件
/var/lib/boot2docker/profile,加入–insecure-registryEXTRA_ARGS=‘ --label provider=virtualbox --insecure-registry <私有镜像库地址>:5000 ’源镜像服务器将本地镜像push到私有镜像库
docker push <私有镜像库地址>:5000/<TargetImageName>[:tag]目标服务器配置信任镜像库
同
步骤5可以通过
ping和telnet命令验证是否可以正常通讯目标服务器从私有镜像库pull镜像到本地
docker pull <私有镜像库地址>:5000/<TargetImageName>[:tag]
目标服务器在内部网络
镜像迁移至内网服务器时,由于无法直接通讯,所以在迁移时会有局限性
源镜像服务器 目标镜像服务器 docker storage driver save/load push/pull 1 Linux Linux 相同 优先低复杂度 2 Window Windows 相同 优先低复杂度 3 Linux Windows 相同 优先低复杂度 4 Windows Linux 相同 优先低复杂度 5 Linux Windows 不相同 优先可靠性 6 Windows Linux 不相同 优先可靠性 提示:
- 目标最优原则,尽可能保证目标侧使用了最优配置,包含性能和稳定性的整体评估
- 源侧降级原则,当目标侧已经使用了最优配置,依然无法兼容,则降低源侧配置,如将overlay2改为overlay
- push/pull的可靠性最高,在传输时会采用断点续传和多线程传输,向内网迁移时,可以使用文件系统和容器分离的方式分步导入
- save/load方式如果镜像文件过大,传输时会有失败风险,所以建议进行分包压缩
- 降级目前只能通过push/pull的方式进行转换
配置default Vm的端口转发规则
容器启动后,如果需要暴露端口到网路上请保证两点
- default Vm的端口转发是否正确配置,本机IP一定是要暴露网络的本地连接的IP
- 防火墙是否开通了端口入站,防火墙分为主机系统防火墙和网络防火墙