剧透:这篇文章是一个手把手的入门教程,所以准备好一杯茶和一张舒服的板凳,让我们开始创建一些容器吧。今天我们将学习Docker的基础知识,学习如何构建、运行和删除容器。
还记得那句名言吗:这能跑在我的机器上吗?相信每个开发人员都有被环境的问题折磨得头疼的可怕经历吧?
有了Docker,现在你可以忘记这句话了。Docker允许您在本地运行将在生产环境中使用的相同(或几乎相同)的环境。
我们先理解一下Docker是什么和不是什么。
Docker是什么?Linux容器技术很早就有了,比较有名的是Linux内核中的LXC项目。
Docker是一个基于LXC技术构建的容器引擎,使用Go语言开发,是一种执行操作系统级虚拟化(也称为“容器化”)的计算机程序。
不仅如此,Docker是一种流行的工具,可简化使用容器构建,部署和运行应用程序的过程。容器使我们可以打包应用程序需要的所有东西,例如库和其他依赖项,并将它们作为单个包打包。这样,我们的应用程序可以在任何机器上运行并且具有相同的行为。
Docker不是什么Docker不是虚拟机(VM)。
与虚拟机不同,Docker容器不需要或包含单独的操作系统。相反,它依靠内核的功能,并对CPU和内存使用资源隔离,并使用单独的命名空间隔离应用程序对操作系统的视图。
根据上面的简短描述,下图显示了虚拟机与Docker容器之间的比较。
如我们所见,Docker容器比虚拟机更简单,使用它我们可以避免启动和维护VM的开销。由于这是一个动手教程,因此我不会深入探讨Docker的工作原理。
基本概念镜像Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,也是一个独立的文件系统,包括运行容器所需的代码和数据,用来创建新的容器。
镜像一般使用Dockerfile来构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会在基础镜像的文件系统之上添加新的层级。
除了通过Dockerfile构建镜像,也可以直接从DockerHub上下载镜像别人已经创建好的镜像。
容器Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机,每个容器间是相互隔离的,但隔离的效果比不上虚拟机。容器中会运行某个应用,包含应用代码及其依赖(操作系统、第三方库等)。
在Docker容器中,容器之间的隔离是通过Linux的CGroups和Namespaces技术来实现的。其中CGroups实现了对CPU,内存,磁盘等资源访问进行限制,Namespaces实现了命名空间上的隔离。
仓库Docker仓库需要托管在某个Registry,Registry不止一个,可以是公共的,也可以是私有的。最大的公共Registry是Docker官方提供的DockerHub。还可以使用Docker官方提供的registry镜像来搭建一个自己的Registry。
仓库支持的操作类似git,创建了新的镜像后,可以push推送镜像到仓库,也可以pull拉取镜像到本地。
动手实践现在我们已经了解了什么是Docker,让我们开始动手实践。
安装由于安装取决于您的操作系统,因此我们不会在本教程中介绍它。要在您的操作系统上安装Docker,请遵循官方文档
InstallDockerforMacInstallDockerforMacGetDockerCEforUbuntu这里我用的是阿里的源
$curl-fsSL