(1)课程调查
- 进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
应该是一门对于一些新东西的应用,以为和操作系统或者系统结构有所关联,没想到是与微服务相联,而且这个课要我们写博客,这让我不禁想起了软工,把害怕打在公屏上。不过呢,对于这个Docker也是有所听闻,却一直没有时间去学习,能有一个机会去学习也是非常不错的。
(2)了解微服务
- 第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
- 定义:
微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。 而所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。简而言之,微服务(Microservices)架构把一个庞大的application拆成几个小的独立的服务,再把独立的服务串起来。
- 特点:
单一职责:对于每个服务而言,在服务架构层面遵循单一职责原则。符合高内聚、低耦合,不同的服务通过“管道”的方式灵活组合,从而构建出庞大的系统。
轻量级通信:服务之间应通过轻量级的通信机制,实现彼此间的互通互联,相互协作。所谓轻量级通信机制,通常指语言无关、平台无关的交互方式。对于微服务而言,通过使用轻量级通信机制,使服务与服务之间的协作变得更加标准化,也就意味着在保持服务外部通信机制轻量级的情况下,团队可以选择更适合的语言、工具或者平台来开发服务本身。
独立性:在单块架构中,功能的开发、测试、构建以及部署耦合度较高,相互影响。而在微服务架构中,每个服务都是一个独立的业务单元,当对某个服务进行改变时,对其它服务不会产生影响。无论是从开发、测试还是部署这些阶段来看,服务与服务之间都是高度解耦的。
进程隔离:所有的功能都运行在同一个进程中,就意味着,当对应用进行部署时,必须停掉当前正在运行的应用,部署完成后,再重新启动进程,无法做到独立部署。但在微服务架构中,应用程序由多个服务组成,每个服务都是一个具有高度自治的独立业务实体。通常情况下,每个服务都能运行在一个独立的操作系统进程中,这就意味着,不同的服务能非常容易地被部署到不同的主机上。
- 优点:
开发简单,集中式管理
基本不会重复开发
功能都在本地,没有分布式的管理和调用消耗
- 缺点:
容器技术不够成熟、不够安全,因为容器彼此共享了主机的OS内核
分布式系统可能复杂难以管理,并且分布部署导致跟踪问题难
拓展性不足
- 部署:
一台主机部署多服务实例
每个主机一个服务实例
每台容器一个服务实例
松耦合,可独立部署
(3)学习docker技术
- Docker:
一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可 以实现虚拟化。
Docker 包括三个基本概念:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、暂停等。
仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像
- Docker Compose:
Compose 是用于定义和运行多容器 Docker 应用程序的工具。
通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
- Dockerfile:
一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
- docker machine:
允许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机的工具
- Swarm:
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。
- K8s:
是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。
(4)搭建自己的docker环境
- 环境:
该实践使用的环境是ubuntu1.8.04
- Ubuntu Docker 安装:
- 卸载旧版本():
$ sudo apt-get remove docker docker-engine docker.io containerd runc
- 更新ubuntu的apt源索引
sudo apt-get update
- 安装 apt 依赖包,用于通过HTTPS来获取仓库:
$ sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg-agent
software-properties-common
- 添加 Docker 的官方 GPG 密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥
$ sudo apt-key fingerprint 0EBFCD88
- 使用以下指令设置稳定版仓库:
$ sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
- 安装 Docker Engine-Community
- 更新 apt 包索引。
$ sudo apt-get update
- 安装最新版本的 Docker Engine-Community:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
- 测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:
$ sudo docker run hello-world
这就安装Docker成功了;
容器的操作
- 输出hellowolrd:
docker run ubuntu:15.10 /bin/echo "Hello world"
- 容器的创建:
docker run -it ubuntu /bin/bash
- 容器的查看:
docker ps -a
- 容器的启动(已经停止的):
sudo docker start <容器 ID>
- 容器的停止:
$ docker stop <容器 ID>
- 查看容器标准输出
sudo docker logs [容器ID]
- 删除容器
$ docker rm -f 1e560fca3906
仓库
- 听了大佬的话,去用了一下阿里云的镜像仓库,先注册,并有仓库
- 登入仓库
- 拉取一个镜像,链接适合啥都不懂的人,比如我;(https://blog.csdn.net/meltsnow/article/details/92851811)
- push镜像到仓库
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/dkyu/acki:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/dkyu/acki:[镜像版本号]
这就成功啦。