Docker 概览 & Docker 命令总结


一、Docker 基础概念与原理

什么是 Docker?

Docker 是一个开源的容器平台,用于打包、分发和运行应用程序及其所有依赖项。

  • 把应用、运行环境、依赖打包成一个“镜像”
  • 运行镜像就生成一个“容器”,容器彼此隔离,不影响宿主机

核心概念:

名称 说明
镜像 Image 应用 + 环境的静态模板
容器 Container 镜像的运行实例
Dockerfile 描述如何构建镜像的脚本
Registry 镜像仓库,例如 Docker Hub

Docker 工作原理(Linux 容器机制)

  • 利用 Linux 的 namespace(隔离)和 cgroups(资源限制)实现
  • 容器共享宿主机内核,但拥有独立文件系统、网络、进程空间
  • 启动速度极快,资源占用小

二、Docker 镜像构建机制与实践

镜像是分层构建的

  • 每个 Dockerfile 指令都会生成一个只读的文件系统层
  • 构建时 Docker 利用缓存提升效率

Dockerfile 最佳实践

  • 变动少的层放在前面,提高缓存命中率
  • 合并多个 RUN 语句,减少层数
  • 使用 .dockerignore 文件避免将无用文件打包进镜像
  • 使用轻量基础镜像(如 alpine)减小体积

示例 Dockerfile

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]

.dockerignore 示例

__pycache__/
.git
.env
*.log
node_modules/

三、Docker Compose

Docker Compose 是什么?

  • 定义和运行多容器服务的工具(使用 docker-compose.yml)

示例

version: '3.8'
services:
backend:
build: ./backend
volumes:
- ./test_files:/app/test_files
redis:
image: redis:7

运行:

docker-compose up --build
docker-compose down

四、Docker 常用命令

镜像操作

docker build -t my-image .
docker images
docker rmi image-id
docker pull image-name
docker tag source target

容器操作

docker run image
docker run -it image bash
docker run --rm image
docker run -v $(pwd):/app image
docker run -p 8080:80 image
docker ps
docker ps -a
docker stop container-id
docker rm container-id
docker exec -it container-id bash

容器调试

docker logs container-id
docker cp file.txt container:/path
docker cp container:/path/file.txt ./
docker inspect container-id

清理命令

docker system prune
docker image prune
docker container prune
docker volume prune

资源限制示例

docker run --memory=512m --cpus=1 image

五、Docker 的使用场景与优势

适用场景

  • 团队统一开发环境
  • CI/CD 流程打包构建测试
  • 微服务部署
  • 数据科学/AI 项目环境隔离

相比虚拟机的优势

项目 Docker 容器 虚拟机
启动速度 秒级 分钟级
占用资源 少(共享宿主机内核) 多(完整系统)
隔离性 中(内核级) 高(硬件级)
可移植性 一般
性能 几乎无损 有虚拟化开销

六、实际开发中的 Docker 工作流

  1. 编写 Dockerfile 定义环境和入口
  2. 使用 docker build 构建镜像
  3. 使用 docker run 启动镜像成为容器
  4. 容器内运行程序,无需本地配置依赖
  5. 可通过 docker push 发布镜像
  6. 与 CI/CD 工具(如 GitHub Actions)结合,形成自动化部署

如需进一步扩展,可了解多阶段构建、Docker 网络、Volume 数据持久化、Docker 安全与最佳实践等内容。