编译整理|TesterHome社区
作者|Ishaan Gupta
以下为作者观点:
Docker 彻底改变了我们开发、交付和运行应用程序的方式。它使开发人员能够将应用程序打包到容器中 - 标准化的可执行组件,将应用程序源代码与在任何环境中运行该代码所需的操作系统 (OS) 库和依赖项相结合。本文将介绍 docker 的关键概念、安装、命令、构建映像、管理容器、网络、数据持久性以及其他一些高级主题。
那么,让我们开始吧。但在学习 docker 之前,你需要先了解容器/容器化。(本文内容较长,请耐心阅读!)
容器和容器化
什么是容器?
容器是轻量级、独立且可执行的软件包,其中包含运行软件所需的一切,包括代码、运行时、系统工具、库和设置。容器将软件与其环境隔离开来,并确保其能够统一运行,尽管开发和暂存之间存在差异。这意味着它们允许将应用程序及其所有依赖项和库打包成一个单元,该单元可以在任何具有容器运行时(例如 Docker)的机器上运行。
什么是容器化?
容器化是将软件代码及其依赖项打包的过程,以便它可以在任何基础架构上统一一致地运行。此方法可确保应用程序在从一个计算环境移动到另一个计算环境时可以轻松部署并可靠运行。
容器化的好处
-
一致性:无论应用程序在何处运行,其行为都相同。
-
效率:容器是轻量级的,共享主机操作系统内核,比虚拟机使用更少的系统资源。
-
可扩展性:随着应用程序规模逐渐增长,可以轻松地扩大或缩小应用程序的规模。
-
隔离性:每个容器都在其隔离的环境中运行,提高了安全性和稳定性。
什么是 Docker?
Docker 是一个开源平台,可让开发人员轻松高效地构建、部署、运行、更新和管理容器化应用程序。以下是 Docker 受欢迎的一些主要原因:
Docker 简化了开发工作流程,减少了“它在我的计算机上运行”的问题,并允许高效部署和扩展应用程序。
Docker 的主要优点:
-
可移植性:无论应用程序部署在何处,其运行方式都相同。
-
可扩展性:根据需求轻松地扩大或缩小应用程序的规模。
-
隔离性:容器封装应用程序及其依赖项,确保它们彼此独立运行。
Docker 的历史
Docker于2013 年 3 月由 DotCloud(现为 Docker, Inc.)首次发布。Docker 的理念是创建一种轻量级、可移植且高效的方式,用于在不同环境中一致地打包和运行应用程序。这受到了集装箱运输概念的启发,在集装箱运输概念中,应用程序及其依赖项被打包到可以轻松移动和部署的标准化容器中。
如今,Docker 已在各行各业得到广泛采用,并得到了庞大而活跃的开发者和贡献者社区的支持。它已成为容器化的基础技术,并引发了其他相关技术的发展,例如用于容器编排的 Kubernetes。
Docker入门
在深入了解 Docker 之前,需要在系统上安装它。Docker 适用于多个平台,包括 Windows、macOS 和 Linux。
安装 Docker
按照官方网站上适合的操作系统的说明进行操作。https://docs.docker.com/get-docker/
安装后,验证 Docker 是否正在运行:
docker — version
Docker 架构
了解Docker的架构:
Docker 组件
Docker 使用客户端-服务器架构,包含几个关键组件:
1.Docker 客户端:允许用户与 Docker 交互的命令行界面 (CLI) 工具。它与 Docker 守护程序通信以执行命令。
2.Docker Daemon(或 Docker Engine):Docker Engine 是一种开源容器化技术,允许开发人员将应用程序打包到容器中。容器是标准化的可执行组件,结合了应用程序源代码与在任何环境中运行该代码所需的操作系统 (OS) 库和依赖项。它监听 Docker API 请求并相应地处理它们。
3.containerd:管理容器生命周期的核心组件,包括启动、停止和管理容器进程。
4.runc:一个轻量级的 CLI 工具,用于根据开放容器计划 (OCI) 规范创建和运行容器。
5.Docker Registry:存储和分发 Docker 镜像的服务。Docker Hub 是默认的公共注册表,但也可以使用私有注册表。它类似于 GitHub,但它允许您推送镜像而不是源代码。
6.Docker 网络:为容器提供网络功能,使它们能够相互通信并与外界通信。
7.Docker Volumes 和 Bind Mounts:实现容器和主机系统之间的数据持久性和共享。
8.Docker Compose一种使用 YAML 文件定义和运行多容器应用程序的工具。
Docker 如何运行应用程序
1.构建:Docker 客户端向 Docker 守护进程发送构建请求,Docker 守护进程根据 中的指令创建镜像Dockerfile。
2.运送:图像存储在 Docker 注册表(公共或私有)中,可以从那里下载和共享。
3.运行:Docker 客户端请求 Docker 守护进程根据镜像创建并运行容器。
Docker 镜像
Docker 镜像是一个轻量级、独立的可执行包,其中包含运行软件所需的一切,包括代码、运行时、库、环境变量和配置文件。
拉取 Docker 镜像
你可以从 Docker Hub 中提取镜像:
docker pull hello-world
拉取镜像后,可以使用 docker run 命令轻松运行镜像。
docker 镜像和容器之间的区别可以形象地想象,容器就是你从 github 获取的一些源代码在你的机器上运行 node app.js,而镜像是 github 上的代码库。
基本docker命令
1.检查Docker 版本
docker version
2.查看系统范围的 Docker 信息
docker info
3.列出所有 Docker 镜像
docker images
4.列出正在运行的容器
docker ps
docker ps -a // List All Containers (Running and Stopped)
5.从注册表中提取镜像
docker pull node:20 // Here 20 specifies a specific version of the node we want to pull
6.从映像创建并启动新容器
在下面的例子中,我们以分离模式(-d)部署 NGINX 服务器,将主机端口 8080 映射到容器端口 80。
docker run -d -p 8080:80 nginx
7.停止正在运行的容器并将其删除
docker stop <container_id>
docker rm <container_id> // Remove a Stopped Container
8.删除图像