- Docker 教程
- Docker - 首页
- Docker - 概述
- Docker - 在 Linux 上安装
- Docker - 安装
- Docker - Hub
- Docker - 镜像
- Docker - 容器
- Docker - 注册表
- Docker - Compose
- Docker - 使用容器
- Docker - 架构
- Docker - 层
- Docker - 容器和主机
- Docker - 配置
- Docker - 容器和 Shell
- Docker - Dockerfile
- Docker - 构建文件
- Docker - 公共仓库
- Docker - 管理端口
- Docker - Web 服务器
- Docker - 命令
- Docker - 容器链接
- Docker - 数据存储
- Docker - 卷
- Docker - 网络
- Docker - 安全
- Docker - 工具箱
- Docker - 云
- Docker - 构建云
- Docker - 日志记录
- Docker - 持续集成
- Docker - Kubernetes 架构
- Docker - Kubernetes 的工作原理
- Docker - 生成式 AI
- Docker - 托管
- Docker - 最佳实践
- Docker 设置服务
- Docker - 设置 Node.js
- Docker - 设置 MongoDB
- Docker - 设置 NGINX
- Docker - 设置 ASP.Net
- Docker - 设置 MySQL
- Docker - 设置 Go
- Docker - 设置 Rust
- Docker - 设置 Apache
- Docker - 设置 MariaDB
- Docker - 设置 Jupyter
- Docker - 设置 Portainer
- Docker - 设置 Rstudio
- Docker - 设置 Plex
- Docker 设置 - Flame
- Docker 设置 - PostgreSql
- Docker 设置 - Mosquitto
- Docker 设置 - Grafana
- Docker 设置 - Nextcloud
- Docker 设置 - Pawns
- Docker 设置 - Ubuntu
- Docker 设置 - RabbitMQ
- Docker - 设置 Python
- Docker - 设置 Java
- Docker - 设置 Redis
- Docker - 设置 Alpine
- Docker - 设置 BusyBox
- Docker 设置 - Traefik
- Docker 设置 - WordPress
- Docker 有用资源
- Docker - 快速指南
- Docker - 有用资源
- Docker - 讨论
Docker - 容器
Docker 容器是 Docker 镜像的运行时实例。可以通过实例化镜像来创建它们。Docker 容器正在彻底改变软件开发、部署和管理。从本质上讲,Docker 容器将应用程序及其所有依赖项捆绑到一个紧凑、轻量级的包中。它们可以通过在操作系统级别使用虚拟化,在各种计算环境中可靠地运行。
这种封装是通过使用**Docker 镜像**来实现的。镜像本质上是包含运行特定应用程序所需的所有文件、库和配置的蓝图。由于容器将应用程序及其依赖项与底层系统隔离开来,因此它们在各种环境中提供一致性和可预测性。
Docker 容器充当具有其自己的文件系统、网络接口和资源的独立进程,但它们轻量且高效,因为它们与主机操作系统共享相同的内核。它们依赖于 Docker 生态系统的重要组件才能工作,包括构建、启动和管理容器的 Docker Engine,以及充当 Docker 镜像存储库的 Docker Registry。
在本章中,让我们了解容器的工作原理以及您最常使用的重要的 Docker 容器命令。
Docker 容器的关键概念
以下是 Docker 容器背后的关键概念和原则。
容器化
从本质上讲,容器基于容器化的概念,即将应用程序及其所有依赖项打包到一个单一软件包中。此软件包称为容器镜像,其中包含运行应用程序所需的所有必要的运行时环境、库和其他组件。
隔离
Docker 容器使用操作系统级虚拟化来提供应用程序隔离。每个容器都作为独立的进程运行,具有自己的文件系统、网络接口和进程空间,独立于主机系统。
通过保持彼此独立,容器通过这种隔离避免相互干扰。
Docker Engine
Docker Engine 是 Docker 容器背后的核心;它构建、启动和维护它们。Docker Engine 由两个组成部分构成:在后台运行的 Docker 守护进程和允许用户通过命令与 Docker 守护进程通信的 Docker 客户端。
镜像和容器生命周期
Docker 容器生命周期的第一步是创建容器镜像。此镜像是使用 Dockerfile 构建的,Dockerfile 描述了应用程序的依赖项和配置。
创建镜像后,可以使用它来实例化容器,容器是正在运行的镜像实例。可以单独启动、停止、暂停和重新启动容器。
资源管理
Docker 容器由于其共享内核体系结构和轻量级设计,提供有效的资源管理。由于容器共享主机操作系统的操作系统内核,因此减少了开销并加快了启动时间。
Docker 还提供用于监控和控制资源使用的工具,以确保最佳性能和可扩展性。
可移植性
Docker 容器的主要优势之一是其可移植性。容器镜像是独立的单元,可以轻松地部署和分发到各种环境中,从生产到测试和开发。
这种可移植性简化了部署过程并降低了兼容性问题的可能性,实现了“一次构建,随处运行”。
Docker 容器生命周期
Docker 容器生命周期包含五个基本阶段:创建、启动、暂停、退出和死亡。生命周期由其阶段表示,从创建和执行到终止和可能的恢复。
了解这些阶段对于有效地管理 Docker 容器并在容器化环境中确保其正确运行至关重要。
让我们探索 Docker 容器生命周期的各个阶段
创建状态
“创建”状态是第一个阶段。当使用 docker create 命令或类似的 API 调用创建容器时,它将进入此阶段。处于“创建”状态的容器尚未运行,但它确实作为一个静态实体存在,其所有配置设置都已定义。
此时,Docker 预留了容器所需的存储卷和网络接口,但容器内的进程尚未启动。
启动状态
“启动”或“运行”状态是生命周期的下一阶段。当使用 docker start 命令或等效的 API 调用启动容器时,它将进入此阶段。
当容器处于“启动”状态时,其进程将启动并开始运行其镜像中指定的应用程序或服务。在此状态下,容器积极地使用 CPU、内存和其他系统资源来执行其分配的任务。
暂停状态
在容器的生命周期中,容器也可能进入“暂停”状态。当使用 docker pause 命令暂停容器时,其进程将挂起,从而停止其执行。
暂停的容器保持其资源分配和配置设置,但处于非活动状态。此状态有助于通过暂时停止容器执行(而无需完全停止)来节省资源和进行调试。
退出状态
处于“退出”状态的容器已完成执行并退出其主进程。容器在完成其预期任务或遇到导致其终止的错误时可以进入此状态。
“退出”的容器保持停止状态,保留其资源和配置设置,但停止运行任何进程。在此状态下,容器可以使用 docker rm 命令完全删除或使用 docker start 命令重新启动。
死亡状态
处于“死亡”状态的容器已遇到不可恢复的错误或已意外终止。容器化应用程序中的严重错误、底层主机系统中的问题或手动干预都可能导致容器进入此状态。
当容器处于“死亡”状态时,它处于非活动状态,并且 Docker 守护进程通常会释放或回收其资源。需要使用**docker rm 命令**删除处于此状态的容器,因为它们无法重新启动,从而释放系统资源。
重要的 Docker 容器命令
既然您已经了解了 Docker 容器的基础知识及其工作原理,那么让我们借助示例了解最重要的 Docker 容器命令。
列出所有 Docker 容器
可以使用**docker ps 命令**列出 Docker 主机上的正在运行的容器。默认情况下,它仅显示正在运行的容器,您可以使用 -a 或 --all 标志显示所有容器,包括已停止的容器。
$ docker ps
此命令显示所有当前正在运行的容器的 ID、名称、状态和其他相关详细信息。如果没有任何容器正在使用,则返回空列表。
运行 Docker 容器
启动和创建 Docker 容器的主要命令是“docker run”。当您运行此命令时,如果本地尚未提供镜像,Docker 会从注册表中拉取镜像。然后,它通过基于该镜像生成一个来启动一个新的容器实例。
通过此命令,您可以指定多个选项,包括卷挂载、环境变量、端口映射等,以根据您的需求自定义容器配置。
$ docker run -d -p 8080:80 nginx
在这种情况下,docker run 的分离模式 (-d) 基于“nginx”镜像创建一个新容器并在后台运行它。此外,它将主机端口 8080 映射到容器端口 80 (-p 8080:80),从而允许访问容器中托管的 NGINX Web 服务器。
停止 Docker 容器
可以使用 docker stop 命令优雅地停止容器,该命令向容器的主进程发送 SIGTERM 信号。这使容器能够在关闭之前完成任何清理操作,例如保存状态或断开网络连接。
$ docker stop my_container
此命令停止当前正在运行的“my_container”容器。Docker 会等待容器在可配置的持续时间内(默认情况下为 10 秒)优雅地结束其生命周期。如果它在此时间限制内未停止,Docker 将自动使用 SIGKILL 信号终止容器。
暂停正在运行的容器
可以使用 docker pause 命令暂时挂起正在运行的容器的进程或暂停其执行。这对于暂时释放系统资源、调试和解决问题可能很有用。
$ docker pause my_container
此命令停止容器“my_container”的运行。当暂停时,容器不使用任何 CPU 或内存,因为其进程已冻结。但是,容器保留其资源分配和配置设置。
恢复 Docker 容器
当容器暂停时,可以使用 docker unpause 命令重新执行其进程。通过使用此命令,容器将返回到其初始状态并撤消 docker pause 命令的效果。
$ docker unpause my_container
上述命令恢复暂停的容器“my_container”的执行,并允许其进程照常继续。
重启容器
一种快速停止和重启正在运行的容器的简单方法是使用 docker restart 命令。它常用于在容器遇到问题后强制其重新初始化,或将更改应用于正在运行的容器的配置。
$ docker restart my_container
此命令会暂停然后恢复名为“my_container”的容器的执行。容器内的进程会在重启时停止然后重新启动,使任何修改生效。
在正在运行的 Docker 容器中执行命令
要在已运行的容器内运行命令,请使用 docker exec 命令。它允许用户在容器的环境中运行任意命令,例如启动 shell 会话或执行特定程序。
$ docker exec -it my_container bash
此命令在交互式 shell 会话(bash)中打开当前正在运行的“my_container”容器。为了启用交互式输入/输出,-it 标记分配一个伪终端并保持 STDIN 打开,即使它未连接也是如此。
删除 Docker 容器
要删除一个或多个 Docker 容器,可以使用 docker rm 命令。可以指定要删除的容器的 ID 或名称。默认情况下,此命令仅删除已停止的容器;要强制删除正在运行的容器,可以使用 -f 或 --force 标记。
$ docker rm my_container
以上命令删除名为“my_container”的容器。除非使用 -f 标记强制删除,否则容器必须停止运行才能被删除。
要清理 Docker 主机上的磁盘空间,可以使用 docker container prune 命令删除所有已停止的容器。这是一种清理空闲容器并回收资源的实用方法。
$ docker container prune
Docker 会在继续之前请求确认,但您可以通过使用 -f 或 –force 标记传递它来忽略此提示。
如果要一起删除所有 Docker 容器,可以使用两个命令的组合 - “docker ps -aq”,它用于获取所有容器 ID 的列表,并将其与“docker rm”命令结合使用以删除所有容器,包括正在运行的容器。
$ docker rm $(docker ps -aq)
以上命令删除 Docker 主机上的每个容器,无论它是否正在运行或已停止。
结论
总而言之,Docker 容器彻底改变了现代软件开发构建、部署和管理应用程序的方式。Docker 容器是轻量级且可移植的环境,提供了许多优势,例如一致性、可重复性、资源效率、可扩展性和可移植性,用于打包和运行应用程序。
开发人员可以使用各种 Docker 命令和工具轻松创建、部署和管理容器,从而促进更有效的开发工作流程并增强团队协作。随着容器化的普及,Docker 容器将继续成为软件开发生态系统的重要组成部分,帮助企业更快地创新并更有效地为客户提供价值。
常见问题
Q1. Docker 是容器还是虚拟机?
Docker 是一个容器化平台,这意味着它使用容器来运行和打包应用程序。与虚拟机 (VM) 虚拟化硬件不同,Docker 容器共享宿主机内核并虚拟化操作系统。
因此,由于它们不需要为每个应用程序提供单独的操作系统实例,因此 Docker 容器比虚拟机 (VM) 更轻量级且更高效。
Q2. Docker 和 Kubernetes 之间有什么区别?
虽然它们有不同的用途,但 Docker 和 Kubernetes 都是容器生态系统中广泛使用的工具。Docker 提供用于构建容器镜像和在本地或生产环境中运行容器的工具。它主要用于创建、管理和执行容器。
Kubernetes 是一个容器编排平台,可以自动化容器化应用程序的部署、扩展和管理。Docker 专注于容器化过程本身,而 Kubernetes 管理容器集群并确保它们具有弹性、可扩展性和可用性。
Q3. 如何运行 Docker 容器?
您可以使用“docker run <image>”命令启动 Docker 容器。您必须提及 Docker 镜像的 ID 或名称,该镜像可在本地或通过 Docker Hub 等注册表获取。然后,使用 docker run 命令后跟镜像的名称或 ID 来创建并从该镜像启动容器。为了进一步自定义容器的配置,您可以选择提供更多参数,例如端口映射、环境变量和卷挂载。
Q4. 什么是 Docker Daemon?
在主机系统上监控 Docker 容器的后台进程称为 Docker 守护进程或“dockerd”。除了执行容器生命周期任务(包括构建、启动、停止和删除容器)外,它还负责管理容器镜像、网络和卷。为了管理容器资源,Docker 守护进程与主机操作系统的内核交互,同时侦听来自 Docker 客户端的 Docker API 请求并在用户的代表下执行这些请求。
Q5. Docker 容器的生命周期是怎样的?
Docker 容器的生命周期可能因其配置、创建方式以及它是在附加模式还是分离模式下运行而异。Docker 容器通常会无限期运行,除非其主进程结束或用户手动停止或终止它。
当容器处于分离模式 (-d) 时,它们会在后台运行,直到使用 docker stop 命令显式停止它们,或直到 Docker 守护进程重新启动。重启策略是另一种设置容器的方式,以便在发生故障或停止时自行重启。