如今流行的服务: SpringBoot + SpringCloud + Dockerlinux
在计算机中,虚拟化是一种资源管理技术,是将计算机的各类实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户能够比本来的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。通常所指的虚拟化资源包括计算能力和资料存储。nginx
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能太低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用。web
虚拟化技术种类不少,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、虚拟机等等。docker
Hypervisor也叫虚拟机监视器(Virtual Machine Monitor),是一种运行在物理服务器和操做系统之间的中间软件层,可容许多个操做系统和应用共享一套基础物理硬件,它能够协调访问服务器上的全部物理设备和虚拟机。数据库
Hypervisor是全部虚拟化技术的核心。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载全部虚拟机的客户操做系统。使软硬件架构和管理更高效、更灵活,硬件的效能可以更好地发挥出来。apache
常见的产品有:VMware、KVM、Xen等等。json
在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化(hypervisor virtualization)有所不一样,管理程序虚拟化经过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操做系统内核之上的用户空间。所以,容器虚拟化也被称为“操做系统级虚拟化”,容器技术可让多个独立的用户空间运行在同一台宿主机上。ubuntu
因为“客居”于操做系统,容器只能运行与底层宿主机相同或者类似的操做系统,这看起来并非很是灵活。例如:能够在Ubuntu服务中运行Redhat Enterprise Linux,但没法再Ubuntu服务器上运行Microsoft Windows。centos
容器被认为是精益技术,由于容器须要的开销有限。和传统虚拟化以及半虚拟化相比,容器不须要模拟层(emulation layer)和管理层(hypervisor layer),而是使用操做系统的系统调用接口。这下降了运行单个容器所需的开销,也使得宿主机中能够运行更多的容器。浏览器
Docker核心组件都有:
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只须要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成全部工做并返回结果。咱们能够在同一台宿主机上运行Docker守护进程和客户端,也能够从本地的Docker客户端链接到运行在另外一台宿主机上的远程Docker守护进程。
Docker 镜像是用于建立 Docker 容器的模板。用户基于镜像来建立Docker容器。
镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如:
也能够将镜像看成容器的“源代码”。镜像体积很小,很是“便携”,易于分享、存储和更新。
Docker仓库是用来保存用户构建的镜像的地方也叫作Registry。仓库分为公共和私有两种。Docker公司运营公共的Registry叫作Docker Hub。用户能够在Docker Hub注册帐号,分享并保存本身的镜像(说明:在Docker Hub下载镜像巨慢,能够本身构建私有的Registry)。
Docker能够帮助你构建和部署容器,你只须要把本身的应用程序或者服务打包放进容器便可。容器是基于镜像启动起来的,容器中能够运行一个或多个进程。
咱们能够简单的认为,镜像是Docker中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,咱们就能够登陆到容器中安装本身须要的软件或者服务。
Docker借鉴了标准集装箱的概念,标准集装箱将货物打包装箱后,运往世界各地。Docker将这个模型运用到本身的设计中,不一样的是:集装箱运输货物,而Docker运输软件。
和集装箱同样,Docker在执行上述操做时,并不关心容器中到底装了什么,它无论是web服务器,仍是数据库,或者是应用程序服务器什么的。全部的容器都按照相同的方式将内容“装载”进去。
Docker也不关心你要把容器运到何方:咱们能够在本身的笔记本中构建容器,上传到Registry,而后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱同样,Docker容器方便替换,能够叠加,易于分发,而且尽可能通用。
Docker 是一个开源的虚拟化容器引擎,让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上。
Docker上手很是快,用户只须要几分钟,就能够把本身的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也很是迅速,能够说达到“随心所致,代码即改”的境界。
随后,就能够建立容器来运行应用程序了。大多数Docker容器只须要不到1秒中便可启动。因为去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也能够运行更多的容器,使用户尽量的充分利用系统资源。
使用Docker,开发人员只须要关心容器中运行的应用程序,而运维人员只须要关心如何管理容器。Docker设计的目的就是要增强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而下降那种“开发时一切正常,确定是运维的问题(测试环境都是正常的,上线后出了问题就归结为确定是运维的问题)”
Build once,Run anywhere
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具有可移植性,易于构建,并易于协做。(通俗一点说,Docker就像一个盒子,里面能够装不少物件,若是须要这些物件的能够直接将该大盒子拿走,而不须要从该盒子中一件件的取。)
Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就造成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务均可以表示为一系列内部互联的容器,从而使分布式部署应用
程序,扩展或调试应用程序都变得很是简单,同时也提升了程序的内省性。(固然,能够在一个容器中运行多个应用程序)
Docker官方建议在Ubuntu中安装,由于Docker是基于Ubuntu发布的,并且通常Docker出现的问题Ubuntu是最早更新或者打补丁的。在不少版本的CentOS中是不支持更新最新的一些补丁包的。
这里咱们将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前须要安装其余不少的环境并且Docker不少补丁不支持更新。
使用yum命令安装
yum install docker
查看docker版本号
docker –v
为了区分同一个仓库下的不一样镜像,Docker提供了一种称为标签(Tag)的功能。每一个镜像在列出来时都带有一个标签,每一个标签对组成特定镜像的一些镜像层进行标记(好比,标签12.04就是对全部Ubuntu12.04镜像层的标记)。这种机制使得同一个仓库中能够存储多个镜像。
咱们在运行同一个仓库中的不一样镜像时,能够经过在仓库名后面加上一个冒号和标签名来指定该仓库中的某一具体的镜像,例如docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,代表从镜像Ubuntu:12.04启动一个容器,而这个镜像的操做系统就是Ubuntu:12.04。
可使用 docker search ${name} 查找docker hub上的镜像
Docker镜像首页,包括官方镜像和其它公开镜像。Docker Hub上最受欢迎的10大镜像(经过Docker registry API获取不了镜像被pull的个数,只能经过镜像的stars数量,来衡量镜像的流行度。)。
国情的缘由,国内下载 Docker HUB 官方的相关镜像比较慢,可使用国内(docker.io)的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。Mirror与Private Registry的区别:
docker pull centos:7(指定version)。
目前国内访问docker hub速度上有点尴尬,使用docker Mirror势在必行。现有国内提供docker镜像加速服务的商家有很多,下面介绍:
ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优点之一就是不须要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
步骤:
1. 编辑文件
vi /etc/docker/daemon.json
2. 在文件中输入以下内容
{
“registry-mirrors”:[“https://docker.mirrors.ustc.edu.cn”]
}
3. 重启docker服务,若是重启docker后没法加速,能够从新启动Linux
systemctl restart docker.service
注意:必定要重启才能生效
4. 使用docker pull命令下载镜像
docker pull centos:7
5. 查看已下载的镜像
docker images
注意:国内网络的话可能超时致使下载失败。
DaoCloud也提供了docker加速器,可是跟ustc不一样,须要用户注册后才能使用,而且每个月限制流量10GB。linux上使用比较简单,一条脚本命令搞定。
官网:https://www.daocloud.io/mirror#accelerator-doc
配置加速器步骤:
一、 执行该命令:curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://{your_id}.m.daocloud.io
获取执行语句的位置:
二、 实际上面的脚本执行后,改的是/usr/lib/systemd/system/docker.service文件,加了个–registry-mirror参数。若是不执行上面的脚本命令,能够直接修改这个文件也可。
三、 重启加载配置。说明:加速效果不是很明显。
四、 下载镜像:以nginx为例
执行命令:docker pull daocloud.io/daocloud/nginx-proxy
阿里云也提供了docker加速器,不过比daocloud更麻烦:不光要注册为阿里云的用户,还得加入开发者平台。不过虽然麻烦,可是它的服务还真是不错,pull速度很溜!配置方法跟daocloud相似,也是开通加速器之后给一个url。
步骤:
一、 同daocloud同样,在该/usr/lib/systemd/system/docker.service文件中添加:
–registry-mirror=https://{your_id}.mirror.aliyuncs.com\
二、 从新加载配置而且重启
三、 下载须要的镜像,例如:docker pull ubuntu
网易也提供了Docker镜像服务:网易蜂巢(https://c.163.com/hub#/m/home/)
一、 docker rmi $IMAGE_ID:删除指定镜像
二、 删除全部镜像:
docker rmi `docker images -q`
使用命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
建立容器经常使用的参数说明:
建立一个交互式容器并起名叫mycentos
docker run -it --name mycentos centos:7/bin/bash
建立一个守护式容器:若是对于一个须要长期运行的容器来讲,咱们能够建立一个守护式容器。命令以下(容器名称不能重复):
docker run -itd --name mycentos2 centos:7 /bin/bash
查看当前正在运行的容器:
docker ps
退出当前容器,该容器也随之中止:
启动过的历史容器:
docker ps –a
docker ps –l
u docker attach container_name 或者container_id
例如:docker attach 83a46ff1aef6
exit退出时,容器随之中止
u docker exec –it container_name 或者container_id /bin/bash
例如:docker exec -it mycentos3 /bin/bash
exit退出时,容器不会中止
退出容器可使用exit命令或者使用[ctrl + D]退出。
docker rename 原名称 新名称
docker stop $CONTAINER_NAME/ID
例如:docker stop 5982286fa3a8
docker start $CONTAINER_NAME/ID
例如:docker start 5982286fa3a8
删除容器:
docker rm $CONTAINER_ID/NAME
例如:docker rm 5982286fa3a8
删除全部容器:
docker rm `docker ps -a -q`
docker inspect $CONTAINER_NAME/ID
例如:docker inspect 3f311573c03e
还能够经过-f或者–format来选定查看的结果
docker inspect -f='{{.NetworkSettings.IPAddress}}' 3f311573c03e
在docker中部署应用能够有多种方式:
步骤:
一、 从docker hub上拉取镜像
docker pull centos:7
二、 列出已有的镜像
docker images
三、 建立交互式容器
docker run -it --name=mycentos centos:7 /bin/bash
四、 在容器中安装jdk。
1)将jdk上传到容器中:
先将jdk上传到宿主机中
2)从宿主机复制jdk到容器中
docker cp jdk-7u75-linux-x64.tar.gz mycentos:/
3)在容器中解压缩,并将jdk移动到/usr/local目录下
tar -zxf jdk-7u75-linux-x64.tar.gz mv jdk1.7.0_75/ /usr/local/jdk7
4)配置环境变量
vi /etc/profile
5)在文件末尾追加
export JAVA_HOME=/usr/local/jdk7 export PATH=$JAVA_HOME/bin: $PATH
五、 将Tomcat上传到容器中
1)将Tomcat上传到宿主机,
2)上传到容器中。
docker cp apache-tomcat-7.0.47.tar.gz mycentos:/
六、 安装Tomcat
1) 在容器中解压Tomcat
tar -zxf apache-tomcat-7.0.47.tar.gz
2) 移动Tomcat到/usr/local中
mv apache-tomcat-7.0.47/ /usr/local/tomcat7
七、 将此容器提交为新的镜像
docker commit mycentos mytomcat7
八、 咱们能够将手动制做好的镜像打包:
docker save mytomcat7 > /root/tomcat7.tar.gz
而后将这个镜像包上传到别的机器上
九、加载镜像
docker load < /root/tomcat7.tar.gz
十、利用新提交的镜像启动tomcat容器
建立容器时作端口映射,将host的8888端口映射到容器的8088端口,使用-p参数作映射
docker run -dit --name tomcat2 -p 8888:8080 mytomcat7 /bin/bash
十一、登录容器,启动tomcat进程
docker exec -it tomcat2 /bin/bash source /etc/profile /usr/local/tomcat7/bin/startup.sh
十二、经过浏览器访问
步骤:
一、 获取Tomcat镜像
docker pull tomcat
二、 查看镜像
docker images
三、 建立守护式容器,并设置端口映射
docker run -d --name tomcat3 -p 8889:8080 tomcat /bin/bash
四、 访问Tomcat
在Docker Hub注册后建立private/public的Repository。