docker从入门到实践

服务器应用架构演进

本质是用软件将硬件的资源隔离

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

Windows Docker 安装 | 菜鸟教程

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是官方自带的,更加轻量。


版权声明:本文为gejiangbo222原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。