觉得是脱离企业需求的校内课程,没想到是软件开发相关技术课程。可是听到说像软工实践相似的课程仍是有些惧怕,毕竟不是一我的可以轻松完成的。由于疫情的关系,本学期的时间严重不足,但愿不要占用太多时间为好。mysql
微服务是一种软件开发技术,是面向服务的体系结构(SOA)结构样式的一种变体,它将应用程序安排为一组松散耦合的服务。在微服务架构中,服务是细粒度的,协议是轻量级的。sql
Martin Fowler将基于微服务的体系结构描述为具备如下属性:docker
微服务运用了以业务功能为导向的设计概念,应用程序在设计时对业务功能或流程设计先行分割,将各个业务功能都独立实现成一个能自主运行的个体服务,而后再利用相同的协议将全部应用程序须要的服务都组合起来,造成一个应用程序。编程
若须要针对特定业务功能进行扩展时,只要对该业务功能的服务进行扩展就好,不须要整个应用程序都扩展,同时,因为微服务是以业务功能导向的实现,所以不会受到应用程序的干扰,微服务的管理员能够视运算资源的须要来配置微服务到不一样的运算资源内,或是布建新的运算资源并将它配置进去。json
因为微服务是独立的,独立的应用程序单元,每一个微服务单元仅履行一个特定的业务功能,所以,它们自己能够被视为小型应用程序。若是应用程序建立十几个微服务或者构建具备不一样技术栈的多个微服务,那么,开发团队很快就会遇到麻烦,由于开发人员必须负责比开发传统的单体应用程序更多的开发任务。windows
不过,目前有一个解决方案:使用容器封装每一个微服务。Docker是一个容器化工具,旨在提供一种更简单的方式来处理容器化应用程序。它将微服务封装为所谓的Docker container,而后能够对其进行独立维护和部署。每个容器中将负责一种特定的业务功能,而开发人员只需专一于自身的技术特色,开发微服务并将微服务封装成容器,微服务之间架构的任务只需交给另外一些专业人员便可。tomcat
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核,对进程进行封装隔离,属于 操做系统层面的虚拟化技术。因为隔离的进程独立于宿主和其它的隔离的进程,所以也称其为容器。bash
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的建立和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。服务器
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操做系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有本身的内核,并且也没有进行硬件虚拟。所以容器要比传统虚拟机更为轻便。网络
Docker 包括三个基本概念:镜像(Image)、容器(Container)、仓库(Repository)
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建以后也不会被改变。镜像并不是是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并不是由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 同样,镜像是静态的定义,容器是镜像运行时的实体。容器能够被建立、启动、中止、删除、暂停等。
每个容器运行时,是以镜像为基础层,在其上建立一个当前容器的存储层,咱们能够称这个为容器运行时读写而准备的存储层为容器存储层。
一个仓库会包含同一个软件不一样版本的镜像,而标签就经常使用于对应该软件的各个版本。咱们能够经过 <仓库名>:<标签> 的格式来指定具体是这个软件哪一个版本的镜像。若是不给出标签,将以 latest 做为默认标签。
Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排。Docker Compose 能够轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。
Dockerfile是一个包含用于组合映像的命令的文本文档。可使用在命令行中调用任何命令。 Docker经过读取Dockerfile中的指令自动生成映像。
Docker Machine 是一个工具,它容许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机,可使用Docker Machine在本地的MAC或者windows box、公司网络,数据中心或者AWS这样的云提供商上建立docker。Docker Machine 也能够集中管理因此得docker主机。
Docker Swarm提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。Docker Swarm 能够在多个服务器或主机上建立容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
Kubernetes(k8s)是Google开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提升了大规模容器集群管理的便捷性。
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,Ubuntu 系统上可使用这套脚本安装:
$ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun
安装完成后输入:
$ docker version
出现版本信息即为成功安装。
国内从 Docker Hub 拉取镜像有时会遇到困难,此时能够配置镜像加速器。Docker 官方和国内不少云服务商都提供了国内加速器服务,例如:
这里以阿里云加速器为例进行介绍。在 /etc/docker/daemon.json 中写入以下内容(若是文件不存在请新建该文件)
{ "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"] }
以后重启服务。
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
在命令行执行
$ docker info
若是从结果中看到了以下内容,说明配置成功。
从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
$ docker pull tomcat
上面的命令中没有给出 Docker 镜像仓库地址,所以将会从 Docker Hub 获取镜像。而镜像名称是 tomcat,所以将会获取官方镜像 library/tomcat 仓库中标签为 latest(默认) 的镜像。
使用命令:
docker images
能够查看目前docker已获取的镜像。列表包含了 仓库名、标签、镜像 ID、建立时间 以及 所占用的空间。
有了镜像后,就可以以这个镜像为基础启动并运行一个容器。以上面的 tomcat 为例,打算启动以tomcat为镜像的容器,能够输入下面的命令:
$ docker run -it --rm -p 8080:8080 tomcat
下面验证一下tomcat是否启动成功。
再登录hub.docker.com中查看版本是否正确。
能够看到,tomcat的版本号正好是5.54,与hub.docker.com中一致。
若是要删除本地的镜像,可使用 docker image rm 命令,其格式为:
$ docker image rm [选项] <镜像1> [<镜像2> ...]
其中,<镜像> 能够是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。
如:
docker image rm tomcat
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另一个是将在终止状态(stopped)的容器从新启动。所须要的命令主要为 docker run。
以上面的 tomcat 为例,打算新建以tomcat为镜像的容器并启动,能够输入下面的命令:
$ docker run -it --rm -p 8080:8080 tomcat
下面验证一下tomcat是否启动成功。
能够利用
$ docker container start
直接将一个已经终止的容器启动运行。
使用
$ docker container stop CONTAINER ID
来终止一个容器
在启动容器时附带-d参数,容器会在后台驻留。这时若是须要进入容器,可使用
$ docker exec -it CONTAINER ID bash
进入容器。其中参数 i 表示交互式,参数 t 表示以Linux 终端形式进行。
退出容器时,输入 exit 便可。
使用
$ docker container rm
来删除一个容器。须要注意的是,在删除一个容器前,必须先终止它,不然出现错误提示。
登陆 https://hub.docker.com/ 免费注册一个属于本身的我的帐户。
使用
$ docker login
命令,并根据提示登陆帐号。
使用
$ dokcer search
能够搜索在docker hub中的相关镜像。如 docker search mysql:
能够看到有关MySQL镜像的信息,其中包括镜像名字、描述、收藏数(表示该镜像的受关注程度)、是否官方建立、是否自动建立。另外,在查找的时候经过 --filter=stars=N 参数能够指定仅显示收藏数量为 N 以上的镜像。
使用
$ docker pull
进行拉取镜像操做。如 docker pull mysql:
先使用
$ docker tag
为镜像打上本身的用户名/镜像名:标签。再使用
$ docker push
将镜像推送到本身的镜像仓库。
登陆docker hub,可以看到相关镜像仓库