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 安全与最佳实践等内容。