windows容器的应用

编程中总是离不开docker,足以体现docker的强大性,通常我们会在docker中跑linux容器以进行程序的运行,说起来windows容器大多数也只是认为windows平台上的docker容器。其实不然,在docker中也有着windows容器的存在,在研究了这么多天之后总结一下windows容器到底是怎么一回事!!!

你也许听到过winserver,你也有可能将winserver想成是一个容器,但是不是!winserver说白了就是windows平台服务,但为什么docker跟它有关系呢?其实在winserver2016版本之前,windows平台是不支持docker的,从2016版之后win平台开始支持docker容器,但也只是能跑linux容器。现在的winserver版本是2019,在服务层面上对docker的支持也已经比较完善了,windows开始支持自己的容器-windows容器!所以也正是因为这样 windows平台的docker可以进行win&linux两个版本来回切换!当然,win版本只能跑windows容器!接下来我们在win10平台见证一下!

注意啦!以下操作只能在windows企业版和专业版上操作,家庭版和旗舰版的先进行server版本转换再进行操作,怎么转换呢,去搞一个企业版或者专业版的密钥,重新激活一下!你要问我哪里搞,我会告你上某宝!

下面开始…

打开控制面板,选择程序-启用或关闭windows功能,将haype-V进行全部进行打勾 已经打勾请忽略

下载官方最新版的windows for docker进行安装,首先进入的linux系统,点击下面的鲸鱼图标 点击switch to windows切换为windows容器

下载地址:https://www.docker.com/products/docker-desktop

安装好之后,右键点击右下角鲸鱼图标,设置cpu 内存 转换windows容器

开始菜单,选择“设置”打开“windows设置”后,在菜单中找到“更新和安全”并点击 OS内部版本信息”查看版本号 比如1809

ok!以上内容做完之后我们开始拉取镜像,在windows镜像中分两类,一类是简洁版镜像,另一类是完整版镜像,完整版镜像中会有更多的服务与组件,当然镜像体积也比较大

#二选一
docker pull mcr.microsoft.com/windows/nanoserver:(你的版本号)    #简洁windows系统
docker pull mcr.microsoft.com/windows/servercore:ltsc2019  #完整版镜像
#启动windows容器
docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe  #进入简洁windows系统
docker run -it 32fecabef723 powershell #进入完整windows系统

#启动好之后 docker exec -it 容器名称       进入windows容器
docker exec -it 89fecatddos46 powershell 
#或者
docker exec -it 89fecatddos46 cmd.exe 
#在windows容器中超级用户和普通cmd同物理机一样是分开来的

现在windows容器已经跑起来了,进入之后发现跟我们的物理机的cmd一模一样。目前windows容器不支持GUI,只能完全使用命令行形式运行程序,这一点的话就很鸡肋,毕竟跑程序一般都会用linux,谁没事儿折腾windows容器,线下自己还是自己玩玩罢了,不过有一点好处就是除了GUI之外大部分的windows程序都可以运行。

运行k8s

目前k8s在windows版docker中直接集成了,安装好docker之后可以在settings中看到,注意:需要切换成linux版本的设置中才会有k8s,windows版本的设置中是没有的

不过现在还没办法使用,我们需要安装,我们先在设置中的Docker Engine 设置一下源

 {
  "registry-mirrors": [
      "https://dockerhub.azk8s.cn",
    "https://gcr.azk8s.cn",
    "https://quay.azk8s.cn"
  ],
  "insecure-registries": [],
  "debug": false,
  "experimental": false,
  "features": {
    "buildkit": true
  }
}

因为源在国外的原因,我们为了能下载镜像,所以使用国内镜像源

https://github.com/AliyunContainerService/k8s-for-docker-desktop   # 进入git地址 下载k8s的国内镜像
.\load_images.ps1 #cd 到下载的包中执行 
进入到docker  选择k8s 勾选"Enable Kubernetes" 选项. 此步骤比较耗时,耐心等待
kubectl version   #查看kubectl
kubectl create -f kubernetes-dashboard.yaml   #在包内执行
kubectl get pods --namespace kube-system    #查看运行状态

不过此时我们还不能进入到k8s的界面,因为我们需要token才能进入

kubectl get secret -n=kube-system  #找到 kube-proxy-token-mj2kx
kubectl describe secret -n=kube-system kube-proxy-token-mj2kx  #获取token
'''
eyJhbGciOiJSUzI1NiIsImtpZCI6IkkyejZMcU9FX293TDJCVmh3ZF9Yb3U3UElwaWgwMWkyTTQzSkZVVTY5cWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlLXByb3h5LXRva2VuLW1qMmt4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmUtcHJveHkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIyMmU4YmRhZC1iYjVmLTRjNzItYTM3ZC1jYjllNjZlZTMxNTgiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06a3ViZS1wcm94eSJ9.xx87OwGNZcSsE6e0nf64bfqburYKpTpWhv67UDnZGPjs6-emjNWCDeKCb4_ZVAshghacUTsest3xAFCsaVaILpV33Fx5aNTuc8PYsDbltFdjTQryRSclbMJyuFfVhQGjEPkzp65OJmxbusTD58YfObwOIwHvT8seXFhu4F3Un0erF5o2LEMVhVX06RnpdYansB4B4Vx2yA0y16WqB2_aD6SEPYIMfRMVcvlAbBCsiRbW92_q9XT5Sd6WxMYNZG3bxxuJ44PwuYalQvetvwkXaEO1Dj7xSF6x8Y_ELOpsL-CEPKlUv4LmWTuNZelLHhMCH5yiudnGorwdb3CMFkDlvA
'''
 kubectl proxy  #执行 启动k8s 进入到web界面
 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes- 	 dashboard:/proxy/   #进入到此网址  选择token进行登录 将上面生成的token粘贴进去点击确定

目前为止windows版本k8s就启动成功了,目前的k8s跟linux的没有太多的差别,不过master必须要放到linux系统上面,节点可以进行混合使用

'''
k8s的组成:
由Master节点和Node节点组成,
Master是主节点(一个),负责管理和控制;
	API server:这个比较厉害,是整个系统的对外接口,供其他组件、客户端等的调用;
	scheduler:从单词意思上也能看出来是调度,所以呢,它主要负责对集群内部资源进行调度;
	controller manager:同理,看单词意思理解,管理,控制,所以它负责管理控制器;
	ectd:信息存储

Node是计算节点(一群),即工作负载节点,里面是具体的容器
	docker:创建容器(详情移步:https://www.jianshu.com/p/25029238c011);
	kubelet:对分派到它所在Node上的pod进行监控,包括创建、修改、监控、删除等;
	kube-proxy:proxy,代理      为pod对象提供代理;
	fluentd,负责日志的收集、存储与查询;
	pod是k8s最基本的操作单元。一个pod代表着集群中运行的一个进程,其内部封装了一个或多个容器。
'''

容器可视化

我们都知道容器一般只是黑窗口,只能用来打命令,但是我们想要看到容器画面并且想运行一个GUI程序怎么办。事实上可以的,不过也有一点违背docker的初心,docker本来就是奔着轻量、方便、快捷,将无关紧要的桌面功能去掉。但是我们依然可以搞一下。

安装centos7的镜像

docker pull centos:8   #拉取镜像
    
docker run -d -p 5900:5900 -p 5901:5901 --name="centos8" --privileged=true centos:8 /usr/sbin/init   #运行镜像 映射端口 

配置远程VNC桌面

docker exec -it hhisgd451a1 bash   #进入容器

[root@localhost ~]# systemctl get-default  
'''
如果返回值为:multi-user.target 命令行输入下面指令切入到图形界面
systemctl set-default graphical.target
'''
'''
如果需要改回命令行模式,输入如下指令
systemctl set-default multi-user.target
'''
#关闭防火墙
[root@localhost ~]# systemctl stop firewalld


'''
安装软件
'''
[root@localhost ~]# yum update
[root@localhost ~]# yum groupinstall "GNOME Desktop" "X Window System" "Desktop" 
[root@localhost ~]# yum install tigervnc-server tigervnc vnc vnc-server

配置vnc

#copy配置文件
[root@localhost ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

#打开配置文件
[root@localhost ~]# vim /etc/systemd/system/vncserver@:1.service

#在打开的文件中找到这一行
ExecStart=/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"
PIDFile=/home/<USER>/.vnc/%H%i.pid

#将两行文件中的<USER>修改为当前系统用户名,我当前用户的用户名为admin,修改后的配置如下
ExecStart=/sbin/runuser -l admin -c "/usr/bin/vncserver %i"	PIDFile=/home/admin/.vnc/%H%i.pid

'''
连接如果有问题检查这里的配置用户和启动用户是否是同一个,否则会出现authentication error
'''
'''
设置密码
'''
[root@localhost ~]# vncpasswd

#打开配置文件
[root@localhost ~]# vim /etc/libvirt/qemu.conf

#找到如下两行,把前面的#去掉,保存退出
vnc_password = "123456"
vnc_listen = "0.0.0.0"

#重新加载systemd
[root@localhost ~]# systemctl daemon-reload

#启动vnc
vncserver

#关闭vnc
vncserver -kill :1  #(只是告诉你关闭的方法,关了就连不上了)
    
'''
systemctl stop firewalld  看一下防火墙关闭了没有,没有关要关闭
'''

在你的物理机上或其他机器下载vncviewer软件,打开软件输入IP,容器桌面出来了!会发现跟平常的centos7系统一模一样!

我们会看到自带的浏览器还是火狐的,那么我们想使用谷歌怎么办,继续往下看

cd /etc/yum.repos.d  #进入路径

vim google-chrome.repo  #编写文件
'''
#加入以下内容

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
'''

yum -y install google-chrome-stable --nogpgcheck   #安装谷歌浏览器

#将chrome浏览器图标copy到桌面
cd /usr/share/applications/
cp  /usr/share/applications/google-chrome.desktop  /root/Desktop

然后就会看到谷歌浏览器存在桌面了,还需配置一下,不然打不开

#方法一
#桌面图标右击-->属性-->启动命令后添加“--no-sandbox”
/usr/bin/google-chrome-stable %U --no-sandbox

#方法二
vim  /usr/share/applications/google-chrome.desktop
修改:Exec=/usr/bin/google-chrome-stable %U
为:Exec=/usr/bin/google-chrome-stable %U --no-sandbox
cp  /usr/share/applications/google-chrome.desktop  /root/Desktop

结语:

n/google-chrome-stable %U --no-sandbox

#方法二
vim /usr/share/applications/google-chrome.desktop
修改:Exec=/usr/bin/google-chrome-stable %U
为:Exec=/usr/bin/google-chrome-stable %U --no-sandbox
cp /usr/share/applications/google-chrome.desktop /root/Desktop


### 结语:

**其实也没有什么好总结的,都是固定的东西,这次先说到这里,下一篇准备分享一下在linux容器中如何跑windows程序以及如何在docker中玩游戏,包括docker映射本地显卡的方法**
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐