快速运行和关闭 Docker 容器:初学者指南

DockerBeginner
立即练习

简介

本教程将指导你快速运行和关闭 Docker 容器的过程,为初学者全面介绍 Docker 世界。你将学习如何在系统上安装和配置 Docker,探索运行 Docker 容器的基础知识,并发现有效管理容器的实际应用和最佳实践。

理解 Docker:是什么以及为何使用

Docker 是一个强大的开源平台,它使开发者和 IT 专业人员能够在一致且可靠的环境中构建、部署和运行应用程序。它使用容器化技术将一个应用程序及其所有依赖项打包成一个单一的、可移植的容器,确保无论底层基础设施如何,该应用程序都能以相同的方式运行。

什么是 Docker?

Docker 是一个软件平台,它允许你在容器中构建、部署和运行应用程序。容器是一种标准化的软件单元,它将代码及其所有依赖项打包在一起,这样应用程序就能在不同的计算环境中快速且可靠地运行。容器轻量级、可移植且自成一体,使其成为现代软件开发和部署的理想解决方案。

为何使用 Docker?

使用 Docker 有几个关键优势:

  1. 一致性:无论底层基础设施如何,Docker 都能确保你的应用程序以相同的方式运行。这消除了“在我的机器上能运行”的问题,即一个应用程序在开发者的机器上运行良好,但在生产环境中却失败了。

  2. 可扩展性:通过手动或自动运行容器的多个实例,Docker 使扩展应用程序变得容易。

  3. 高效性:容器轻量级,比虚拟机使用的资源更少,这使你能够在同一硬件上运行更多应用程序。

  4. 可移植性:Docker 容器可以在任何安装了 Docker 的系统上运行,这使得在不同环境(如开发、测试和生产环境)之间移动应用程序变得容易。

  5. 隔离性:每个 Docker 容器都与其他容器隔离,为运行你的应用程序提供了一个安全可靠的环境。

Docker 架构

Docker 使用客户端 - 服务器架构,其中 Docker 客户端与 Docker 守护进程通信,Docker 守护进程负责构建、运行和管理 Docker 容器。Docker 守护进程在主机上运行,客户端可以在同一台机器上或远程机器上运行。

graph LR
    A[Docker Client] -- Communicates with --> B[Docker Daemon]
    B -- Manages --> C[Docker Containers]
    B -- Manages --> D[Docker Images]

在下一节中,我们将介绍如何在你的系统上安装和配置 Docker。

在你的系统上安装和配置 Docker

在 Ubuntu 22.04 上安装 Docker

要在你的 Ubuntu 22.04 系统上安装 Docker,请遵循以下步骤:

  1. 更新软件包索引并安装必要的依赖项:
sudo apt-get update
sudo apt-get install -y \
  ca-certificates \
  curl \
  gnupg \
  lsb-release
  1. 添加官方 Docker GPG 密钥:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. 设置 Docker 仓库:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装 Docker 引擎、containerd 和 Docker Compose:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. 通过运行 hello-world 镜像来验证安装:
sudo docker run hello-world

配置 Docker

安装 Docker 之后,你可以根据自己的需求对其进行配置。以下是一些常见的配置选项:

  1. 以非 root 用户身份管理 Docker:默认情况下,Docker 命令需要 root 权限。要在不使用 sudo 的情况下运行 Docker 命令,将你的用户添加到 docker 组:
sudo usermod -aG docker $USER
  1. 设置默认的 Docker 守护进程选项:你可以通过编辑 /etc/docker/daemon.json 文件来自定义 Docker 守护进程的行为。例如,要更改默认的日志驱动:
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}
  1. 配置 Docker Compose:Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。你可以通过编辑 ~/.docker/config.json 文件来配置 Docker Compose 的默认行为。

既然你已经安装并配置好了 Docker,接下来让我们继续学习如何运行 Docker 容器。

运行 Docker 容器:基础

理解 Docker 镜像

Docker 镜像是一个只读模板,其中包含创建 Docker 容器的指令。镜像用于打包应用程序及其所有依赖项,确保无论底层基础设施如何,应用程序都能以相同的方式运行。

你可以创建自己的 Docker 镜像,也可以使用 Docker Hub(一个 Docker 镜像的公共仓库)中的预构建镜像。

运行 Docker 容器

要运行 Docker 容器,你使用 docker run 命令。以下是在 Docker 容器中运行 nginx 网络服务器的示例:

docker run -d -p 80:80 --name my-nginx nginx

让我们来分解一下这个命令:

  • docker run:运行一个新的 Docker 容器。
  • -d:以分离模式运行容器,这意味着它在后台运行。
  • -p 80:80:将主机上的端口 80 映射到容器中的端口 80。
  • --name my-nginx:为容器分配名称“my-nginx”。
  • nginx:要使用的 Docker 镜像的名称。

列出正在运行的容器

要查看正在运行的 Docker 容器列表,使用 docker ps 命令:

docker ps

这将显示一个包含正在运行容器信息的表格,包括容器 ID、使用的镜像、正在执行的命令、创建时间、状态和端口。

检查正在运行的容器

要获取有关正在运行容器的更详细信息,使用 docker inspect 命令:

docker inspect my-nginx

这将输出一个包含容器详细信息的 JSON 对象,包括其配置、网络设置和资源使用情况。

在下一节中,我们将介绍如何与 Docker 容器进行交互。

与 Docker 容器进行交互

进入容器 shell

要进入正在运行的 Docker 容器的 shell,使用 docker exec 命令:

docker exec -it my-nginx bash

这将在 my-nginx 容器内打开一个交互式终端会话,使你能够在容器内执行命令。

在主机与容器之间复制文件

你可以使用 docker cp 命令在主机系统和 Docker 容器之间复制文件:

## 将主机上的文件复制到容器
docker cp /path/on/host my-nginx:/path/in/container

## 将容器中的文件复制到主机
docker cp my-nginx:/path/in/container /path/on/host

查看容器输出日志

要查看正在运行的 Docker 容器的日志,使用 docker logs 命令:

docker logs my-nginx

这将显示容器的标准输出(stdout)和标准错误(stderr)日志。

监控容器资源使用情况

你可以使用 docker stats 命令监控 Docker 容器的资源使用情况:

docker stats my-nginx

这将显示 my-nginx 容器的 CPU、内存、网络和磁盘 I/O 使用情况的实时流。

附加到正在运行的容器

要附加到正在运行的 Docker 容器的标准输入、输出和错误流,使用 docker attach 命令:

docker attach my-nginx

这会将你的终端连接到容器的标准流,使你能够与正在运行的应用程序进行交互。

在下一节中,我们将介绍如何停止、启动和删除 Docker 容器。

停止、启动和删除容器

停止正在运行的容器

要停止正在运行的 Docker 容器,使用 docker stop 命令:

docker stop my-nginx

这将优雅地停止容器,使其在关闭之前能够执行任何必要的清理任务。

启动已停止的容器

要启动已停止的 Docker 容器,使用 docker start 命令:

docker start my-nginx

这将使用与最初运行时相同的配置启动容器。

删除容器

要删除 Docker 容器,使用 docker rm 命令:

docker rm my-nginx

这将从系统中删除容器,但不会删除任何相关的 Docker 镜像。

删除多个容器

你可以使用带有 -f(强制)选项的 docker rm 命令一次性删除多个容器:

docker rm -f container1 container2 container3

这将强制删除指定的容器,即使它们正在运行。

删除已停止的容器

要删除所有已停止的 Docker 容器,你可以使用以下命令:

docker container prune

这将删除所有已停止的容器,释放系统上的磁盘空间。

在下一节中,我们将探讨 Docker 容器的一些实际应用。

Docker 容器的实际应用

网页应用部署

Docker 容器最常见的用例之一是部署网页应用。Docker 使你能够将应用及其依赖项打包到一个容器中,该容器可以轻松部署到不同的环境,如开发、预发布和生产环境。

微服务架构

Docker 非常适合构建和部署基于微服务的应用。每个微服务都可以打包到一个单独的容器中,从而便于扩展、更新和维护应用的各个组件。

持续集成与部署(CI/CD)

Docker 与 CI/CD 管道集成良好,使你能够以一致且自动化的方式构建、测试和部署应用。Docker 容器可用作构建环境、测试环境和部署目标。

数据处理与分析

Docker 容器可用于运行数据处理和分析工作负载,如批处理、流处理和机器学习。通过将整个处理管道打包到一个容器中,你可以确保在不同环境之间的一致性和可移植性。

开发与测试环境

Docker 可用于创建一致、隔离的开发和测试环境。开发人员可以使用 Docker 设置其本地开发环境,而质量保证团队可以使用 Docker 创建标准化的测试环境。

无服务器计算

Docker 可用作无服务器计算平台的基础,在该平台上,应用作为单个容器进行部署和扩展,无需管理底层基础设施。

物联网(IoT)

Docker 的轻量级和可移植特性使其非常适合物联网应用,因为物联网设备的资源可能有限。Docker 容器可用于在一批设备上打包和部署物联网应用。

在下一节中,我们将讨论管理 Docker 容器的最佳实践。

管理 Docker 容器的最佳实践

使用轻量级基础镜像

创建自己的 Docker 镜像时,使用轻量级基础镜像,如 alpine 或 scratch,以最小化容器大小并提高其性能。

优化 Dockerfile 分层

组织你的 Dockerfile,以利用 Docker 的层缓存机制。将相关指令分组,以最小化层数并缩短构建时间。

使用环境变量进行配置

将配置数据(如数据库连接字符串或 API 密钥)存储在环境变量中,而不是在应用程序代码或 Dockerfile 中硬编码。

实施日志记录和监控

配置你的 Docker 容器以记录重要事件和指标,并使用 Prometheus、Grafana 或 ELK 堆栈等工具来监控容器的健康状况和性能。

管理容器机密

使用 Docker Secrets 或 HashiCorp Vault 等工具来安全地管理容器需要访问的敏感数据,如密码或 API 密钥。

自动化容器生命周期管理

将 Docker 与你的 CI/CD 管道集成,以自动化容器的构建、测试和部署。使用 Docker Compose、Kubernetes 或 LabEx 等工具来管理容器的生命周期。

保护你的容器

遵循最佳实践,如以非 root 用户身份运行容器、使用只读文件系统和实施网络策略,以确保 Docker 守护进程和容器的安全。

优化容器资源使用

监控容器的资源使用情况并优化其资源分配,以确保有效利用你的基础设施。

保持容器卫生

定期清理和删除未使用的 Docker 镜像和容器,以释放磁盘空间并维护健康的 Docker 环境。

通过遵循这些最佳实践,你可以有效地管理和维护你的 Docker 容器,确保可靠且高效的应用程序部署和运行。

总结

在本“快速运行和关闭 Docker 容器:初学者指南”教程结束时,你将对 Docker 有扎实的理解,并能够快速运行、与 Docker 容器进行交互以及关闭它们。你还将学习到管理 Docker 环境的宝贵最佳实践,从而使你能够简化开发和部署流程。