数据卷
参考文档
https://topsale.gitbooks.io/java-cloud-dubbo/content/
单体应用:
项目的架构完完全全属于传统的 MVC 架构,所有的子系统都集成在一个很繁杂的 JVM 进程中。
优点:
这种单体架构的优点在于方便管理,所有代码在同一项目中,但是当需求越来越多,项目规模越来越大,其坏处也很明显。
缺点:
- 项目过于臃肿,部署效率低下
- 系统高可用性差,资源无法隔离
- 开发成本高
- 无法灵活拓展
- 牵一发而动全身,修改很麻烦
微服务:
服务化:用通俗的语言来说,服务化就是把传统单体应用中通过 JAR 包依赖产生的本地方法调用,改造成 RPC 接口产生的远程方法调用。这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。
目的:解决单体应用带来的缺点
如果部署:将单体应用拆分为多个服务,生成多个实例(部署在doctor之上),有负载均衡服务器访问
Doctor:
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
传统的虚拟机技术,创建的操作体统,需要占用计算机资源,且各个系统资源不能共享(一个操作体统虚拟化的cpu不能给另一个操作提供使用),虚拟机之上操作系统不可以在装虚拟机
docker之上安装的操作系统占用的所有的资源都来自宿主机,资源共享。docker之上操作系统还可以装docker
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
Docker 镜像
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root
文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root
文件系统。比如官方镜像 ubuntu:16.04
就包含了完整的一套 Ubuntu 16.04 最小系统的 root
文件系统。
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
安装
- 它仅适用于 64 位 Linux 安装
- 它需要 Linux 内核版本 3.10 或更高版本。(可以升级内核)
uname --m #查看系统64位还是32位
uname -r #查看内核版本
使用脚本安装 Docker
curl -sSL https://get.daocloud.io/docker | sh
查看版本
docker version
如果使用非root用户直接运行docker时 执行 sudo usermod -aG docker 用户名
命令,然后重新登陆(xShell和服务器断开连接,如果不行,试着重启一个docker),否则会报错,没有权限
sudo usermod -aG docker zy //本机普通用户的用户名为zy
重启docker
service docker restart
启动docker
service docker start
停止docker服务
service docker stop
查看docker服务的运行状态
systemctl status docker.service
配置加速器
1:
sudo vim /lib/systemd/system/docker.service
添加 --registry-mirror=https://jxus37ac.mirror.aliyuncs.com 到 ExecStart:
配置加速器的另一种方式,适用Ubuntu 16.04+、Debian 8+、CentOS 7
请在/etc/docker/daemon.json
中写入如下内容(如果文件不存在请新建该文件),注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。如果使用了第二中,必须将第一种设置的给删除掉;
{
"registry-mirrors": [
"https://registry.docker-cn.com" //mirror地址,上面的地址也可以,我本人测试速度好像都差不多
]
}
2:保存配置
systemctl daemon-reload
3:重启服务
service docker restart
4.查看是否配置成功
在命令行执行 docker info,出现下面的信息,则成功
第一个Docker应用程序
用docker命令运行一个镜像,启动一个docker容器
docker run --name [mytomcat] -d tomcat:lastest --name:自定义docker名字,-d:后台启动,tomcat:lastest:指定的镜像
启动docker容器,并执行docker容器中的程序
docker run ubuntu:18.04 /bin/echo "hellow"
解释这段代码:启动Ubuntu:18.04 这个镜像,生成一个docker容器(images启动才生成docker容器),由这个容器中的echo,来打印"hellow",所以第一次执行的时候,会去下载镜像,等下载完毕后才执行echo,第二次执行,速度就很快了,原因,镜像已经被下载了,直接使用即可,所有的镜像存放在:https://hub.docker.com/search?q=&type=image
在主线程中运行的(不是在容器中输入这些命令)
docker images //查看所有的镜像
docker ps -a //查看docker容器运行过的容器
docker ps //正在运行的docker容器(后台)
docker rm [9996c85163(CONTAINER ID)] //删除由docker ps -a 中展示的信息
docker rm ID[NAME] ID[NAME] //删除多个容器,输入制定的容器ID或者NAME
docker rmi ID //删除镜像
docker logs -f CONTAINER ID //打印后台日志(可以加一个参数 -f,使它一直处于监听模式)
docker stop CONTAINER ID //停止后台一直运行的容器(服务)
docker restart CONTAINER ID //重新启动一个容器
docker start CONTAINER ID //启动一个停止的容器
docker exec -it CONTAINER ID /bin/bash //进入正在运行的docker容器,此时会进入到容器之中,通过ps命令来查看该容器运行的程序
docker top CONTAINER ID(如果不行使用