微服务集大成者——Docker

  1. 云栖社区>
  2. 博客>
  3. 正文

微服务集大成者——Docker

消失er 2018-08-03 10:35:00 浏览785
展开阅读全文

什么是Docker?

img_58163520542dc2c5accf3f6e01ca8712.png
docker_logo.png

Docker 是一个开源的应用容器引擎。它支持将软件、软件的依赖、以及软件的运行环境一起打包成一个镜像文件;将镜像发布出去,其他使用者可以直接使用这个镜像。

这就解决了同一份软件在不同机器上,重复进行复杂的环境配置问题。Docker在打包时,把原始环境一模一样地复制过来,使用者直接运行Docker镜像即可。

环境配置如此麻烦,换一台机器,就要重来一次。在Docker容器化技术之前,这个问题也一直存在,也出现了物理虚拟机的技术。

虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。
虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点:资源占用多、冗余步骤多、启动慢。

因此出现了Linux 容器(Linux Containers,缩写为 LXC)另一种虚拟化技术,Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的镜像文件中。运行这个文件,就会生成一个虚拟容器(进程)。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势:启动快、资源占用小、体积小。

Docker能做什么?

Docker 是一个容器工具,提供虚拟环境。它改变了我们对软件的认识。

站在 Docker 的角度,软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器......Docker 使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来。


img_1179795d45528acb90c31438f000c242.png
jimu.png

这正是微服务(micro services)的思想:软件把任务外包出去,让各种外部服务完成这些任务,软件本身只是底层服务的调度中心和组装层。

微服务很适合用 Docker 容器实现,每个容器承载一个服务。一台计算机同时运行多个容器,从而就能很轻松地模拟出复杂的微服务架构。

Docker核心概念

  • Docker客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API 和Docker主机进行交互。
  • Docker主机(Host):安装了Docker程序的机器。
  • Docker仓库(Registry):用来保存镜像,类似于maven中央仓库。
  • Docker镜像(Images):是用于创建 Docker 容器的模板,放在Docker仓库当中。
  • Docker容器(Container):独立运行的一个或一组应用。


    img_75a9cfb25681f07376c1b3ada38844b6.png
    jiagou.png

架构解析:
最左边Client就是客户端,也就是需要使用Docker容器的人;Client在自己机器上安装运行所需要的docker镜像,类似于Maven管理依赖一样,Docker也会是先去本地(DOCKER_HOST)去寻找,如果没有,就去中央仓库Registry拉取。

比如:我要实现一个简单的电商网站,实现完业务代码后用Dockerfile做成Docker镜像,然后从docker中央仓库拉取mysql、redis、mq的官方镜像,和自己的业务镜像一起组装成一个软件整体。

像mysql、redis、nginx这些开源公共的组件,官方都有将其做成Docker镜像,并发布在Docker Registry中,供广大开发者使用。我们自己实现的一些组件,也能按Dockerfile规范做成Docker镜像,发布出去供其他人使用。

Dockerfile,其实就是生成docker镜像的模板文件,包含很多指令。

Docker仓库分为公共的和私人的,公共的Docker仓库可以访问https://hub.docker.com进行查看。


Docker安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。

安装请参考官方文档。

安装完成后,运行下面的命令,验证是否安装成功:docker version


Docker(客户端)常用命令

  • 镜像操作


    img_02a04056d7dd724c794bd9831234b865.png
    image.png
  • 容器操作

1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]# docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
4、docker ps  
查看运行中的容器
5、 停止运行中的容器
docker stop  容器的id
6、查看所有的容器
docker ps -a
7、启动容器
docker start 容器id
8、删除一个容器
 docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:后台运行
-p: 将主机的端口映射到容器的一个端口    主机端口:容器内部的端口

10、查看容器的日志
docker logs container-name/container-id

更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
可以参考每一个镜像的文档
注意,在Docker中启动一个应用时,一定要做端口映射。不然客户端是无法访问到主机中的Docker容器。

使用Docker的步骤

1)、安装Docker
2)、去Docker仓库找到这个软件对应的镜像;
3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
4)、对容器的启动停止就是对软件的启动停止;

网友评论

登录后评论
0/500
评论
消失er
+ 关注