开发应用程序通常涉及管理复杂的数据库、编程语言、框架、依赖关系等。此外,在与不同的操作系统(OSs)合作时,你可能会面临兼容性问题。这些变量中的每一个都会对你的工作流程产生负面影响。
为了解决这些问题,你可以开始使用Docker。这个工具使你能够在容器化环境中构建和管理应用程序。最终,Docker可以消除许多复杂的配置任务,使开发更容易、更有效率。
在这篇文章中,我们将回答 “什么是Docker?”这个问题,并解释它是如何工作的。然后,我们将向你展示它的一些主要用例,以及作为一个初学者如何开始使用。
什么是Docker?
那么,Docker究竟是什么?它是一个在沙盒中开发应用程序的开源平台。它的轻量级虚拟化环境也被称为容器:
Docker
虽然容器早在1979年就已经存在,但Docker让它们变得更加容易使用。使用Docker,开发人员可以在本地或生产服务器上构建、测试和部署他们的应用程序。
自2014年Docker 1.0发布以来,它已经为个人开发者和公司规范了容器的使用。现在,它有超过1300万用户,包括Netflix、Target和Adobe等大公司:
使用Docker的企业
另外,Docker的采用率正在逐年增加。根据Datadog的数据,近25%的公司已经开始使用Docker来监控其应用程序。自2015年以来,这一比例每年都在增长3到5个百分点:
越来越多的公司使用Docker(来源:Datadog)。
我们可以看到,Docker已经成为开发和部署应用程序的流行平台。为了进一步了解它的受欢迎程度,让我们深入了解Docker软件的工作原理。
Docker与虚拟机
在Docker中,你可以将一个应用程序打包成一个标准化的单元,可用于软件开发。这个单元,或称容器,包括应用程序的编码和依赖性,这样它就可以轻松地在任何计算环境中运行。
在Docker之前,公司经常使用虚拟机(VM)来运行应用程序。这些可以模拟物理计算机,使开发人员能够将一台服务器变成多台服务器。然而,这种方法会有一些缺点。
每个虚拟机包含操作系统和应用程序的完整副本,以及必要的二进制文件和库。这些文件可能会在一台电脑上占用几十GB的空间。此外,为客户操作系统虚拟化硬件可能需要大量的开销。
容器代替了对硬件的虚拟化,对操作系统进行了虚拟化。在Docker中,容器是应用层的抽象,可以包含代码和依赖关系。在同一台机器上,多个容器可以作为孤立的进程运行:
Docker和虚拟机的比较(来源:ResearchGate)。
因此,Docker容器通常占用的空间较小。它们还可以包含更多的应用程序,而不需要那么多的虚拟机和操作系统。
Docker是如何工作的?
想象一下,你正试图将货物从一个地方运到另一个地方。在现代,你可以用集装箱轻松做到这一点。这些将把某些物品放在一起的密封环境中,使它们能够通过船舶、火车或飞机进行运输。
Docker的工作方式非常类似。简单地说,Docker规范了开发和部署软件的方法。
Docker用容器工作。这些容器可以有可重复使用的组件,如Python、Node、依赖性等等。然后,你可以将容器部署在任何地方,而不必担心兼容性问题。
Docker一开始可能很复杂,所以让我们讨论一下这个软件中涉及的所有主要组件。一旦你了解了这些主要功能,你就可以简化你的应用程序的开发过程了!
Docker引擎
Docker Engine是用于在Docker中构建和容器化应用程序的客户-服务器技术。从本质上讲,它支持运行你的基于容器的应用程序所涉及的所有任务:
Docker引擎示意图(来源:Docker)
这些是Docker引擎中的主要组件:
- Docker Daemon:管理Docker镜像、容器、网络和卷。它还监听Docker API请求并处理它们。
- Docker Engine REST API:由Docker开发的API,与守护程序进行交互。
- Docker CLI:用于与Docker守护进程通信的命令行界面。
通过Docker引擎,你可以在任何基础设施上运行容器化的应用程序。这种设置有助于实现Docker的行业领先的容器运行时间。
Docker镜像
Docker镜像是一个可执行的软件包,包括运行一个应用程序所需的所有源代码、依赖性和工具。镜像是只读模板,为创建容器提供指示。
你可以把Docker镜像想象成蓝图,从而更好地理解它们。它们包含了一个容器运行时将包括的快照。
在一个镜像中,有多个堆叠层。例如,如果你想建立一个网络服务器镜像,你可以首先包括Ubuntu Linux。接下来,你可以在上面叠加Apache和PHP的编码。
在制作Docker镜像时,最好把最易变的层放在堆栈的高处。然后,如果你需要做一个改变,你就不需要重建整个镜像了。
Docker容器
正如我们前面所讨论的,容器是Docker的重要组成部分。简单地说,Docker容器是一个孤立的区域,供应用程序运行而不影响系统的其他部分。这个软件单元将打包所有的代码和依赖关系,以便于从一个应用程序转移到下一个。
以下是使用Docker容器的一些好处:
- 标准:虽然容器已经存在了几十年,但Docker已经为其使用创造了行业标准。Docker容器具有难以置信的可移植性和易用性。
- 轻量级:由于容器共享操作系统的内核,你不需要为每个应用程序提供不同的操作系统。因此,你的应用程序可以更有效地运行,并减少服务器和许可成本。
- 安全:与虚拟机不同,容器隔离了应用程序,这使它们更加安全。有了Docker,你的容器将有默认的隔离能力。
最终,Docker容器提供了比虚拟机更多的优势。尽管它们以类似的方式隔离和分配资源,但容器通常更可移植、更高效、更安全。
Docker Compose
Docker Compose是一个工具,旨在将多个容器作为一个单一服务来运行。如果你的应用同时需要NGINX和MySQL,Docker Compose可以让你创建一个文件来启动两个容器。这就避免了分别启动每个容器的需要。
以下是使用Docker Compose时的三个基本步骤:
- 创建一个Docker文件来定义应用程序的环境,以便它可以被复制。
- 在docker-compose.yml文件中定义你的应用程序的每个服务,以便它们可以在一个隔离的环境中运行。
- 使用Docker Compose命令来启动和运行你的应用程序。
从本质上讲,Docker Compose使多个容器在隔离的情况下运行。然而,在必要的时候,它们可以彼此互动。
例如,Compose可以帮助你创建和配置你的应用程序的服务依赖,如数据库、缓存或Web服务API。
Dockerfile
Dockerfile是一个文本文件,包括构建Docker镜像的说明。通过阅读这个文件,Docker会自动构建新的镜像。
docker build
命令将从Dockerfile和一个上下文中创建一个镜像。这个上下文是一组文件,位于指定的路径或URL中。
首先,输入以下命令:
docker build
这将把整个上下文发送给Docker守护进程。要指向文件系统中的一个Docker文件,请使用这个命令:
docker build -f /path/to/a/Dockerfile
如果构建成功,你可以指定一个你想保存新镜像的存储库和标签:
docker build -t shykes/myapp
然后,Docker守护进程将对Dockerfile进行验证。如果语法上有问题,它将返回一个错误。
Docker桌面
要在你的Mac、Linux或Windows环境中开始使用Docker,你可以安装Docker Desktop。它提供了一个简单、易于使用的界面,用于管理个人电脑上的容器、应用程序和图像:
Docker桌面
有了Docker Desktop,你就不必使用命令行来执行基本任务了。这可以加速开发工作流程:
Docker桌面仪表盘
它还配备了一个内置的扩展市场,使得开始使用第三方开发者工具变得容易。这些工具包括用于调试、测试和保护你的应用程序的软件:
Docker桌面扩展市场
另外,Docker Desktop对个人和小型企业使用是免费的。然而,请记住,较大的公司需要购买订阅,起价为每月5美元。
Docker Hub
Docker Hub是一个可以找到和分享容器镜像的平台。它是全球最大的容器镜像库,拥有来自社区开发者、开源项目和独立软件供应商(ISV)的资源:
Docker Hub镜像
以下是Docker Hub中包含的一些功能:
- 用于推送和拉动容器镜像的存储库
- 创建可以访问私人存储库的团队和组织
- Docker官方镜像
- Docker验证的发布者镜像
- 从GitHub或Bitbucket创建容器镜像并推送到Docker Hub
- 用webhooks触发行动
要开始使用Docker Hub,你需要创建你的第一个资源库。你只需要给它起个名字并指定它的可见性:
创建一个Docker Hub资源库
然后,你可以下载Docker Desktop,开始从Docker Hub拉取和推送容器镜像。你会在新仓库的最新标签下看到这些推送。
Docker的用途是什么?
Docker主要是为DevOps和开发人员设计的。这个工具使开发人员能够创建、定制和部署应用程序,作为可移植的轻量级容器。这种设置将其所有的依赖性打包成一个单元,可以在几乎任何操作系统上运行。
下面是Docker的一个典型用例:
- 开发人员在本地编写代码,然后使用Docker容器与他们的团队分享。
- 他们将应用程序推送到测试环境,在那里很容易进行自动和手动测试。
- 当发现bug时,开发人员在开发环境中对其进行故障排除。为了测试这些变化,他们在测试环境中重新部署它们。
- 在开发人员修复错误后,更新的图像被推送到生产环境。
使用这个工作流程,你可以测试新的软件,而不用进行手动安装。例如,你可能会发现设置一个MySQL服务器是很困难和繁琐的。相反,你可以使用Docker CLI来执行这项任务,只需一条命令。
由于Docker有自己的CLI,初学者可以用它来学习如何操作命令行。在Linux环境中设置好Docker后,你可以开始使用Linux命令。然后,你可以更快、更有效地执行系统管理任务。
使用Docker的优点和缺点
现在你已经了解了Docker的核心组件,让我们来讨论它的主要优点和缺点。然后你可以决定它是否对管理你的软件应用程序有用。
优点
作为一个开发者,你的一些工作在手动执行时可能变得乏味和重复。通过Docker容器,你可以安排这些任务的自动化。使用cron作业可以大大减少你的工作量,优化你的时间。
此外,Docker是高度可移植的。它使你的开发团队的每个成员都能在应用程序上工作,甚至在不同的服务器、机器或操作系统上。这种设置可以消除许多因平台不兼容而产生的问题。
与虚拟机相比,Docker容器可以节省更多空间。虽然Docker和虚拟机的工作原理相似,但Docker要轻得多。
此外,Docker有一个强大的社区。通过加入Docker社区活动,你可以与其他Docker用户进行面对面和在线交流:
Docker社区
你还可以浏览Docker的广泛的社区论坛。如果你是一个初学者,这些讨论可以帮助你获得使用这个平台的建议。
缺点
正如我们前面提到的,Docker可能比虚拟机更有效。然而,在物理服务器上运行应用程序通常要快得多。
Docker也可能涉及到一个陡峭的学习曲线。它不是为运行具有图形用户界面(GUI)的应用程序而设计的。这意味着你需要学习命令行,这对初学者来说可能是个挑战。
最后,Docker容器将在主机的操作系统上运行。如果这些容器中隐藏有任何恶意软件,主机可能会受到影响。
如何开始使用Docker
要开始使用Docker,你必须访问主网站。然后,为你的电脑操作系统下载兼容的版本。
如果你有一台Mac电脑,你将需要选择英特尔芯片或苹果芯片的Docker版本。也有针对Windows和Linux用户的选项。
一旦你打开下载的文件,它将在你的电脑上安装Docker Desktop。接下来,打开Docker Hub并创建一个新账户:
在Docker上创建一个账户
现在你可以打开Docker桌面并登录。然后,打开你的命令行或bash窗口,运行这个命令:
docker run -d -p 80:80 docker/getting-started
一旦你这样做,你会在你的Docker Desktop仪表板上看到一个新的容器。它的名字将是为你的账户随机生成的:
新的Docker容器
你也会有一个新的Docker镜像。如果你导航到Images标签,你会看到一个docker/getting-started图像正在使用中:
新的Docker镜像
现在你已经拥有了开始管理你的本地容器所需要的一切!
小结
如果你必须管理多个应用程序,Docker可以成为独立组织它们的有效工具。由于它使用容器,Docker可以帮助你开发每个应用程序,而没有编程语言、库或框架冲突的风险。
尽管Docker通常比虚拟机(VM)更有效,但在物理服务器上工作会更快。由于它还依赖于一个命令行界面,Docker可能也不是绝对的初学者的一个好选择。
评论留言