Windows 10中的Docker实践
来源:互联网 发布:摩卡软件招聘 编辑:程序博客网 时间:2024/06/15 07:37
题记
微软在人们的心目中就是商业化的代名词,操作系统、Office、数据库、Azure等可能是我们耳熟能详的,当然微软也在布局更多的技术王国。开源界对微软一直嗤之以鼻,指责其闭源行为影响技术的发展,不过微软现在也在积极改变以往的傲慢态度,慢慢的与开源融合,特别是很多产品都支持了Linux,例如SQLServer for Linux的发布,微软加入了OpenStack的基金会等。
虽然Linux是开源的领地,但是最终用户并不会买账,特别是GIS服务的政府用户,可能会更加习惯使用Windows,如今的产品虽然基于开源,但是能够降低用户门槛,尽可能的使用界面化操作才是真正的用户体验,这方面Windows独树一帜,特别是如今异常火爆的docker也可以直接运行在Windows环境下,本博在早些时间曾经发布了Windows Server 2016支持Docker,一方面2016还没有正式发布,另一方面部署docker环境还比较复杂,如今,用户可以直接在Windows10,通过简单的步骤就可以享用docker的好处,接下来我们就看看如何实现。
在西雅图举办的DockerCon 2016上,Docker官方发布了Docker Windows的公开测试版本。在这一版本里,你能够以一种非常简便的方式在安装了Hyper-V的Windows 10专业版上通过Docker运行Linux容器。在一段时间内这里会同时存在 一个稳定版本以及一个测试版本渠道 以获取新的版本。
部署环境
Docker for Windows 要求 64bit 的Windows 10 Pro, Enterprise and Education (1511 November update, Build 10586 or later) 或者Microsoft Hyper-V。
目前提供了两个类型,一个是Stable版本,一个是beta版本,前者更加稳定,但是可能并不是最新功能,beta版本并不稳定,但是紧跟最新的发展成果,用户可以根据需求自行选择。如果仅仅试用docker,希望在docker上运行第三方程序,建议试用stable版本,如果是对docker技术做研究,建议多关注beta版本。
不过用户可以将两个版本进行切换,但是只能运行一个版本。
下载地址:
https://download.docker.com/win/stable/InstallDocker.msi
https://download.docker.com/win/beta/InstallDocker.msi
安装部署
其实并没有什么好写的,安装某个版本之后,界面化的step by step即可。
安装完毕需要重启一下操作系统。
重启完毕之后,打开cmd,就可以运行docker环境了,是不是非常简单呢?
C:\Users\Administrator>docker versionClient: Version: 1.12.5 API version: 1.24 Go version: go1.6.4 Git commit: 7392c3b Built: Fri Dec 16 06:14:34 2016 OS/Arch: windows/amd64Server: Version: 1.12.5 API version: 1.24 Go version: go1.6.4 Git commit: 7392c3b Built: Fri Dec 16 06:14:34 2016 OS/Arch: linux/amd64C:\Users\Administrator>docker-compose versiondocker-compose version 1.9.0, build 2585387docker-py version: 1.10.6CPython version: 2.7.12OpenSSL version: OpenSSL 1.0.2h 3 May 2016C:\Users\Administrator>docker-machine versiondocker-machine version 0.8.2, build e18a919
通过上述信息可以看到,其实Windows内置了一个linux的服务器环境,本质上还是借助与windows平台的hyper-v技术来创建一个Linux虚拟机,你执行的所有命令其实都是在这个虚拟机里执行的。开始菜单右键->控制面板->管理工具->Hyper-V 管理器->虚拟机右键设置
通过windows客户端进行访问,同时docker-compose、docker-machine都自动集成进去了,比较方便。
查看一下服务器的详细信息
C:\Users\Administrator>docker infoContainers: 3 Running: 2 Paused: 0 Stopped: 1Images: 3Server Version: 1.12.5Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 19 Dirperm1 Supported: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins: Volume: local Network: host bridge null overlaySwarm: inactiveRuntimes: runcDefault Runtime: runcSecurity Options: seccompKernel Version: 4.4.39-mobyOperating System: Alpine Linux v3.4OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 1.919 GiBName: mobyID: LURE:ZYOH:CXUY:JANF:TT2M:VWAL:AMKS:ACBE:X7WG:77EF:3CJO:EUCIDocker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): true File Descriptors: 24 Goroutines: 35 System Time: 2016-12-28T03:13:55.6031232Z EventsListeners: 0Registry: https://index.docker.io/v1/WARNING: No kernel memory limit supportInsecure Registries: 127.0.0.0/8
查看任务栏,可以看到有一个docker的运行图标,可以对docker for Windows进行相关配置
通过这个配置我们可以针对运行docker的虚拟机进行配置(例如CPU和内存)、网络、存储(容器挂载存储的磁盘位置)进行配置,同时可以查看docker运行的日志信息,你也可以通过reset将环境重置。
关于该设置可以在C:\Users\Administrator\AppData\Roaming\Docker里面的setting.json文件进行修改。
相关操作日志也可以在C:\Users\Administrator\AppData\Local\Docker里面查看具体的日志信息。
Docker实践
其实关于Docker的使用以前在博客上也介绍了,所有的命令和使用跟Linux环境基本没有什么区别,例如通过docker直接pull下一个supermap/iserver的镜像
C:\Users\Administrator>docker run supermap/iserverUnable to find image 'supermap/iserver:latest' locallylatest: Pulling from supermap/iserver5a132a7e7af1: Pull completefd2731e4c50c: Pull complete28a2f68d1120: Pull completea3ed95caeb02: Pull completeff2dc3f3940d: Pull completed1af24d817e7: Pull complete3ec0e0463c10: Pull complete91a1466b8ecb: Pull completead0467d8161e: Pull completed633f6d099d2: Pull completeDigest: sha256:b0af27b1ebc1321e73e61449a757f34eca71bb9fc32aa03841fa1490ac04bd2eStatus: Downloaded newer image for supermap/iserver:latestaksusbd-2.4.1-i386/hasp_updateaksusbd-2.4.1-i386/hasplmdaksusbd-2.4.1-i386/aksusbd.rcaksusbd-2.4.1-i386/hasp.rulesaksusbd-2.4.1-i386/dunstaksusbd-2.4.1-i386/dinstaksusbd-2.4.1-i386/winehaspaksusbd-2.4.1-i386/aksusbdaksusbd-2.4.1-i386/aksusbd-2.4.1-i386/SuperMap Trial License .v2caksusbd-2.4.1-i386/haspvlib_99235.sotar: A lone zero block at 11065dpkg-query: no packages found matching aksusbdRemoving files ...Donedpkg-query: no packages found matching aksusbdCopy AKSUSB daemon to /usr/sbin ...Copy WINEHASP daemon to /usr/sbin ...Copy HASPLMD daemon to /usr/sbin ...Copy start-up script to /etc/init.d ...Link HASP SRM runtime environment startup script to system startup folderStarting HASP SRM runtime environment...Starting AKSUSB daemon: .Starting WINEHASP daemon: .Starting HASPLM daemon: .Coping VLIB...Installing v2c...DoneUsing ISERVER_HOME: /opt/SuperMapiServer8C/webapps/iserverUsing ISERVER_CONFIG: /opt/SuperMapiServer8C/webapps/iserver/WEB-INFUsing UGO_HOME: /opt/SuperMapiServer8C/support/objectsjava/binUsing CATALINA_BASE: /opt/SuperMapiServer8CUsing CATALINA_HOME: /opt/SuperMapiServer8CUsing CATALINA_TMPDIR: /opt/SuperMapiServer8C/tempUsing JRE_HOME: /opt/SuperMapiServer8C/support/jreUsing CLASSPATH: /opt/SuperMapiServer8C/bin/bootstrap.jar:/opt/SuperMapiServer8C/bin/tomcat-juli.jar28-Dec-2016 01:51:48.449 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.3228-Dec-2016 01:51:48.450 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Feb 2 2016 19:34:53 UTC28-Dec-2016 01:51:48.450 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.32.028-Dec-2016 01:51:48.450 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux28-Dec-2016 01:51:48.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.4.39-moby28-Dec-2016 01:51:48.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd6428-Dec-2016 01:51:48.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /opt/SuperMapiServer8C/support/jre28-Dec-2016 01:51:48.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_80-b1528-Dec-2016 01:51:48.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation28-Dec-2016 01:51:48.452 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /opt/SuperMapiServer8C28-Dec-2016 01:51:48.452 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /opt/SuperMapiServer8C28-Dec-2016 01:51:48.453 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/opt/SuperMapiServer8C/conf/logging.properties28-Dec-2016 01:51:48.453 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager28-Dec-2016 01:51:48.453 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms256m28-Dec-2016 01:51:48.454 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1536m28-Dec-2016 01:51:48.454 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxPermSize=192m28-Dec-2016 01:51:48.454 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xss512k28-Dec-2016 01:51:48.454 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.endorsed.dirs=/opt/SuperMapiServer8C/endorsed28-Dec-2016 01:51:48.454 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/opt/SuperMapiServer8C28-Dec-2016 01:51:48.454 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/opt/SuperMapiServer8C28-Dec-2016 01:51:48.455 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/opt/SuperMapiServer8C/temp28-Dec-2016 01:51:48.455 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /opt/SuperMapiServer8C/bin:/opt/SuperMapiServer8C/support/objectsjava/bin:/lib::/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib28-Dec-2016 01:51:48.561 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8090"]28-Dec-2016 01:51:48.574 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read28-Dec-2016 01:51:48.576 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 508 ms28-Dec-2016 01:51:48.599 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina28-Dec-2016 01:51:48.599 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.3228-Dec-2016 01:51:48.606 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying configuration descriptor /opt/SuperMapiServer8C/conf/Catalina/localhost/iserver#iClient.xml28-Dec-2016 01:51:49.054 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of configuration descriptor /opt/SuperMapiServer8C/conf/Catalina/localhost/iserver#iClient.xml has finished in 447 ms28-Dec-2016 01:51:49.054 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying configuration descriptor /opt/SuperMapiServer8C/conf/Catalina/localhost/iserver#help.xml28-Dec-2016 01:51:49.096 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of configuration descriptor /opt/SuperMapiServer8C/conf/Catalina/localhost/iserver#help.xml has finished in 42 ms28-Dec-2016 01:51:49.097 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /opt/SuperMapiServer8C/webapps/ROOT28-Dec-2016 01:51:49.115 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /opt/SuperMapiServer8C/webapps/ROOT has finished in 18 ms28-Dec-2016 01:51:49.116 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /opt/SuperMapiServer8C/webapps/iserver28-Dec-2016 01:51:54.534 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
我们知道iserver的访问接口是8090,所以通过端口映射进行访问
C:\Program Files\Docker\Docker\resources\qemu-img>docker run -p 8090 -dt supermap/iservera96524fc1b05e809a7ec45d3f36405ce328385500d964299a39312c933d314c7C:\Program Files\Docker\Docker\resources\qemu-img>docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa96524fc1b05 supermap/iserver "/bin/sh -c /opt/run." 7 seconds ago Up 6 seconds 0.0.0.0:32768->8090/tcp goofy_snyderee212359bf4e supermap/iserver "/bin/sh -c /opt/run." 55 minutes ago Up 55 minutes thirsty_blackwell95b25e2d2c71 hello-world "/hello" About an hour ago Exited (0) About an hour ago thirsty_bhabha
接下来就可以在宿主机的浏览器访问32768端口即可
文件解析
当进行docker for Windows的部署,会在C:\Program Files\Docker\Docker里面创建相关文件,其中相关执行命令存储在C:\Program Files\Docker\Docker\resources\bin
同时,在C:\Program Files\Docker\Docker\resources\qemu-img文件里面还可以执行qemu-img命令,这是一个不错的工具。
问题:我pull的镜像存储在什么地方?
由于所有的操作都是基于hyper-V的虚拟机,所以镜像都存储在虚拟机里面,可能运行的容器越多,该虚拟机占用的磁盘就会越大,所以可以自定义设置磁盘存储位置。在hyper-v选择虚拟机,右键设置,可以选择磁盘存储位置。
总结
简单用了一下,了解了其中原理不难得知,微软其实还是使用了hyper-V 作为一个Linux虚拟机提供容器环境,良好的用户体验应该会让很多用户进入容器世界,但是还没有没有根本解决windows运行容器的实质。
- Windows 10中的Docker实践
- docker sdk 实践(windows、ubuntu、macOS)
- Docker在PHP中的实践过程
- Docker for windows 10
- Docker实践
- docker实践
- Docker实践
- 实践在windows下用docker进行web开发
- docker实践(1) 在ubuntu15.10里面安装docker
- mongoDB实践-docker实践-01
- Docker实践快速入门
- Docker应用实践总结
- Docker实践8:Compose
- Docker Nova Driver实践
- Docker开发实践
- Docker 开发实践
- Docker多容器实践
- 雪球的Docker实践
- cocos2dx常见网络库
- Android String.xml文件中空格字符的输入
- Ubuntu Linux 环境变量PATH设置
- 常用浏览器内核简说
- 重新安装ubuntu后需要配置的东西
- Windows 10中的Docker实践
- 特殊字符‘&’的处理
- usb-request
- 2227: [Zjoi2011]看电影(movie)
- 【Oracle】LGWR
- android 模拟器终端 了解及部分命令
- freeswitch mod_callcenter配置
- 小白学react (初次使用)
- 【Class】Java中类、实例与Class对象