原文链接:Docker简介-WorkMap技术博客
Docker简介
Docker是什么
Docker是一个用于构建、发布和运行程序的开源平台,借助操作系统提供的容器技术,简化了安装、运行、发布和删除软件的过程,同时提供了一套使用容器技术的最佳实践。Docker可以帮助你将应用程序与基础设施分离,以便快速交付软件。使用Docker,你可以像管理应用程序一样管理基础设施。
Docker由一个命令行程序、一个后台引擎进程和一组远程服务组成。
容器及Docker容器
2005年,Sun公司发布Solaris 10和Solaris容器,“容器”成为描述特定运行时环境的术语。它提供了一些列容器技术,用于限制进程访问的文件系统以及硬件资源,使软件进程运行于独立的命名空间中,实现软件进程间的独立环境。
一个容器是一种标准的软件单元,它将代码和所有依赖项打包起来,使应用程序能够在不同的计算环境中快速、可靠地运行。Docker容器镜像是一个轻量级、独立的可执行软件包,包括运行应用程序所需的所有内容:代码、运行时、系统工具、系统库和配置。容器镜像在运行时变成容器,在Docker容器中,镜像在运行于Docker引擎时变成容器。无论是Linux还是基于Windows的应用程序,容器化软件始终会以相同的方式运行,而不受基础设施的差异影响。容器将软件与其环境隔离开来,并确保它在不同环境中(开发环境和部署环境)的表现是一致的。
Docker容器技术于2013年作为开源Docker引擎推出。它封装了当时的容器技术,最初是Linux中的cgroups和namespaces。 后来又与微软合作,将Docker容器及其功能扩展到Windows Server上。
容器与虚拟化的区别
容器是在应用层面的一种抽象,将代码和依赖项打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器作为独立的进程在用户空间中运行。容器占用的空间比虚拟机少(容器镜像通常只有几十 MB 的大小),可以处理更多的应用程序,并且需要更少的虚拟机和操作系统资源。
虚拟机(VM)是物理硬件的抽象,将一台服务器变成多台服务器。虚拟机控制器允许多个虚拟机在一台物理机上运行。每个虚拟机包括完整的操作系统副本、应用程序、必要的二进制文件和库——占用数十GB的空间。虚拟机启动也更慢。
Docker使用的系统特性
Docker使用的操作系统功能包括:
- PID命名空间:进程标识符和功能
- UTS命名空间:主机名和域名
- MNT命名空间:文件系统访问和结构
- IPC命名空间:通过共享内存进行进程间通信
- NET命名空间:网络访问
- USR命名空间:用户名和标识符
- chroot系统调用:文件系统根目录的位置
- cgroups:资源保护
- CAP drops:操作系统功能限制
- 安全性模块:强制访问控制
为什么要使用Docker
Docker并不提供容器技术,而是隐藏了直接使用容器技术的复杂性,提供一套默认配置作为容器技术的最佳实践。
- 标准化:Docker创建了容器的行业标准,因此它们可以在任何地方移植
- 轻量级:容器共享机器的操作系统内核,因此不需要每个应用程序都有一个操作系统,提高了服务器效率,降低了服务器和许可证成本
- 安全性:应用程序在容器中更安全,Docker提供了业界最强的默认隔离能力。
一个简单的示例
执行如下命令:
sudo docker run hello-world
- Docker首先在本地计算机上查找镜像hello-world
- 没有找到,则继续在Docker Hub上查找镜像
- 查找到镜像后,则下载镜像
- Docker安装下载的镜像,并从镜像创建一个新容器,启动容器
- 容器运行成功