广告

Linux环境下 Docker 安装与使用详解:从新手到实战部署的完整教程

一、在 Linux 环境中理解 Docker 的核心概念

核心概念:镜像、容器、仓库、守护进程

在 Linux 环境下使用 Docker,第一步是理解它将应用与运行环境分离的核心机制。镜像是应用及其运行时依赖的只读模板,容器则是在镜像之上运行的可执行实例,具有独立的文件系统、网络和进程空间。仓库(Repository)用于存放镜像的版本与变体,而 Docker 守护进程(daemon)负责管理镜像、容器、网络和存储等资源。掌握这一组概念,可以帮助你在实际部署中快速定位问题。

镜像与容器的关系是叠加的:镜像是静态的模板,容器是动态的实例。理解这一点有助于你在从开发到生产的流程中,进行高效的打包、分发和部署。

要快速验证环境是否就绪,可以先执行一个简单的检查命令,以确认 Docker 已安装并正常运行。下面是一个常用的自检步骤:

docker --version
sudo systemctl status docker
docker info | head -n 5

二、准备工作与环境检查

发行版选择与内核版本要求

在 Linux 上运行 Docker,推荐使用主流且长期维护的发行版,如 Ubuntu、Debian、CentOS/RHEL8+/Fedora 等。内核版本至少需要具备 namespace、cgroup、overlay 等特性,通常这意味着较新的内核版本能提供更好的稳定性与性能。对于生产环境,优先考虑长期支持版本(LTS)。

在开始安装前,先确认当前系统信息,以便选择合适的安装路径与仓库配置。以下命令可以快速查看发行版版本、内核版本以及系统架构:

lsb_release -a 2>/dev/null || cat /etc/os-release
uname -r
uname -m

如果你需要切换或升级内核,务必在测试环境先进行验证,确保与现有驱动和模块兼容。后续的安装步骤也会区分 Debian/Ubuntu 与 Red Hat 系列的包管理方式,确保系统有足够的磁盘和内存资源用于容器运行。

三、在 Linux 上安装 Docker 的多种方式

官方安装包安装(Debian/Ubuntu 与 RHEL/CentOS 的通用步骤)

使用官方仓库安装 Docker,可以确保获得最新的稳定版本与安全更新。以下步骤覆盖了主流发行版的常见做法,并强调在安装前的准备工作与权限要求。以 root 或有 sudo 权限的用户执行可以避免权限不足导致的安装失败。

Debian/Ubuntu 体系的安装常见流程包括:添加仓库、安装包、启动并使能服务。下面给出一组最简捷的命令集合,供快速验证安装流程的参考:

# 更新现有包索引
sudo apt-get update# 安装必要的包(用于通过 HTTPS 使用仓库)
sudo apt-get install -y ca-certificates curl gnupg lsb-release# 添加官方 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# 设置稳定仓库(以 Ubuntu 为例)
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# 安装 Docker Engine、CLI、和 containerd
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 启动并设置自启
sudo systemctl start docker
sudo systemctl enable docker# 验证版本
docker --version

对于 Red Hat/CentOS/Fedora 体系,步骤大同小异,但仓库源及包名略有差异。请以官方文档为准进行具体操作。下面给出一个常规示例,帮助你理解流程:

# 移除旧版本(如存在)
sudo yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine# 安装必要组件
sudo yum install -y yum-utils lsb-release# 设置稳定仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装 Docker Engine、CLI、容器运行时
sudo yum install -y docker-ce docker-ce-cli containerd.io# 启动并设为自启
sudo systemctl start docker
sudo systemctl enable docker# 验证版本
docker --version

使用官方脚本与离线安装的说明

对于受限网络环境或需要快速覆盖多台机器的场景,可以使用官方提供的安装脚本进行快速部署,脚本会自动识别系统并执行相应配置。请确保执行前网络可访问 Docker 官方仓库。执行前务必核对脚本来源以防安全风险:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

若处于没有网络的隔离环境,可以准备好离线安装包与镜像,先在联网环境中将需要的版本镜像拉取完成再分发到目标主机,然后按照正常的服务启停流程启动 Docker。离线部署的关键在于确保 镜像及依赖的版本一致性,避免依赖冲突导致运行时问题。

四、Docker 的基础使用:镜像、容器、以及常用命令

常用命令与工作流

在完成安装后,日常工作流通常包括从镜像拉取、容器化运行、以及对运行中应用的监控与维护。镜像拉取、容器创建、端口映射和数据卷绑定是最常见的操作组合。掌握这些命令,可以快速将应用从开发环境迁移到生产环境。

最基础的工作是获取镜像并启动一个简单的容器。以下示例演示如何拉取 nginx 镜像并在后台运行一个 Web 服务器,端口映射到宿主机的 8080 端口:

# 拉取官方 nginx 镜像(若已存在会跳过)
docker pull nginx:latest# 在后台运行一个容器,端口映射:宿主机 8080 -> 容器 80
docker run -d --name my-nginx -p 8080:80 nginx:latest# 查看正在运行的容器
docker ps# 访问日志查看
docker logs my-nginx

如果需要对现有容器进行交互或调试,可以使用 exec 在运行中的容器内执行命令。

# 进入容器的交互式 shell
docker exec -it my-nginx /bin/bash# 查看容器内的进程信息
docker top my-nginx# 停止与移除容器
docker stop my-nginx
docker rm my-nginx

除了独立容器,日常还需要掌控镜像管理、网络与存储配置。确保你的命令序列清晰,尽量在测试环境中验证后再应用于生产。以下是一些常用的镜像与容器管理命令要点:要点包括镜像查看、清理冗余镜像、以及查看容器资源消耗等。

# 查看本地镜像
docker images# 清除未被使用的悬空镜像(dangling images)
docker image prune -f# 查看容器资源使用情况
docker stats --no-stream

五、容器网络、数据持久化与卷管理

数据卷与挂载机制

容器自身的文件系统是临时的,容器销毁后其中的数据通常会丢失。因此,数据持久化需要借助数据卷(Volume)或宿主机目录绑定(Bind Mount)来实现。数据卷具有独立的生命周期,并且通常由 Docker 管理,适合跨容器共享与备份。

创建一个数据卷并在容器中挂载,可以实现持久化的数据库数据、日志文件等。下面给出一个创建数据卷并用于一个简单数据库例子的示例:

# 创建一个数据卷
docker volume create mydata# 使用数据卷运行 MySQL 容器(示例)
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=secret \-v mydata:/var/lib/mysql -p 3306:3306 mysql:8.0

若你需要把宿主机目录直接映射到容器中,用于快速调试或特殊需求,可以使用 Bind Mount。如下所示:

docker run -d --name my-app -v /path/on/host:/data/app \-p 8000:8000 your-registry/your-app

六、实战部署:一个简单的 Web 服务栈

使用 Docker Compose 部署 Node.js + Nginx 的示例

在实际部署中,Docker Compose 能帮助你将多容器应用的配置和启动顺序集中在一个文件中,便于版本控制与多环境变更。下面给出一个最小的示例:一个 Node.js 应用 + Nginx 反向代理的简单栈。

目录结构建议如下:

项目根目录包含:drawer-compose.yml、web/(Node.js 应用源码)

version: '3.8'
services:web:build: ./webports:- "3000:3000"volumes:- ./web:/usr/src/appenvironment:- NODE_ENV=productionnginx:image: nginx:latestports:- "80:80"volumes:- ./nginx.conf:/etc/nginx/nginx.conf:rodepends_on:- web

示例中的 nginx.conf 用于将请求代理到 Node.js 应用,具体配置可按你的路由规则调整。完成后,执行以下命令启动栈:

# 启动(后台)并构建 Web 服务
docker compose up -d# 查看正在运行的服务及日志
docker compose ps
docker compose logs -f web

通过这种方式,你可以实现从代码提交到部署的一体化流程,且便于将来在 Kubernetes 等编排系统上的迁移。为了确保可维护性,建议将 Compose 文件纳入版本控制,并在 CI/CD 流水线中进行构建与测试。

七、故障排查与最佳实践

日志与诊断要点

当容器出现故障时,日志是最直接的线索。常用的排查步骤包括:查看具体容器日志、检查运行时错误、以及使用镜像内应用的日志输出。命令如下:docker logs、docker inspect、docker events

# 查看容器日志
docker logs -f my-app# 获取容器详细信息(包括网络、挂载、环境变量等)
docker inspect my-app# 监听事件(排查创建/启动失败等问题)
docker events --filter 'type=container'

在排查权限、网络、以及宿主机资源方面,还需关注宿主机的防火墙、SELinux/ AppArmor 安全策略、以及 cgroup 配置,确保容器能够正常访问所需的资源与端口。

权限、网络与性能的最佳实践

在生产环境中,建议避免以 root 用户直接运行容器,采用 将当前用户加入 docker 组或使用 Beam/Rootless 模式来降低风险。此外,合理配置端口暴露和网络策略,避免不必要的端口暴露,同时使用网络隔离(Bridge、Overlay、macvlan)来实现微前端网络分层。关于性能,关注内核参数、守护进程的日志级别、以及 I/O 的瓶颈,必要时启用容器资源限制(如 CPU、内存、以及 I/O 限流)来提升稳定性。

Linux环境下 Docker 安装与使用详解:从新手到实战部署的完整教程

广告

操作系统标签