AIOps 一场颠覆传统运维的盛筵
741
2022-10-14
老司机实战Windows Server Docker:3 单节点Windows Docker服务器简单运维(上)
本主题将涵盖下面这些主要内容,由于这个主题包含的内容较多,将分成上下两篇发布:
上篇
远程操作Windows Docker服务器自动化Docker编译和部署Windows Docker网络配置和端口映射
下篇
负载均衡和反向代理日志解析和监控
远程操作Windows Docker服务器
要开启2375端口,只需要如下在daemon.json添加hosts配置项,然后重启Docker服务:
{ "hosts": ["tcp://0.0.0.0:2375"]}
开启2375端口之后,可以通过在命令窗口执行如下的netstat命令,确保2375端口已经正确监听:
netstat -an | findstr 2375
如果返回类似下面,就说明已经在监听了:
TCP 0.0.0.0:2375 0.0.0.0:0 LISTENING TCP [::]:2375 [::]:0 LISTENING
只是开始监听还不够,要允许外部机器能够远程访问本机的2375端口,我们还要添加防火墙的Inbound规则,可以通过下面的powershell命令开启:
New-NetFirewallRule -DisplayName 'Docker TCP Inbound' -Profile @('Domain', 'Public', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2375
接下来,我们就可以尝试从安装了Docker client的远程机器,访问这台Windows Docker服务器了。Docker client有各种跨平台版本,所以只要是相兼容的版本,我既可以从Windows的docker client,也可以从linux的docker client通过2375端口远程访问docker服务器。
当我们从当前机器,比如你的开发机访问一台远程docker服务器时,我们需要为docker client指定目标HOST。一般有两种方式:一种是可以通过在每个docker命令执行时,添加-H server_name_or_ip参数,另一种是设置DOCKER_HOST环境变量,这样,就不需要每个docker命令都带-H参数了。例如,下面的命令会列出远程服务器1.2.3.4的所有docker images:
docker -H 1.2.3.4 imagesdocker -H tcp://1.2.3.4 imagesdocker -H tcp://1.2.3.4:2375 images
上面的几种指定host的语法都是可以的,如果使用默认的2375端口,最简单的就可以用第一种,少打不少字符。如果要指定DOCKER_HOST环境变量,那么必须使用完整的格式,比如:
SET DOCKER_HOST=tcp://1.2.3.4:2375
自动化Docker编译和部署
docker的命令行工具,有许多子命令和参数。如果要经常编译和运行docker镜像,我们当然不希望每次都手打所有参数,例如,下面的命令编译一个docker镜像,并运行一个docker容器,每次手打一边实在没啥乐趣:
docker build -t iis-demo:1.0 .docker run --ip 172.24.128.2 -p 80 -v "c:/temp:c:/inetpub/logs/LogFiles" -e "env1=LIVE1" -e "env2=LIVE2" -e "HOSTS=1.2.3.4:TEST.COM" iis-demo:1.0
version: "2.1"services: iis-demo: build: . image: "iis-demo:1.0" ports: - "80" networks: nat: ipv4_address: 172.24.128.2 volumes: - "c:/temp:c:/inetpub/logs/LogFiles" environment: - "env1=LIVE1" - "env2=LIVE2" - "HOSTS=1.2.3.4:TEST.COM"networks: nat: external: true
那么,我们就可以在docker-compose.yml所在的目录,通过下面这一条命令,就能自动编译docker镜像,并且运行一个docker容器了:
docker-compose up
这里简单讲一下,在windows下,如何安装docker-compose。
有了,docker-compose,我们也可以很简单的设置我们的docker服务器每次机器启动之后,自动运行指定的docker容器,只需要配置一个机器的启动脚本,每次机器启动后自动运行docker-compose up,就可以了。
nssm install "Docker Startup" command param1 param2 ...
就能将指定的命令变成自动开机执行的windows service了。是不是很方便?网上介绍NSSM也文章也很多的,大家可以搜索一些,这里我就给几个link,不过多介绍了:
Windows Docker网络配置和端口映射
宿主机上运行的所有的容器,都属于一个子网段,每个容器运行时,可以静态指定网段内可用的ip,或者自动分配一个网段内的ip;子网段内的ip,在宿主机外部无法直接访问,只能从宿主机上直接访问;可以通过docker命令的-p参数,设置静态或者动态的宿主机ip到容器ip的端口映射,这样宿主机的外部网络,就可以通过宿主机的ip和端口,间接访问到容器内的网站了;
例如,在上面的示例中的docker run --ip 172.24.128.2 -p 80 ...里,-p 80这个参数就会导致docker命令执行时,动态分配一个宿主机上的端口,映射到容器ip的80端口上。如果我们执行上面的docker run命令,或者docker-compose up命令后,在命令窗口执行docker ps,可以看到下面的正在运行的容器:
0f0e07424d80 iis-demo:latest "C:\\SetHostsAndSta..." 5 minutes ago Up 4 minutes 0.0.0.0:39924->80/tcp windowsdockeriisdemo_iis-demo_1
其中,0.0.0.0:39924就是指的,对宿主机上任意ip的39924端口的访问,已经被映射到这个容器的子网ip的80端口了。
除了使用动态分配的端口,如果我们把参数改成例如-p 80:80,那么就能通过宿主机的ip:80端口,访问到容器内的网站了。再提醒一遍,记住,只能从宿主机外部访问!!
微软的官方文档,除了介绍了几种常见的网络模式如何配置,还提到了一些Windows版本的Docker相对于linux版本的docker没有实现的功能,下面的这些docker命令的参数,对Windows Docker无效:
--add-host--dns-opt--dns-search--aux-address--internal--ip-range
上篇完
发表评论
暂时没有评论,来抢沙发吧~