加入收藏 | 设为首页 | 会员中心 | 我要投稿 泉州站长网 (https://www.0595zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

细说构建微服务的开源技术之 Docker

发布时间:2022-06-01 11:19:32 所属栏目:云计算 来源:互联网
导读:Docker 是最近在云计算领域出现的新技术。目前,Docker 和以其为代表的容器技术的热度已经改过了之前的 OpenStack。Docker 以及其所代表的容器技术的流行,即使因为软件技术的进步,更是由于其符合云计算对软件领域所带来新思想。在如今的互联网和企业应用开
         Docker 是最近在云计算领域出现的新技术。目前,Docker 和以其为代表的容器技术的热度已经改过了之前的 OpenStack。Docker 以及其所代表的容器技术的流行,即使因为软件技术的进步,更是由于其符合云计算对软件领域所带来新思想。在如今的互联网和企业应用开发领域,微服务和 DevOps 是两个思想颇为深入人心。而 Docker 技术的出现和其对整个容器技术及其生态圈发展的促进,解决了这个微服务和 DevOps 这两个思想实践中的很多难题,使得前面两种思想大规模地实现成为了可能。所以,我们有必要地深入了解一下 Docker 这个技术,看看它会对云计算时代的软件开发产生什么样的影响。
 
       本文将介绍如下内容
 
什么是容器技术
什么是 Docker
Docker 是如何实现的
为什么要使用 Docker
       至于 Docker 的用法,不在这里做介绍。Docker 的入门使用,可以前往 Docker 官网。各种高级用法、技巧、经验,可以前往技术网站 CSDN、InfoQ 和 CoreOS、Centurylink Labs 等这些使用 Docker 的云计算厂商的网站。
 
二、容器技术简介
 
      容器技术有时会被称为轻量化虚拟技术。但不同于基于 Hypervisor 的传统虚拟化技术,容器技术并不会虚拟硬件。容器本身和容器内的进程都是运行在宿主 Linux 系统的内核之上。但与直接运行的进程不同,运行在容器内的进程会被隔离和约束。从而以直接运行的高效实现了虚拟技术的大部分效果。
 
      容器技术的历史
 
      容器技术并不是一个新鲜事物,早在1979年出现的在 Unix 系统中的 chroot 便是容器技术的雏形。而随后出现的 BSD Jail、Solaris Containers 和 OpenVZ 都算是容器技术的先驱。但容器技术开始普及却是在2007年,这一年 Google 贡献出 cgroups,并且从 2.6.4 开始,Linux 内核包含了这一组件,随后容器技术开始逐渐普及。但容器技术真正大放异彩则要等到2013年 Docker 0.10 版本发布。
 
三、Docker 简介
 
在 Docker 出现之前,不仅 Google 大量使用容器技术,国内的如淘宝也使用容器技术搭建了自己的应用平台。影响力最大的开源 PaaS 解决方案 CloudFoundry,也在使用自己的容器解决方案 Warden。而 Docker 发布之后,因其极有可能成为未来企业应用、互联网应用和云计算应用的开发、部署的中心角色,所以得到了几乎所有的业界大佬的追捧,Google、VMware、微软、RedHat 等等都已全力推动 Docker 技术的发展。同时,围绕 Docker,出现了一系列以 CoreOS 为代表的新技术。
 
Docker 的出现并非创造了一个新的容器技术,而是在 LXC (LinuX Container)注1、cgroups、namespaces 技术之上所构建的一种技术:
 
Docker 简化了容器的运行:它通过一个简单的命令就能够运行起一个容器docker run [params] [image] [command (optional)]
Docker 简化了容器镜像的构建和分发:Docker 提供了Dockerfile和docker commit两种方式构建镜像,并且提供了 Docker image registry 机制以保存和分发镜像
形象地解释
 
打一个比方,集装箱(容器)对于远洋运输(应用运行)来说十分重要。集装箱(容器)能保护货物(应用),让其不会相互碰撞(应用冲突)而损坏,也能保障当一些危险货物发生规模不大的爆炸(应用崩溃)时不会波及其它货物(应用)但是把货物(应用)装载在集装箱(容器)中并不是一件简单的事情。而出色的码头工人(Docker)的出现解决了这一问题。它(Docker)使得货物装载到集装箱(容器)这一过程变得轻而易举。对于远洋运输(应用运行)而言,用多艘小货轮(虚拟机)代替原来的大货轮(实体机)也能保证货物(应用)彼此之间的安全,但是和集装箱(容器)比,成本过高,但适合运输某些重要货物(应用)。
 
四、Docker 的组成
 
Docker 主要有 Docker Hub 和 Docker 引擎组成。前者是Docker 官方提供的容器镜像仓库;后者运行在宿主机上,可分为服务器端和客户端两部分。服务器端负责构建、运行和分发 Docker 容器等重要工作,客户端负责接收用户的命令和服务程序进行通信。
 
除了这两部分,Dockerfile 也是不得不提的,它虽然不能算作一个独立的组件,但是却是 Docker 中很重要的部分。通过 Dockerfile,技术人员可以创建自己的 Docker 容器镜像。Dockerfile 起到了连接开发与运维的桥梁的作用,非常符合现在 DevOps 的潮流。
 
Docker Hub
 
Docker Hub 是 Docker 官方所提供的一个镜像仓库。在运行 Docker 容器或构建自己的容器镜像时,都会直接或间接地使用到 Docker Hub 中的镜像。
 
Docker Engine
 
Docker Engine 承载了 Docker 容器在宿主机上运行启停、Docker 镜像的构建等功能等功能。是我们接触最多的组件。接下来简单介绍一下 Docker 常见的命令:
 
run运行一个容器,如果镜像不存在则先下载。常用参数有-d、-t、-i等
pull下载容器镜像
start/stop启动/停止一个 Docker 容器
rm删除一个容器
rmi删除一个容器镜像
commit将容器中的修改提交至镜像中
logs显示容器运行的控制台输出
build从 Dockerfile 构建一个镜像
inspect显示容器运行参数,通过输入一个 JSON 格式的值来显示相应的结果
 images显示当前宿主机上的所有镜像
Dockerfile
 
通过编写 Dockerfile,我们可以构建自己的镜像。看一个 Dockerfile 的例子:
 
复制
FROM dockerfile/java:oracle-java8
MAINTAINER Lifan Yang <yanglifan@gmail.com>
ADD device.jar /device.jar
EXPOSE 8080
ENTRYPOINT java -jar /device.jar
 
FROM指令的意思是说你的镜像是基于一个什么镜像。dockerfile/java:oracle-java8是一个镜像的名字,它也是有一个基础镜像狗狗见。其实它也是基于例如 Ubuntu、CentOS 这样的 Base 镜像。关于 Base 镜像的制作方法,Docker 官网上有介绍,需要专门的工具,这里不再作介绍。MAINTAINER指令是可选的。ADD指令是用来将一个文件或目录添加到 Docker 镜像中,前面是源文件,后面是目标文件。源文件必须使用相对路径。EXPOSE指令用来容器间暴露端口,其指定的端口也会被-P参数映射给宿主机的一个随机端口上。ENTRYPOINT可以用来指定运行 Docker 容器时,在容器中执行的命令是什么。如果需要运行多个命令,可以通过 Supervisor 来执行。
 
除了这些指令,还有一些常用的指令。例如,用于在构建过程中执行命令的CMD指令;用于在容器中设置环境变量的ENV指令。详细请见 Dockerfile Reference
 

(编辑:泉州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!