docker是一门虚拟化容器技术,其设计理念是"build once, run anywhere"(一次构建,处处运行),听起来,是否是跟java的"wirte once, run anywhere"(一次编写,处处运行)很像?那么,什么是虚拟化容器技术呢?docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器,程序在这个虚拟容器里运行,就好像在真实的物理机上运行同样。有了 Docker,就不用担忧环境问题。正如开篇第一张图docker的标志同样,docker就是这条鲸鱼,其上驮着的集装箱,就是一个个互相隔离的容器,你能够随时往上添加集装箱,不会影响到原有集装箱里的内容。html
docker 和传统虚拟化方式的不一样之处,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操做系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有本身的内核,共享宿主机的内核,并且也没有进行硬件虚拟。所以容器要比传统虚拟机更为轻便。 java
docker能够在各个操做系统上安装,过程很简单,安装教程请看这里:www.runoob.com/docker/wind… docker在windows上安装是一件麻烦事,但不想在vm虚拟机中的linux上安装由于懒得开,因此仍是在windows上安装了,windows上有两种安装方法:linux
这是安装docker toolbox遇到的卡在下载boot2docker.iso的问题,安装docker其余版本的这节能够忽略不看。 docker toolbox安装完成后,会有以下三个图标, git
Running pre-create checks...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v1.12.1
(default) Downloading C:\Users\huang\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.12.1/boot2docker.iso...
复制代码
解决方案是:使用浏览器(或者迅雷)到boot2docker的主页下载最新版boot2docker.iso,地址:(github.com/boot2docker…),以下图: github
C:\Users\huang\machine\cache\
目录。记住要断开网络,从新点击Docker Quickstart图标启动docker便可,启动完成便可链接网络,开始学习docker了。
对boot2docker感兴趣的能够看看其github的介绍,boot2docker是一个轻量级的、用于运行docker容器的linux系统,彻底在内存中运行,大小只有45m左右,启动迅速。因此在windows中运行docker,其原理是使用启动了一个linux虚拟机,该虚拟机中安装了docker,点击Docker Quickstart后,咱们能够看到控制台的输出,该虚拟主机名为default,默认的ip是192.168.99.100。再从github中的介绍能够看到,该虚拟机有docker用户,密码为tcuser。所以,咱们能够从secureCRT或者git bash中使用ssh登陆到该机器,在上面使用docker命令。固然你能够在default虚拟机中安装vim等工具,可是因为其是内存操做系统,重启后这些新安装的工具都会消失。 web
ssh docker@192.168.99.100
# 密码
tcuser
复制代码
这一节能够暂时不看,等你以为docker下载太慢时,能够看个人另外一篇文章,配置镜像加速,地址为:www.jianshu.com/p/aff1a4a47…docker
这里我想先从docker的架构图和几个重要的概念提及,最后再说具体的命令,这样方便你们知道每一条命令的意思和执行过程。看完这篇文章后 ,推荐一个docker教程,不长,连接在文章最下方的参考资料。 vim
综上,结合上图,整个docker架构交互流程为:启动docker,docker以守护进程的方式运行在linux主机上(docker toolbox下为boot2docker虚拟出来的linux上),咱们发送docker命令给到docker daemon执行,docker能够从docker hub中拉取所须要的image,再根据image建立出container。windows
知道了上面docker架构的交互流程了,我这里以运行一个tomcat容器为例,一步步介绍经常使用的命令:浏览器
docker images
:列出当前docker中有哪些镜像,若是是第一次执行,固然就没有镜像了。docker search tomcat
:在docker hub中搜索tomcat镜像。固然你能够在浏览器中访问docker hub,地址为:(hub.docker.com/),就像访问maven的远程仓库同样,能够搜索你须要的内容。
docker pull tomcat
:拉取最新版的tomcat镜像到本地,下载完成后再使用docker images就能看到感下载的镜像了。docker run --name mytomcat -p 8080:8080 -d tomcat
:根据tomcat镜像运行出一个tomcat实例,执行两遍就有两个实例了(注意改端口),--name表示为这个实例命名,-p 8080:8080表示将本地的8080端口绑定到容器中的8080端口,才能使用localhost:8080(docker toolbox是192.168.99.100:8080)访问到tomcat端口。-d表示后台运行。docker run --name mytomcat03 -p 8082:8080 -it tomcat /bin/bash
:-it以交互、附加模式启动并进入容器后执行/bin/bash命令,不之后台运行,进入容器后执行exit命令后,会退出容器,此时使用docker ps -a命令查看会显示为exit状态。ctrl+p+q
:退出可是后台运行,如上一个命令,执行exit退出后容器就会退出,此时若不想容器退出,可按这一组快捷键。docker ps -a
:显示全部容器状态,docker ps只显示运行中的容器,-a表示显示全部容器,包括已退出的容器。这时就能看到刚刚启动的tomcat了。docker logs -f mytomcat
:查看刚刚启动的tomcat打出来的日志,-f表示跟踪滚动日志打印。docker exec -it mytomcat /bin/bash
:exec表示执行命令,命令最后须要带将要执行的命令,如/bin/bash,-it表示以交互、附加模式启动返回一个终端,/bin/bash表示进入容器后首先执行的命令。这条命令执行后就登陆到了容器内部,该容器中就是tomcat应用。就像使用ssh登陆到容器内部同样。这时候你能够修改容器内部的配置文件,固然,生产环境不建议这么作,而是使用配置文件外部挂载的方式。docker stop mytomcat
:中止mytomcat实例,不会删除容器内的东西。docker start -i mytomcat
:启动已中止的mytomcat实例,若是启动前修改了容器内的配置文件,此时从新启动会从新加载该配置,若是该配置文件是linux宿主机级别的,如/etc/profile文件,则不会加载,由于容器是共享宿主机的配置的。-i表示启动并进入交互命令界面。docker rm mytomcat
:删除已中止的mytomcat实例docker run --name mytomcat02 -p8081:8080 -e JAVA_HOME=/path/to/java/home -v /host/path/file:/container/path/file -d tomcat
:-e表示设置环境变量JAVA_HOME,进入到容器中,使用echo $JAVA_HOME能够看到该环境变量的值。-v表示挂载宿主机的/host/path/file到容器中的/container/path/file,修改宿主机的文件时,容器中的文件也会修改。若是使用的是docker toolbox,则宿主机挂在的文件须要在当前用户目录下,即c:\user\yourname下才行,不然不会报错但没法挂载成功,当时被这个问题坑了一个下午。docker cp /host/path/file mytomcat02:/container/path/file
:复制宿主机文件到容器中,能够用于当修改了容器配置文件后,配置文件错误致使没法启动时,复制配置文件到宿主机修改配置,而后从新复制回容器便可。docker inspect mytomcat
:查看容器信息,包括容器ip等信息。假如咱们下载了tomcat镜像并启动了容器实例,并在tomcat容器中修改了配置文件。这时,咱们能够把配置文件也一块儿打包作成镜像,发到另外的机器直接执行,就不用再单独对每一台机器配置了。docker提供了两种方式来构建镜像,以下:
dockerfile文件方式构建须要编写dockerfile,也只有几个命令,不难,请自行查阅资料。此处讲下docker commit命令。 docker commit mytomcat huangzb/tomcat
:将当前的mytomcat容器提交为镜像,镜像名为huangzb/tomcat
熟悉docker的网络结构是至关重要的,由于这样咱们就能够作集群啦。废话很少说,那就直入主题吧。
docker的网络使用了linux网络中的bridge(网桥)和veth(virtual ethernet虚拟以太网)虚拟设备。
由上,docker中新建的容器默认都使用了docker0网桥链接了起来,全部默认的,docker建立的全部容器都在一个网络中,互相能够访问。
以上。有兴趣的同窗能够学习下面的参考资料。