目标

在windows上安装、配置和使用docker容器,包括单机使用的网络配置
用于配置本地开发环境,比如几个大数据节点

环境

windows server 2019 March或windows 10
至少为docker及容器预留2G内存

安装

官网下载,安装时会提醒并自动打开hyper-v,自动重启两次左右配置完成

配置代理

为了提高速度,要配置国内代理
可以注册并登录阿里云容器镜像服务控制台,左下角能找到专门为你提供的镜像加速地址
也可以打开华为镜像服务,注册登录后点开docker板块可以找到专门为你提供的镜像加速地址
在docker启动后,右键点图标,设置,daemon,registry mirrors,填入你的镜像加速地址即可

下载镜像

在cmd/powershell中运行命令

  1. docker pull nginx
  2. docker pull hello-world

运行镜像

  1. docker run --rm hello-world

会显示docker官方提供的hello和简要说明

端口映射

  1. docker run -d -p 80:80 --name nginx1 nginx

上面的nginx1是给容器的名字,-d是指定它要在后台运行daemon,不要直接退出了
-p指定容器80端口映射到本机的80端口
这样就能在浏览器中写网址

  1. http://localhost

并显示出nginx的问候信息了
然后,关闭并删除刚刚的容器

  1. docker rm -f nginx1

交互式命令

这个部分中,我们找一找nginx容器的html页面配置在哪个目录,方便后续修改网页内容
运行一个容器

  1. docker run -it nginx /bin/bash

在容器中

  1. cd /etc/nginx/conf.d/
  2. cat default.conf

就能看到默认配置的html目录是

  1. /usr/share/nginx/html

Ctrl+D退出,这时看一下运行中的容器,可以看到一个“ecstatic_buck”,没用了,删除

  1. docker ps -a
  2. docker rm -f ecstatic_buck

其实运行的时候加上—rm参数,退出就会自动删除了

目录映射

本地在自己的文件夹中,建立一个index.html文件,写点简单的页面,比如

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. wow, a new world
  9. </body>
  10. </html>

然后,运行容器,映射这个目录

  1. docker run -d -v C:\Users\cdarling\PycharmProjects\untitled:/usr/share/nginx/html -p 80:80 nginx

回车之后,docker会提示共享C盘
或者,可以在docker设置中,Shared Drives配置。配置的下方,还有个简单的命令示例
浏览器再次打开localhost,可能需要多刷新或强制刷新,因为之前的静态页面在缓存中了

路由配置

前几节使用的容器都要把端口映射到本地才能使用,如果只是一个容器还好,多个容器,使用同一个ip地址的不同端口,就很不方便了,尤其是在配置大数据这种分布式服务的时候

先检查一下容器的ip

  1. docker info
  2. docker inspect nginx1

可以看到它的ip地址,比如172.17.0.2,但是浏览器直接连不上,ping也不通
使用ipconfig可以看到,本机地址并非172.17网段,而以太网适配器 vEthernet (DockerNAT)的ip地址是10.0.75.1
这个ip是对应docker虚拟机的NAT路由器,那么docker运行的虚拟机ip是多少呢?
我猜是10.0.75.2

在修改路由之前,可以自己先看看route命令帮助,回车即可

  1. route

然后显示一下当前的路由信息

  1. route print

可以看到当前的网络界面(interface)的列表和编号

  1. ===========================================================================
  2. 接口列表
  3. 9...xx yy zz aa bb c3 ......Intel(R) Gigabit 4P I350-t rNDC
  4. 7...xx yy zz aa bb c0 ......Intel(R) Gigabit 4P I350-t rNDC #3
  5. 4...xx yy zz aa bb c2 ......Intel(R) Gigabit 4P I350-t rNDC #4
  6. 24...00 15 5d 01 7a 04 ......Hyper-V Virtual Ethernet Adapter
  7. 2...xx yy zz aa bb c1 ......Intel(R) Gigabit 4P I350-t rNDC #2
  8. 1...........................Software Loopback Interface 1
  9. ===========================================================================

以及路由表,只关心ipv4即可

  1. IPv4 路由表
  2. ===========================================================================
  3. 活动路由:
  4. 网络目标 网络掩码 网关 接口 跃点数
  5. 0.0.0.0 0.0.0.0 172.18.1.1 172.18.1.122 281
  6. 10.0.75.0 255.255.255.240 在链路上 10.0.75.1 271
  7. 10.0.75.1 255.255.255.255 在链路上 10.0.75.1 271
  8. 10.0.75.15 255.255.255.255 在链路上 10.0.75.1 271
  9. 127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331
  10. 127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331
  11. 127.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
  12. 172.18.1.0 255.255.255.0 在链路上 172.18.1.122 281
  13. 172.18.1.122 255.255.255.255 在链路上 172.18.1.122 281
  14. 172.18.1.255 255.255.255.255 在链路上 172.18.1.122 281
  15. 224.0.0.0 240.0.0.0 在链路上 127.0.0.1 331
  16. 224.0.0.0 240.0.0.0 在链路上 172.18.1.122 281
  17. 224.0.0.0 240.0.0.0 在链路上 10.0.75.1 271
  18. 255.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
  19. 255.255.255.255 255.255.255.255 在链路上 172.18.1.122 281
  20. 255.255.255.255 255.255.255.255 在链路上 10.0.75.1 271
  21. ===========================================================================

错误的路由配置

其实我刚开始猜路由猜错了,以为是10.0.75.1,这里示范一下错误,以及如何修正
写命令

  1. route add 172.17.0.0 mask 255.255.255.0 10.0.75.1 metric 3 if 24

看结果
然后,试着ping容器,ping 172.17.0.2,失败,浏览网页,失败
看一下结果

  1. IPv4 路由表
  2. ===========================================================================
  3. 活动路由:
  4. 网络目标 网络掩码 网关 接口 跃点数
  5. 0.0.0.0 0.0.0.0 172.18.1.1 172.18.1.122 281
  6. 10.0.75.0 255.255.255.240 在链路上 10.0.75.1 271
  7. 10.0.75.1 255.255.255.255 在链路上 10.0.75.1 271
  8. 10.0.75.15 255.255.255.255 在链路上 10.0.75.1 271
  9. 127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331
  10. 127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331
  11. 127.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
  12. 172.17.0.0 255.255.255.0 在链路上 10.0.75.1 18
  13. 172.17.0.255 255.255.255.255 在链路上 10.0.75.1 18
  14. 172.18.1.0 255.255.255.0 在链路上 172.18.1.122 281
  15. 172.18.1.122 255.255.255.255 在链路上 172.18.1.122 281
  16. 172.18.1.255 255.255.255.255 在链路上 172.18.1.122 281
  17. 224.0.0.0 240.0.0.0 在链路上 127.0.0.1 331
  18. 224.0.0.0 240.0.0.0 在链路上 172.18.1.122 281
  19. 224.0.0.0 240.0.0.0 在链路上 10.0.75.1 271
  20. 255.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
  21. 255.255.255.255 255.255.255.255 在链路上 172.18.1.122 281
  22. 255.255.255.255 255.255.255.255 在链路上 10.0.75.1 271
  23. ===========================================================================

到172.17.0.2的网关,写的是“在链路上”,并没有经过路由器

到172.17.0.255这个广播地址,竟然也能通过10.0.75.1直接往链路上发?这好像不科学

删除错误的路由

  1. route delete 172.17.0.0

重新配置

  1. route add 172.17.0.0 mask 255.255.255.0 10.0.75.2 metric 3 if 24

检查路由表

  1. IPv4 路由表
  2. ===========================================================================
  3. 活动路由:
  4. 网络目标 网络掩码 网关 接口 跃点数
  5. 0.0.0.0 0.0.0.0 172.18.1.1 172.18.1.122 281
  6. 10.0.75.0 255.255.255.240 在链路上 10.0.75.1 271
  7. 10.0.75.1 255.255.255.255 在链路上 10.0.75.1 271
  8. 10.0.75.15 255.255.255.255 在链路上 10.0.75.1 271
  9. 127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331
  10. 127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331
  11. 127.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
  12. 172.17.0.0 255.255.255.0 10.0.75.2 10.0.75.1 18
  13. 172.18.1.0 255.255.255.0 在链路上 172.18.1.122 281
  14. 172.18.1.122 255.255.255.255 在链路上 172.18.1.122 281
  15. 172.18.1.255 255.255.255.255 在链路上 172.18.1.122 281
  16. 224.0.0.0 240.0.0.0 在链路上 127.0.0.1 331
  17. 224.0.0.0 240.0.0.0 在链路上 172.18.1.122 281
  18. 224.0.0.0 240.0.0.0 在链路上 10.0.75.1 271
  19. 255.255.255.255 255.255.255.255 在链路上 127.0.0.1 331
  20. 255.255.255.255 255.255.255.255 在链路上 172.18.1.122 281
  21. 255.255.255.255 255.255.255.255 在链路上 10.0.75.1 271
  22. ===========================================================================

这里看到,172.17.0.2是通过10.0.75.2作为网关转发的,而这个10.0.75.2是通过本机链路10.0.75.1连接上的

如果只是开发使用,就暂不考虑其他电脑连进来,只要本机能够进入docker内部即可,这里就先不配置其他电脑连进来的路由了

配置大数据环境

使用centos/ubuntu容器即可,注意容器非常精简,可能基本的包也没有,要多安装一些基础的包,比如命令补全,网络工具之类的
然后就参考之前的文章进行配置吧