快速搭建 Docker 容器服务器

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将指导你快速设置一个运行状态最佳的 Docker 容器服务器。你将学习如何安装 Docker、创建和管理 Docker 容器、配置网络和扩展,以及排查 Docker 环境故障。通过本教程的学习,你将对 Docker 有扎实的理解,并能够设置一个强大且可扩展的 Docker 容器服务器。

了解 Docker 及其优势

Docker 是一个强大的容器化平台,它彻底改变了应用程序的开发、部署和管理方式。它提供了一种标准化且一致的方式来打包和分发软件,使得在不同环境中构建、交付和运行应用程序变得更加容易。

什么是 Docker?

Docker 是一个开源软件平台,使开发者能够在容器中构建、部署和运行应用程序。容器是一个轻量级、独立且可执行的软件包,它包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。

Docker 的优势

  1. 一致性:无论底层基础设施如何,Docker 容器都能确保应用程序以相同的方式运行,提供一个一致且可预测的环境。
  2. 可移植性:Docker 容器可以轻松地在不同平台之间移动和部署,从开发者的笔记本电脑到生产服务器,无需进行复杂的配置更改。
  3. 可扩展性:Docker 使得根据需要快速创建和销毁容器来轻松扩展应用程序的规模成为可能,从而实现高效的资源利用。
  4. 隔离性:Docker 容器提供了高度的隔离性,确保应用程序及其依赖项与主机系统以及彼此相互隔离,降低冲突和安全漏洞的风险。
  5. 高效性:Docker 容器轻量级,比传统虚拟机使用更少的资源,从而能够更高效地利用硬件并实现更快的启动时间。

Docker 架构

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

graph LR A[Docker 客户端] -- 命令 --> B[Docker 守护进程] B -- 管理 --> C[Docker 镜像] B -- 管理 --> D[Docker 容器] B -- 管理 --> E[Docker 卷] B -- 管理 --> F[Docker 网络]

Docker 的用例

Docker 在各个行业和场景中都有广泛应用,包括:

  1. 微服务:Docker 特别适合构建和部署基于微服务的应用程序,其中每个服务都可以作为一个单独的容器进行打包和部署。
  2. 持续集成和部署:Docker 能够与持续集成/持续部署(CI/CD)管道无缝集成,实现应用程序的自动化构建、测试和部署。
  3. 云和无服务器计算:Docker 容器可以轻松地在云平台上部署和扩展,实现高效且经济高效的基于云的应用程序。
  4. 开发者生产力:通过提供一个一致且可重现的环境,Docker 简化了开发和测试过程,减少了“在我的机器上能运行”的问题。

通过了解 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. 通过运行以下命令验证安装:
sudo docker run hello-world

此命令将下载一个测试镜像并在容器中运行它,以验证你的 Docker 安装是否正常工作。

以非 root 用户身份管理 Docker

默认情况下,Docker 守护进程以 root 用户身份运行,这可能存在安全风险。要以非 root 用户身份管理 Docker,请执行以下步骤:

  1. 创建 Docker 组:
sudo groupadd docker
  1. 将你的用户添加到 Docker 组:
sudo usermod -aG docker $USER
  1. 注销并重新登录以使更改生效。

  2. 验证你可以在不使用 sudo 的情况下运行 Docker 命令:

docker run hello-world

现在,你可以以非 root 用户身份管理 Docker,从而提高系统的整体安全性。

创建并运行 Docker 容器

理解 Docker 镜像和容器

Docker 镜像是创建 Docker 容器的基础。镜像是一个只读模板,其中包含创建 Docker 容器的指令。当你运行一个 Docker 镜像时,它会创建一个容器,容器是该镜像的一个可运行实例。

创建 Docker 容器

要创建一个 Docker 容器,你可以使用 docker run 命令。基本语法如下:

docker run [选项] 镜像 [命令] [参数]

以下是一个基于 nginx:latest 镜像创建容器并运行 Nginx 网络服务器的示例:

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

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

  • -d:以分离模式(在后台)运行容器
  • -p 80:80:将主机的端口 80 映射到容器的端口 80
  • --name my-nginx:为容器指定名称 “my-nginx”
  • nginx:latest:用于创建容器的镜像

与 Docker 容器进行交互

容器运行后,你可以使用各种 Docker 命令与之交互:

  • docker ps:列出所有正在运行的容器
  • docker stop my-nginx:停止 “my-nginx” 容器
  • docker start my-nginx:启动 “my-nginx” 容器
  • docker logs my-nginx:显示 “my-nginx” 容器的日志
  • docker exec -it my-nginx bash:进入 “my-nginx” 容器并打开一个 bash shell

构建自定义 Docker 镜像

你还可以使用 Dockerfile 创建自己的自定义 Docker 镜像。Dockerfile 是一个文本文件,其中包含构建 Docker 镜像的指令。以下是一个 Dockerfile 示例,它创建了一个带有自定义 HTML 页面的自定义 Nginx 镜像:

FROM nginx:latest
COPY index.html /usr/share/nginx/html/

然后,你可以构建该镜像并基于它运行一个容器:

docker build -t my-custom-nginx.
docker run -d -p 80:80 --name my-custom-nginx my-custom-nginx

通过理解创建和运行 Docker 容器的基础知识,你可以开始利用容器化的强大功能来构建和部署自己的应用程序。

配置和管理 Docker 容器

配置 Docker 容器

创建 Docker 容器时,你可以指定各种配置选项来定制其行为。一些常见的配置选项包括:

  • 端口:使用 -p--publish 标志将主机端口映射到容器端口。
  • 环境变量:使用 -e--env 标志设置环境变量。
  • :使用 -v--volume 标志将主机目录或文件挂载到容器。
  • 网络:使用 --network 标志将容器连接到特定网络。
  • 资源限制:限制容器可以使用的资源量(CPU、内存等)。

以下是一个创建带有一些配置选项的容器的示例:

docker run -d -p 8080:80 -e DB_HOST=192.168.1.100 -v /host/path:/container/path --network my-network nginx:latest

管理 Docker 容器

容器运行后,你可以使用各种 Docker 命令来管理它:

  • docker ps:列出所有正在运行的容器。
  • docker stop <容器名称>:停止正在运行的容器。
  • docker start <容器名称>:启动已停止的容器。
  • docker restart <容器名称>:重启正在运行的容器。
  • docker rm <容器名称>:删除已停止的容器。
  • docker logs <容器名称>:查看容器的日志。
  • docker exec -it <容器名称> <命令>:在正在运行的容器内执行命令。

容器生命周期管理

Docker 容器具有一个生命周期,包括以下状态:

  1. 已创建:容器已创建但尚未启动。
  2. 正在运行:容器当前正在运行。
  3. 已暂停:容器的进程已暂停。
  4. 已停止:容器已停止。
  5. 已删除:容器已被删除。

你可以使用各种 Docker 命令来管理容器的生命周期,例如 docker startdocker stopdocker pausedocker rm

容器网络

Docker 提供了几种用于连接容器的网络选项,包括:

  • 桥接网络:默认网络模式,容器连接到虚拟桥接网络。
  • 主机网络:容器与主机系统共享相同的网络堆栈。
  • 覆盖网络:一种多主机网络,允许在不同 Docker 主机上运行的容器进行通信。

你可以使用 docker network 命令创建和管理 Docker 网络。

通过了解如何配置和管理 Docker 容器,你可以在容器化环境中有效地部署和维护你的应用程序。

构建和共享 Docker 镜像

构建 Docker 镜像

要构建自定义 Docker 镜像,你可以使用 docker build 命令和一个 Dockerfile。Dockerfile 是一个文本文件,其中包含构建 Docker 镜像的指令。

以下是一个 Dockerfile 示例,它创建了一个带有自定义 HTML 页面的自定义 Nginx 镜像:

FROM nginx:latest
COPY index.html /usr/share/nginx/html/

然后,你可以使用以下命令构建该镜像:

docker build -t my-custom-nginx.

此命令将根据 Dockerfile 中的指令创建一个名为 “my-custom-nginx” 的新 Docker 镜像。

标记和推送 Docker 镜像

构建好 Docker 镜像后,你可以用特定的版本或标签对其进行标记。这使你能够管理和跟踪镜像的不同版本。

要标记镜像,使用 docker tag 命令:

docker tag my-custom-nginx:latest my-custom-nginx:v1.0

这将为 “my-custom-nginx” 镜像创建一个新标签 “v1.0”。

要与他人共享你的 Docker 镜像,你可以将其推送到 Docker 镜像仓库,如 Docker Hub 或私有仓库。推送之前,你需要使用 docker login 命令向仓库进行认证。

docker login
docker push my-custom-nginx:v1.0

这会将 “my-custom-nginx:v1.0” 镜像推送到 Docker 仓库。

使用 Docker Hub

Docker Hub 是 Docker 镜像的官方公共仓库。你可以使用 Docker Hub 查找和拉取现有镜像,以及托管和共享你自己的自定义镜像。

要在 Docker Hub 上搜索镜像,你可以使用 docker search 命令:

docker search nginx

要从 Docker Hub 拉取镜像,使用 docker pull 命令:

docker pull nginx:latest

如果你有自己的 Docker 镜像,你可以创建一个 Docker Hub 账户并将你的镜像推送到仓库供他人使用。

通过了解如何构建、标记和共享 Docker 镜像,你可以利用容器化的强大功能创建和分发自己的自定义应用程序和服务。

Docker 容器的网络与连接

Docker 网络驱动程序

Docker 提供了几种网络驱动程序来连接容器:

  1. 桥接网络:默认的网络驱动程序,它在主机上创建一个虚拟网桥,并将容器连接到该网桥。
  2. 主机网络:容器与主机系统共享相同的网络堆栈。
  3. 覆盖网络:一种多主机网络,允许在不同 Docker 主机上运行的容器进行通信。
  4. Macvlan 网络:为容器分配一个 MAC 地址,使其在网络上可直接寻址。
  5. 网络插件:可以使用第三方网络插件,如 Calico、Flannel 或 Weave,来提供高级网络功能。

连接容器

要连接容器,你可以使用以下方法:

  1. 链接容器:传统的 --link 标志可用于按名称连接容器,使一个容器能够访问另一个容器的环境变量。
  2. 用户定义网络:使用 docker network create 命令创建一个自定义网络,然后使用 --network 标志将容器附加到该网络。
  3. 服务发现:使用 Docker Swarm 或 Kubernetes 时,容器可以使用内置的服务发现机制相互发现和通信。

以下是创建一个自定义桥接网络并连接两个容器的示例:

## 创建一个自定义网络
docker network create my-network

## 运行两个容器并将它们连接到自定义网络
docker run -d --name web --network my-network nginx:latest
docker run -d --name app --network my-network my-custom-app:latest

现在,“web” 和 “app” 容器可以在 “my-network” 网络中使用它们的容器名称相互通信。

网络配置

你可以为容器配置各种网络设置,例如:

  • IP 地址:使用 --ip--ip6 标志为容器分配特定的 IP 地址。
  • DNS 服务器:使用 --dns 标志为容器设置 DNS 服务器。
  • 端口映射:使用 -p--publish 标志将主机端口映射到容器端口。

通过了解 Docker 的网络功能,你可以有效地在容器化应用程序之间进行连接和通信,实现更复杂、可扩展的部署。

扩展和负载均衡 Docker 部署

扩展 Docker 容器

Docker 让你能够根据需要轻松地通过添加或移除容器来扩展应用程序。扩展 Docker 容器有几种方法:

  1. 手动扩展:你可以使用 docker rundocker rm 命令手动创建或移除容器。
  2. 自动扩展:像 Docker Swarm、Kubernetes 或第三方编排平台这样的工具可以根据预定义的规则或指标自动扩展你的容器。
  3. 水平扩展:你可以通过添加更多容器实例来扩展应用程序,将负载分布到多个主机上。
  4. 垂直扩展:你可以通过增加分配给每个容器的资源(CPU、内存等)来扩展应用程序。

负载均衡 Docker 容器

为了将传入流量分布到多个 Docker 容器上,你可以使用负载均衡解决方案。以下是一些选项:

  1. Docker Swarm 负载均衡:Docker Swarm 具有内置的负载均衡功能,允许你创建一个服务,该服务会自动将流量分布到多个容器实例上。
graph LR A[Docker Swarm] -- 负载均衡 --> B[容器 1] A -- 负载均衡 --> C[容器 2] A -- 负载均衡 --> D[容器 3]
  1. Kubernetes 负载均衡:Kubernetes 提供了各种负载均衡选项,例如内置的 Service 对象,它可以将流量分布到多个容器 Pod 上。

  2. 第三方负载均衡器:你可以使用外部负载均衡器,如 Nginx、HAProxy 或基于云的负载均衡器(例如 AWS 弹性负载均衡、Azure 负载均衡器)来将流量分布到你的 Docker 容器上。

graph LR A[负载均衡器] -- 负载均衡 --> B[容器 1] A -- 负载均衡 --> C[容器 2] A -- 负载均衡 --> D[容器 3]

通过了解如何扩展和负载均衡你的 Docker 部署,你可以确保你的应用程序能够处理不断增加的流量并保持高可用性。

监控和排查 Docker 环境

监控 Docker 容器

监控你的 Docker 环境对于确保应用程序的健康和性能至关重要。以下是一些用于监控 Docker 容器的工具和技术:

  1. Docker CLI 命令:你可以使用各种 Docker CLI 命令来监控容器,例如 docker psdocker logsdocker stats
  2. Docker 指标:Docker 提供了内置指标,你可以使用 Docker API 或第三方监控工具来访问这些指标,如 CPU、内存和网络使用情况。
  3. 第三方监控工具:像 Prometheus、Grafana 和 LabEx 监控这样的工具可以与 Docker 集成,以提供对你的 Docker 环境的全面监控和可视化。
graph LR A[Docker 容器] -- 指标 --> B[监控工具] B -- 可视化 --> C[仪表板]

排查 Docker 容器故障

当你的 Docker 环境出现问题时,你可以使用以下技术来排查和解决这些问题:

  1. 容器日志:使用 docker logs 命令检查容器的日志,以识别任何错误或问题。
  2. 容器检查:使用 docker inspect 命令获取有关容器的详细信息,包括其配置、网络设置和资源使用情况。
  3. 容器网络:通过检查 Docker 网络配置、检查容器 IP 地址并验证网络连接来排查与网络相关的问题。
  4. 资源利用:使用 docker stats 命令或第三方监控工具监控容器的资源利用情况,以识别任何与资源相关的问题。
  5. 容器重启:如果容器的行为不符合预期,尝试使用 docker restart 命令重启它。
graph LR A[Docker 容器] -- 排查 --> B[日志] A -- 排查 --> C[检查] A -- 排查 --> D[网络] A -- 排查 --> E[资源利用] A -- 排查 --> F[重启]

通过利用 Docker 提供的监控和排查工具及技术,你可以有效地管理和维护基于 Docker 的应用程序,确保其可靠性和性能。

总结

在本“快速搭建 Docker 容器服务器”教程中,你已经学会了如何安装 Docker、创建和管理 Docker 容器、构建和共享 Docker 镜像,以及扩展和监控你的 Docker 部署。掌握了这些技能后,你现在可以快速搭建并运行一个出色的 Docker 容器服务器,并利用 Docker 的强大功能简化你的应用程序开发和部署流程。