广告

Linux下的Docker容器入门指南:从零到实战的完整教程

一、认识与准备:Linux 下的容器化基础

核心概念与目标

本节聚焦 Docker 容器化 的核心概念,包括如何通过 Linux 内核的 namespace 与 cgroup 实现进程隔离和资源控制。理解这些原理有助于你在后续实战中对性能、稳定性和安全性做出更合理的取舍。

从零到实战的路线图在此展开:先掌握镜像与容器的区别,再学习如何通过 Dockerfile 构建自定义镜像,以及如何用 Docker Compose 进行多容器编排。

系统与内核要求

要在 Linux 上稳定运行 Docker,需要关注 内核版本、Cgroup v1/v2 支持等要点。不同发行版对安装方式也略有差异,通常建议使用 较新且长期维护的发行版,如 Ubuntu、Debian、CentOS/Alma等。

在实际环境中,确保 内核具备必要的命名空间与资源隔离特性,并开启必要的 安全相关选项,以便容器能够高效且安全地运行。

二、在 Linux 上安装 Docker 引擎

官方安装路径与仓库

要实现稳定的容器化能力,首要步骤是完成 Docker 引擎的安装。大多数发行版都提供官方仓库以获取最新版本的 Docker 组件。

在安装前,确保系统具备 网络访问、管理员权限,并了解系统包管理工具的使用方式(如 apt、yum、dnf)。

# 以 Ubuntu 为例,添加官方仓库并安装 
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /usr/share/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

通过以上步骤,你可以确保 Docker 引擎已正确安装并开机自启,从而进入后续的实战阶段。

验证与排错

安装完成后,先执行 docker versiondocker run hello-world 来验证基础环境是否可用。

若遇到网络下载失败、权限错误或守护进程异常,可以查看 systemctl status dockerjournalctl -u docker 日志,以定位问题原因。

# 验证版本
docker version# 运行测试镜像
docker run --rm hello-world

三、从零到实战:创建与运行你的第一个容器

运行一个简单的容器

开始时,可以直接以一个简单的官方镜像为目标来验证容器运行环境。docker run 提供了从仓库拉取镜像并启动容器的最基本能力。

通过实际操作,你会看到 镜像、容器、运行时之间的关系,从而明确容器化应用的执行流程。

# 以 nginx 为例,启动一个简单的 Web 服务
docker run -d --name my-nginx -p 8080:80 nginx:latest

此时浏览器访问 http://localhost:8080 即可看到默认的 nginx 欢迎页,里面的过程强调了 端口映射与后台运行的重要性。

交互式与前台运行

若需要在容器内进行交互式操作,可使用 -it 参数并进入 shell;这对于调试和学习非常有帮助。

注意,交互会占用当前终端,结束时直接退出或使用 Ctrl+C 即可将容器终止。

# 交互式运行一个临时容器
docker run -it --rm alpine:3.18 /bin/sh

通过 交互式容器,你可以手动查看 Fedora、Debian、Alpine 等不同镜像中的文件系统与工具,帮助理解容器镜像的组成。

四、镜像与 Dockerfile 入门

理解镜像、容器与层级结构

镜像是由一组只读层组成的只读模板,容器是镜像在运行时的可写实例。了解这一点有助于你在构建自定义镜像时优化 层叠缓存 与镜像大小。

多层镜像 能显著减少重复内容的下载与存储,提高构建与部署效率。

编写你的第一个 Dockerfile

通过一个简单的 Dockerfile,可以将应用及其依赖打包成可重复部署的镜像。下面示例演示从 Alpine 基础镜像构建一个包含 curl 的镜像。

FROM alpine:3.18
RUN apk add --no-cache curl
CMD ["sh", "-c", "echo hello from dockerfile && sleep 3600"]

构建镜像时,缓存机制 会在后续修改中保留未变的层,显著提升构建速度和网络带宽利用率。

多阶段构建的意义

如果你需要在最终镜像中剔除构建阶段的工具链,可以采用 多阶段构建。这能让最终镜像更小,更符合生产环境需求。

# 多阶段示例
FROM golang:1.20 AS builder
WORKDIR /src
COPY . .
RUN go build -o appFROM alpine:3.18
RUN apk add --no-cache ca-certificates
COPY --from=builder /src/app /app
CMD ["/app"]

五、容器编排:Docker Compose 入门

安装与基本用法

对于涉及多个服务的应用,Docker Compose 可以让你用一个 YAML 文件来定义并管理整套容器。它有助于在开发、测试和部署之间保持一致性。

服务、网络、卷等配置项全部集中在 compose 文件中,降低了运维成本。

version: '3'
services:web:image: nginx:latestports:- "8080:80"db:image: mysql:8environment:MYSQL_ROOT_PASSWORD: examplevolumes:- dbdata:/var/lib/mysql
volumes:dbdata:

按环境启动应用

使用 docker-compose up 可以一次性拉取镜像、创建网络与卷、并启动所有定义的服务。对于开发环境,这通常意味着更高效的迭代。

如果需要清理资源,可以结合 docker-compose down,它会停止并移除容器、默认网络以及在 compose 文件中定义的卷(可选)。

Linux下的Docker容器入门指南:从零到实战的完整教程

# 启动
docker-compose up -d# 停止并移除
docker-compose down

六、数据持久化与网络

卷与绑定挂载

容器是无状态的,持久化数据需要通过 卷(volumes)绑定挂载(bind mounts) 来实现。卷有助于数据独立于容器生命周期,便于备份与迁移。

在设计时,优先考虑 数据卷,并遵循最小权限原则,避免在容器中直接暴露敏感数据。

# 创建并使用卷
docker volume create mydata
docker run -d -v mydata:/var/lib/mysql mysql:8

网络驱动与端口映射

容器之间的通信需要网络支持,常见的网络模型包含 bridge、host、overlay等。对于单机单容器应用,桥接网络即可满足大多数场景,而分布式应用则需要 overlay 网络。

端口映射通过 -pports 配置,将容器内部端口暴露到宿主机,从而实现外部访问。

七、常用命令与排错

基础命令速查

掌握一组常用命令能显著提升工作效率:镜像与容器管理、日志查看、运行状态查询等。

在遇到问题时,优先通过日志与元信息定位, often 使用 docker ps、docker inspect、docker logs 组合来诊断。

# 容器与镜像快速清单
docker ps -a
docker images# 容器日志与状态
docker logs 
docker inspect # 进入正在运行的容器进行调试
docker exec -it  /bin/sh

资源与性能排查

监控容器资源使用情况对于稳定运行至关重要。你可以查看 CPU、内存、block I/O 等指标,并据此进行资源限制调整。

常用排错步骤包括 查看守护进程日志、确认网络连通性、检查卷挂载点等,确保各环节都处于正常工作状态。

# 实时查看容器资源
docker stats --no-stream# 检查网络连通性
docker network ls
docker network inspect bridge
以上内容围绕 Linux 下的 Docker 容器入门与实战展开,覆盖了从环境准备、安装、镜像与容器、Dockerfile、Compose、数据持久化、网络以及常用排错的一系列关键知识点,帮助你实现从零到一线实践的完整路径。通过掌握这些要点,你可以在 Linux 环境中高效地构建、运行和管理容器化应用,逐步提升在实际生产环境中的部署能力和应对能力。

广告

操作系统标签