Docker都不懂,怎么好意思说自己搞互联网的!

Docker都不懂,怎么好意思说自己搞互联网的!

Docker是什么?

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

一个完整的Docker有以下几个部分组成:

  1. dockerClient客户端

  2. Docker Daemon守护进程

  3. Docker Image镜像

  4. DockerContainer容器

Docker都不懂,怎么好意思说自己搞互联网的!

简单来说,Docker平台是关于使用容器来使得创建、部署、运营变得更简单的一切相关内容。容器可以让开发者将一个应用程序打包,里面包含了必须的部分,如应用程序依赖的库和其他元素,以包的形式发布出去。通过将app和相关的元素添加到容器内,开发者确保这个apps能够运行在任何Linux机器上,不管机器有怎样的默认配置,或者这个机器与编写测试代码的机器有多大区别。这点对开发者而言很有用,因为它使得整个生命周期内对app操作变得很容易。

Docker都不懂,怎么好意思说自己搞互联网的!

Docker关键优势

开源:Docker最关键一个因素就是它完全是开源的。说明不论任何人都能给平台提出意见,当Docker本身不包含他们需要的特性时,可以适配并扩展它以满足他们自己的需求。

低开销:因为Docker创建的是一个虚拟环境。这就不需要开发者提供真实的虚拟环境一直到硬件级别,通过只创建运行时必要的库和OS部件,可以降低系统的开销。

敏捷:实现思路上,Docker是依赖速度和简单性来创建的。开发者现在能够非常简单地将软件和依赖元素打包到一个容器中,用任何编程语言,任何版本、任何工具,因为它们是一起打包到一个容器中,因而,事实上标准化了所有元素,同时也并未丢弃任何东西。

可移植性:Docker以一种全新方式使得应用程序容器变得完全可移植。开发者现在能够分发app从开发到测试到制作而又不破坏代码。

控制:当apps在生命周期中移动时,Docker提供了对apps最大程度的控制。在整个过程中有关安全性、管理型、和规模方面的问题。

Docker都不懂,怎么好意思说自己搞互联网的!

Docker原理

Docker 相比于传统虚拟机的技术来说先进了不少,具体表现在 Docker 不是在宿主机上虚拟出一套硬件后再虚拟出一个操作系统,而是让 Docker 容器里面的进程直接运行在宿主机上(Docker 会做文件、网络等的隔离),这样一来 Docker 会 “体积更轻、跑的更快、同宿主机下可创建的个数更多”。

Docker 中有三个核心概念:Image、Container、Repository。

  • Image: 有领“好人卡”倾向的广大程序猿一定对 镜像 的概念不会陌生。但和 Windows 的那种 ISO 镜像相比,Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个 Git 仓库的区别)。

  • Container: 容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,Container 就是一个与宿机隔离 “容器”。容器可宿主机之间可以进行 port、volumes、network 等的通信。

  • Repository: Docker 的仓库和 Git 的仓库比较相似,拥有仓库名、tag。在本地构建完镜像之后,即可通过仓库进行镜像的分发。

Docker都不懂,怎么好意思说自己搞互联网的!

Docker实例

一、运行一个Hello world

  • docker run 运行了一个容器

  • Ubuntu 是你运行的image,不如说是Ubuntu 操作系统的image

  • 如果本地没有Ubuntu image,则从Docker Hub上下载。

  • /bin/echo 是新容器的里的命令

Docker都不懂,怎么好意思说自己搞互联网的!

当容器被创建,docker创建了 新的Ubuntu的环境,然后再内部执行/bin/echo,然后输出 Hello world.容器是有周期的,上面的例子中,一旦命令被执行,容器就停止。

二、在docker中运行一个web应用

在docker中运行一个Python Flask web应用

Docker都不懂,怎么好意思说自己搞互联网的!

  • -d, 在后台中运行容器

  • -P, 在容器中任何需要的网络端口都映射到主机

  • 让你可以浏览web 应用程序

  • training/webapp,image,包含一个简单的Python Flask 应用

  • 剩余的参数组成在容器内部运行的命令。

查看web 应用程序容器

Docker都不懂,怎么好意思说自己搞互联网的!

-l, 显示最近启动的容器。

PORTS

0.0.0.0:32768->5000/tcp

-P,传送到docker run,Docker将容器的所有端口映射到主机。

在这个例子中,Docker将5000端口(Flask 默认端口)映射到32768端口。

-p, 指定端口:

Docker都不懂,怎么好意思说自己搞互联网的!

这就将容器中的5000端口映射到本机的80端口;

验证:32768,80端口已经正常可以访问,而没有指定的8080则不能访问。

这样一个web 应用就已经运行在docker中。


分享到:


相關文章: