服务器应用架构演进
本质是用软件将硬件的资源隔离
docker概念
Securely build, share and run any application, anywhere
一处编译打包,处处运行
基础概念
镜像
Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。
例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称作一个Ubuntu镜像。镜像也可以安装了Redis应用程序(或其他软件),可以把它称为一个Redis镜像。
容器
Docker 利用容器来运行应用。
Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
仓库
仓库是存放所有的镜像文件的场所。个人理解就如同maven的中央仓库
Docker公司提供了官方仓库叫DockerHub,存放了数量庞大的镜像供用户下载
运行时序图
从仓库下载所需要的镜像到本地,将本地镜像run起来提供服务。
为什么要使用docker(容器)
特性 | Docker容器 | 虚拟机 |
启动速度 | 秒级 | 分钟级 |
性能 | 接近原生 | 较弱 |
内存代价 | 很小 | 较多 |
硬盘使用 | 一般问MB | 一般为GB |
运行密度 | 单机支持上千个容器 | 一般几个到几十个 |
隔离性 | 安全隔离 | 完全隔离 |
迁移性 | 优秀 | 一般 |
安装docker环境
Windows
Linux
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
模拟docker发布一个jar包的过程
应用发布文件建立
建立springmvc项目,并打包。
此jar运行,访问 localhost:8080/test?name=1 返回1。
java同学应该都很容易能看懂这段代码
此处,demo-0.0.1-SNAPSHOT.jar 为我们的发布文件。
制作镜像
1.找一个带有docker环境的机器。建立打包目录,将jar包传至该目录
并建立Dockerfile文件,Dockerfile文件内容如下
From openjdk:8-jdk-alpine
VOLUME ["/home/web"]
EXPOSE 8080
COPY demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
2.然后执行
docker build -t java-helloworld:0.0.1 .
执行过程
3.查看镜像
docker images
启动镜像
docker run --name mytest -p 8080:8080 -dit java-helloworld:0.0.1
好,我们看到了应用已经起来了。
当然你也可以在Docker Hub找到一些软件的景象,下载下来,运行。配合介绍运行应用。
例如,起来一个mysql只需要2步
docker pull mysql:latest
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
下一篇我们以docker swarm为例子介绍一下容器的调度。
kubernetes和其原理类似,docker swarm是官方自带的,更加轻量。