目录
1.微服务的部署策略
1.2 基于主机(物理机或虚机)的多服务实例
1.3 基于容器的服务实例
2. Docker
2.1 Docker是什么
2.2墟拟机与容器区别
3.Docker三要素
3.1 Docker 镜像
3.2 Docker 仓库
3.3 Docker 容器
4.Docker安装
4.1 安装必要的系统工具
4.2 配置阿里云Docker Yum源
4.3更新yum缓存
4.4 安装docker-CE
查看版本列表
5.Docker基本使用
5.1 基本语法
5.1.1 查看服务状态
5.1.2 启动 停止 重启 服务
5.1.3 开机自启
5.2 仓库与镜像
5.2.1 配置加速器(通过阿里云镜像控制台获得加速地址)
5.2.2 重新加载daemon
5.2.3 重启docker
5.3 下载镜像
5.3.1 查看宿主机上的镜像
5.3.2 删除镜像
5.4 创建容器
5.4.1 创建容器
5.4.2 启动、停止、重启容器
5.4.3 查看当前的容器
5.4.4 删除容器
5.4.5 进入容器
部署单体应用意味着运行大型应用的多个相同副本,通常提供若干台(N)服务器(物理机或虚拟 机),在每台服务器上运行若干个(M)应用实例。部署单体应用并不总是简单明了,但还是比部署微 服务应用简单。
微服务应用由几十甚至数百个服务组成。服务用不同的语言和框架写成,每个都是一个小应用,包括特 定的部署、资源、扩展和监控需求,例如,根据服务需求运行若干数量的服务实例。
此外,每个服务实例必须配套提供适当的 CPU、内存 和 I/O 资源。更具挑战性的是,尽管如此复杂,部 署服务还必须快速、可靠和性价比高。
基于主机的多服务实例”模式是最为传统的应用程序部署方法。在该模式下,软件开发人员可以提供单个或多个物理机或虚机,同时在每个主机上运行多个服务实例。
此模式有几种不同的实现形式,其中包括:将每一个服务实例都作为一个单独的进程,或是在同一进程 中运行多个服务实例。
优点:
不足:
在这种部署模式下,每个服务实例都运行在其各自的容器中,因此也被称为操作系统级别的虚拟化机 制。
使用这一模式时,用户将服务打包为容器镜像。每个容器镜像就是一个文件系统镜像,由应用和运行服 务所需的库构成。有的容器镜像还包括完整的 Linux 根文件系统,有的则更轻量。 以部署 Java 服务为例,构建的容器镜像包括 Java 运行时、Apache Tomcat 服务器、以及编译好的 Java 应用。
一旦将服务打包为容器镜像,就启动一到多个容器。通常每个物理机或虚拟主机上会运行多个容器,会 用到 Kubernetes 或 Marathon 这样的集群管理工具来管理容器。
集群管理工具把主机看做资源池,根据每个容器需要的资源和每个主机上可用的资源来调度容器。
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓 库,然后再安装应用;
Container(Docker容器),在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装 应用。
Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它 应用 程序。
镜像可以用来创建 Docker 容器。 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载 一 个已经做好的镜像来直接使用。
仓库是集中存放镜像文件的场所。
有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上 往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的 标签(tag)。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一 台 机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
Docker 利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等) 和运 行在其中的应用程序。
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
默认安装的是最新版本的稳定版
yum list docker-ce --showduplicates | sort -r
systemctl status docker
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl enable docker
systemctl disable docker
Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下 载 (默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,使用自定义的镜像仓库
vi /etc/docker/daemon.json
文件内容
{
"registry-mirrors":["你的阿里云专属加速器地址"]
}
systemctl daemon-reload
systemctl restart docker
docker pull 镜像名
获取一个 centos 系统的基础镜像可以使用如下的命令:
docker pull centos (未指定版本一般会使用latest(最新的)版本)
docker pull centos:版本号 (或者直接指定版本)
docker images
docker rmi centos
docker rmi -f centos:latest
如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像。或者强制删除镜像。
正确做法:先删除依赖该镜像的所有容器, 再来删除镜像
容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。
镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态
docker create -it --name centos01 centos:latest
docker start 容器ID|name|name:tag
docker stop 容器ID|name|name:tag
docker restart 容器ID|name|name:tag
docker ps #运行中的
docker ps -a #所有
docker rm 容器ID
docker rm -f 容器ID
docker exec -it 容器ID/容器NAME /bin/bash
docker exec -it 容器ID/容器NAME bash (简写)