Docker 实战指南:从入门到进阶

世界杯开始 2026-02-27 13:44:43

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。本文将全面介绍 Docker 的核心概念和使用方法。

Docker 基础概念

核心组件

Docker 包含三个核心组件:

Docker 引擎:负责创建和管理 Docker 容器

Docker 镜像:容器的模板,包含了应用及其依赖

Docker 容器:镜像的运行实例

工作原理

Docker 使用客户端-服务器架构:

Docker daemon:服务器组件,管理容器

Docker CLI:命令行客户端,与 daemon 交互

Docker registry:存储和分发 Docker 镜像

安装 Docker

Windows 安装

下载 Docker Desktop for Windows

运行安装程序

启用 WSL 2(Windows Subsystem for Linux)

启动 Docker Desktop

Linux 安装

Ubuntu/Debian 系统下的安装命令:

# 更新包索引

sudo apt-get update

# 安装依赖

sudo apt-get install \

apt-transport-https \

ca-certificates \

curl \

gnupg \

lsb-release

# 添加 Docker 官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库

echo \

"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker Engine

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

Docker 基本命令

镜像管理

# 搜索镜像

docker search nginx

# 拉取镜像

docker pull nginx:latest

# 列出本地镜像

docker images

# 删除镜像

docker rmi nginx:latest

容器操作

# 运行容器

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

# 列出运行中的容器

docker ps

# 列出所有容器(包括停止的)

docker ps -a

# 停止容器

docker stop my-nginx

# 启动容器

docker start my-nginx

# 删除容器

docker rm my-nginx

Dockerfile 详解

Dockerfile 是用于构建 Docker 镜像的文本文件。

基本结构

# 基础镜像

FROM node:14

# 设置工作目录

WORKDIR /app

# 复制依赖文件

COPY package*.json ./

# 安装依赖

RUN npm install

# 复制源代码

COPY . .

# 暴露端口

EXPOSE 3000

# 启动命令

CMD ["npm", "start"]

常用指令

FROM:指定基础镜像

WORKDIR:设置工作目录

COPY/ADD:复制文件

RUN:执行命令

ENV:设置环境变量

EXPOSE:声明端口

CMD/ENTRYPOINT:指定启动命令

Docker Compose

Docker Compose 用于定义和运行多容器 Docker 应用程序。

安装

# Linux

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose.yml 示例

version: '3'

services:

web:

build: .

ports:

- "3000:3000"

depends_on:

- db

db:

image: mongo:latest

volumes:

- mongodb_data:/data/db

volumes:

mongodb_data:

基本命令

# 启动服务

docker-compose up -d

# 停止服务

docker-compose down

# 查看日志

docker-compose logs

# 查看服务状态

docker-compose ps

Docker 网络

网络类型

bridge:默认网络,容器间可通过 IP 通信

host:容器使用主机网络

none:容器没有网络连接

overlay:跨主机容器网络

网络命令

# 创建网络

docker network create my-network

# 列出网络

docker network ls

# 连接容器到网络

docker network connect my-network container-name

# 断开网络连接

docker network disconnect my-network container-name

数据管理

数据卷(Volumes)

# 创建数据卷

docker volume create my-volume

# 使用数据卷运行容器

docker run -v my-volume:/data nginx

绑定挂载(Bind Mounts)

# 将主机目录挂载到容器

docker run -v /host/path:/container/path nginx

最佳实践

镜像构建

使用多阶段构建

# 构建阶段

FROM node:14 AS builder

WORKDIR /app

COPY . .

RUN npm install && npm run build

# 运行阶段

FROM nginx:alpine

COPY --from=builder /app/dist /usr/share/nginx/html

优化镜像大小

使用适当的基础镜像

合并 RUN 指令

清理不必要的文件

容器安全

以非 root 用户运行

USER node

限制资源使用

docker run --memory="512m" --cpus="1.5" nginx

实战示例

部署 Web 应用

创建 Dockerfile

FROM node:14-alpine

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

创建 docker-compose.yml

version: '3'

services:

web:

build: .

ports:

- "3000:3000"

environment:

- NODE_ENV=production

restart: always

部署命令

# 构建并启动

docker-compose up -d --build

# 查看日志

docker-compose logs -f

故障排查

常见命令

# 查看容器日志

docker logs container-name

# 进入容器

docker exec -it container-name sh

# 查看容器详细信息

docker inspect container-name

# 查看容器资源使用

docker stats

常见问题

容器无法启动

检查日志

验证端口映射

确认资源限制

网络连接问题

检查网络配置

验证防火墙规则

确认 DNS 设置

总结

Docker 通过容器化技术简化了应用的部署和管理流程。掌握 Docker 的核心概念和使用方法,可以显著提高开发和运维效率。

参考资料

Docker 官方文档

Docker Hub

Docker Compose 文档