Window下Docker安装与配置

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:

  1. 删除default Vm
    docker-machine rm default
    
  2. 创建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-driverVm内部Docker的storage-driver配置,windows暂时只能使用overlay
–egnine-insecure-registryVm内部Docker的insecure-registry配置,使用Registry时配置
–engine-registry-mirrorVm内部Docker的registry-mirror,使用国内源时配置
–virtualbox-host-dns-resolver配置DNS服务器地址
  • 可以通过docker-machine create查看帮助,了解更多的option
  1. 重建成功后,关闭当前终端
  2. 重新开启终端,通过docker info检查Vm规格(或者前往VirtualBox的管理界面查看)

克隆default Vm

由于Docker Quickstart Terminal自动建立的Vm,所有的文件都在dokcer虚拟机路径下,即C:盘,为了防止C盘因为磁盘容量满导致的系统问题,需要将default Vm迁移到其他磁盘空间充足的路径下。

  1. 打开VirtualBox管理界面
  2. 全局设定,修改Vm保存路径至其他磁盘空间充足的驱动器路径
  3. 完全复制default Vm,重新命名(==注意:==不要重置网卡的mac地址)
  4. 删除defalut Vm
  5. 完全复制步骤3创建的default Vm副本,命名为default
  6. 验证新的default Vm的磁盘位置是否在新指定的Vm保存路径
  7. 启动Docker Quickstart Terminal,验证docker info

Docker Image镜像的迁移

两种方式:

  1. 第一种是通过save和load的方式迁移docker镜像(==注意:==该方法需要注意镜像源和目标的docker是否使用了相同的storage driver,实践证明主流的linux内核默认采用了overlay2,而windows基本都只支持overlay)
  2. 第二种是通过push和pull的方式迁移docker镜像,这种方法操作起来会比较安全不会因为跨平台导致的兼容性问题,但是实施起来会比较复杂

save和load

save命令,打包镜像到指定文件

docker save -o <OutputFilePath> <SourceImageTag>

load命令,用指定文件还原镜像

docker load < <ImageFilePath>

saveload的命令可以通过docker --help查看

push和pull

pushpull是要通过私有镜像库才能实施,所以一般情况下,需要目标或者源至少一侧可以提供公网访问,作为私有镜像库。步骤如下:

  1. 提供公网访问的服务器安装并启动Docker守护进行

  2. 拉取并运行私有镜像库

    官方参考:https://hub.docker.com/_/registry

    docker run -d -p 5000:5000 --restart always --name registry registry:2
    
  3. 暴露私有镜像库的服务端口

    linux(安装iptables):

    echo -A INPUT -m state --state NEW -m tcp -p tcp --dport 5000 -j ACCEPT >>/etc/sysconfig/iptables
    

    windows:

    window防火墙->入站规则->新建规则->端口->5000

    注意:

    window使用了default Vm,需要配置default Vm的端口转发,方法如下:

    设备->网络->网络->网卡1->高级->端口转发->新增转发规则如下:

    名称协议主机IP主机端口子系统IP子系统端口
    <自定义>TCP宿主机连接公网的本地IP(非公网IP)5000不需要设置5000
    如果开放给宿主机,配置:127.0.0.1
  4. 源镜像服务器重打镜像标签

    docker tag <SourceImage>[:tag] <私有镜像库地址>:5000/<TargetImageName>[:tag]
    

    *注意:*当配置tag时,自动使用latest标签

  5. 源镜像服务器配置信任镜像库

    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-registry

    EXTRA_ARGS=‘
    --label provider=virtualbox
    --insecure-registry <私有镜像库地址>:5000
    ’
    
  6. 源镜像服务器将本地镜像push到私有镜像库

    docker push <私有镜像库地址>:5000/<TargetImageName>[:tag]
    
  7. 目标服务器配置信任镜像库

    步骤5

    可以通过pingtelnet命令验证是否可以正常通讯

  8. 目标服务器从私有镜像库pull镜像到本地

    docker pull <私有镜像库地址>:5000/<TargetImageName>[:tag]
    

目标服务器在内部网络

镜像迁移至内网服务器时,由于无法直接通讯,所以在迁移时会有局限性

源镜像服务器目标镜像服务器docker storage driversave/loadpush/pull
1LinuxLinux相同优先低复杂度
2WindowWindows相同优先低复杂度
3LinuxWindows相同优先低复杂度
4WindowsLinux相同优先低复杂度
5LinuxWindows不相同优先可靠性
6WindowsLinux不相同优先可靠性

提示:

  • 目标最优原则,尽可能保证目标侧使用了最优配置,包含性能和稳定性的整体评估
  • 源侧降级原则,当目标侧已经使用了最优配置,依然无法兼容,则降低源侧配置,如将overlay2改为overlay
  • push/pull的可靠性最高,在传输时会采用断点续传和多线程传输,向内网迁移时,可以使用文件系统和容器分离的方式分步导入
  • save/load方式如果镜像文件过大,传输时会有失败风险,所以建议进行分包压缩
  • 降级目前只能通过push/pull的方式进行转换

配置default Vm的端口转发规则

容器启动后,如果需要暴露端口到网路上请保证两点

  1. default Vm的端口转发是否正确配置,本机IP一定是要暴露网络的本地连接的IP
  2. 防火墙是否开通了端口入站,防火墙分为主机系统防火墙和网络防火墙

版权声明:本文为weixin_44306133原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。