第1次实践作业

一、课程调查

首先对于这个课程,听这名字第一印象就是综合性强,工程量大。本来以为是在机房上机,后来才发现是类似于软件工程一样,在博客园上完成作业,工程量又更大了。而且还用到了虚拟机,我不是很喜欢用虚拟机,所以这门课对我来说应该是一个很大的挑战。

二、了解微服务

1.1微服务是什么

  • 定义:微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
  • 现状:微服务作为一项在云中部署应用和服务的新技术已成为当下最新的热门话题。但大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。

1.2特点

  • 针对特定服务发布,影响小,风险小,成本低
  • 频繁发布版本,快速交付需求
  • 低成本扩容,弹性伸缩,适应云环境

1.3相较于传统的软件架构有什么优缺点

1.3.1优点

  • 每个服务足够内聚,足够小,代码容易理解、开发效率提高;
  • 服务之间可以独立部署,微服务架构让持续部署成为可能;
  • 每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;
  • 容易扩大开发团队,可以针对每个服务(service)组件开发团队;
  • 提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;
  • 系统不会被长期限制在某个技术栈上。

1.3.2缺点

  • 开发人员要处理分布式系统的复杂性;
  • 开发人员要设计服务之间的通信机制,对于需要多个后端服务的user case,要在没有分布式事务的情况下实现代码非常困难;
  • 涉及多个服务直接的自动化测试也具备相当的挑战性;
  • 服务管理的复杂性,在生产环境中要管理多个不同的服务的实例,这意味着开发团队需要全局统筹。

1.4怎样部署

  • 基于主机(物理机或虚机)的多服务实例
  • 基于主机(物理机或虚机)的服务实例
  • 基于容器的服务实例
  • 无服务器部署

三、学习docker技术

(1)学习了解docker的相关概念

  • Docker:是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

  • Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

  • docker compose:Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

  • Dockerfile:Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

  • docker machine:Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。
    Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

  • Swarm:Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。

  • k8s:kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

(2)搭建docker环境

1.Ubuntu Docker 安装

1.1 卸载旧版本
$ sudo apt-get remove docker docker-engine docker.io containerd runc
1.2 使用 Docker 仓库进行安装

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库

1.2.1设置仓库
  • 更新 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 -

  • 设置稳定版仓库
sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"

1.2.2 安装 Docker Engine-Community
  • 更新 apt 包索引。
sudo apt-get update

  • 安装最新版本的 Docker Engine-Community 和 containerd ,或者转到下一步安装特定版本:
sudo apt-get install docker-ce docker-ce-cli containerd.io

  • 测试 Docker 是否安装成功
sudo docker run hello-world

2.Docker 容器使用

2.1 获取镜像
  • 没有 ubuntu 镜像,使用 docker pull 命令来载入 ubuntu 镜像
sudo docker pull ubuntu

2.2 启动容器
  • 以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
$ docker run -it ubuntu /bin/bash

参数说明:

  1. -i: 交互式操作。
  2. -t: 终端。
  3. ubuntu: ubuntu 镜像。
  4. /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

2.3退出容器
  • 要退出终端,直接输入 exit:
root@ed09e4490c57:/# exit

2.4启动已停止运行的容器
  • 查看所有的容器命令如下:
$ docker ps -a

  • 使用 docker start 启动一个已停止的容器:
$ docker start 2aceba3abaf5

  • 再次查看容器状态可知容器被启动:
2.5后台运行
  • 在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
sudo docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hi; sleep 1; done"

  • 再次查看容器状态

  • 使用 docker run 命令来在容器内运行一个应用程序输出Hello world
docker run ubuntu:15.10 /bin/echo "Hello world"

2.6停止一个容器
  • 停止容器的命令如下:
$ docker stop <容器 ID>

  • 停止的容器可以通过 docker restart 重启:
$ docker restart <容器 ID>

2.7更新容器
sudo docker rm -f <容器 ID>
2.8删除容器
sudo docker rm -f <容器 ID>

3.Docker 镜像使用

3.1列出镜像列表
  • 我们可以使用 docker images 来列出本地主机上的镜像。
sudo docker images

3.2获取一个新的镜像
  • 本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果想预先下载这个镜像,可以使用如下命令来下载它。
sudo docker pull
3.3 查找镜像
  • 可以从Docker Hub 网站来搜索镜像
sudo docker search httpd
3.4 拖取镜像
  • 使用上图中的 httpd 官方版本的镜像,使用 docker pull 命令下载镜像
sudo docker pull httpd
3.5 删除镜像
  • 删除用镜像创建的容器
sudo docker rm -f <容器 ID>
  • 删除镜像
sudo docker rmi hello-world

4.Docker 仓库管理

4.1 登录
  • 登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像
sudo docker login

  • 使用 images 命令查看一下现在拥有的镜像。
docker images

  • 使用search 命令在官方的仓库中搜索,并用pull将它拉下来,使用images查看,拉取成功。


 posted on 2020-04-14 12:03  Youngmits  阅读(179)  评论(0编辑  收藏  举报