一、什么是 Docker?

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖打包成一个标准化的“容器(Container)”,从而实现高效的开发、测试和部署流程。容器不同于虚拟机(VM),它更轻量、启动更快、资源占用更低。

核心概念:

概念

解释

镜像(Image)

只读模板,包含运行某个软件所需的所有文件和配置。

容器(Container)

镜像的运行实例,是可读写的。

Dockerfile

构建镜像的脚本文件,定义了如何构建一个镜像。

Volume

数据持久化机制,用于在容器之间共享或保留数据。

网络(Network)

容器之间的通信机制。


二、Docker 的优势

  • 环境一致性:本地开发、测试、生产环境一致,避免“在我机器上能跑”问题。
  • 快速部署与扩展:容器启动快,适合微服务架构。
  • 资源隔离与高效利用:相比传统虚拟机更加轻量。
  • 易于集成 CI/CD 流程:支持自动化构建、测试和部署。

三、Docker 安装指南(以 Ubuntu 为例)

1. 卸载旧版本(如有)

sudo apt remove docker docker-engine docker.io containerd runc

2. 安装依赖包

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

3. 添加 Docker 官方 GPG 密钥

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

4. 添加 Docker 软件源

echo "deb [arch=$(dpkg --print-architecture) 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

5. 安装 Docker 引擎

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

6. 验证是否安装成功

sudo docker --version
sudo docker run hello-world

若输出 Hello from Docker!,说明安装成功!


四、Docker 基础命令详解

1. 镜像相关操作

命令

功能

docker images

查看本地所有镜像

docker pull <image>

从仓库拉取镜像

docker build -t <name> .

使用当前目录下的 Dockerfile 构建镜像

docker rmi <image_id>

删除指定镜像

2. 容器相关操作

命令

功能

docker ps

查看正在运行的容器

docker ps -a

查看所有容器(包括已停止的)

docker run [OPTIONS] IMAGE

运行一个新容器

docker stop <container_id>

停止容器

docker start <container_id>

启动已停止的容器

docker rm <container_id>

删除容器

docker exec -it <container_id> bash

进入正在运行的容器终端


五、Dockerfile 编写入门

Dockerfile 是用来构建镜像的文本文件,包含一系列指令和参数。

示例:构建一个简单的 Python Web 应用镜像

目录结构:
myapp/
├── app.py
└── requirements.txt
requirements.txt 内容:
flask==2.0.1
app.py 内容:
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from Docker!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)
Dockerfile 内容:
# 使用官方 Python 镜像作为基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制本地文件到容器中
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

# 暴露端口
EXPOSE 5000

# 容器启动时执行的命令
CMD ["python", "app.py"]
构建并运行容器:
docker build -t my-flask-app .
docker run -d -p 5000:5000 my-flask-app

访问:http://localhost:5000,看到 “Hello from Docker!” 表示成功!


六、Docker Compose 管理多容器应用

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose.yml 文件来配置多个服务。

示例:部署一个 Flask + Redis 应用

目录结构:
myapp/
├── app.py
├── requirements.txt
└── docker-compose.yml
docker-compose.yml 内容:
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis
  redis:
    image: "redis:alpine"
修改 app.py,加入 Redis 支持:
from flask import Flask
import redis

app = Flask(__name__)
r = redis.Redis(host='redis', port=6379, db=0)

@app.route('/')
def index():
    count = r.incr('hits')
    return f"This page has been viewed {count} times."

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)
构建并启动服务:
docker-compose up -d

访问 http://localhost:5000,刷新页面会看到计数递增,说明 Flask 与 Redis 成功通信!


七、Docker 实战部署建议

1. 生产环境注意事项

  • ✅ 使用 Linux 用户权限管理,避免使用 root 用户运行容器。
  • ✅ 使用 .dockerignore 排除不必要的文件,减小镜像体积。
  • ✅ 使用 Volume 挂载日志、配置文件等,便于维护。
  • ✅ 使用标签(tag)区分不同版本镜像,如 v1.0, latest
  • ✅ 使用私有仓库(如 Harbor)进行镜像管理。
  • ✅ 配合 Kubernetes(K8s)进行编排管理(进阶)。

2. 日常运维常用命令

命令

功能

docker logs <container_id>

查看容器日志

docker inspect <container_id>

查看容器详细信息

docker stats

实时查看容器资源占用情况

docker volume ls

查看所有卷

docker network ls

查看网络


八、Docker 部署实战案例 —— 部署一个 Django + PostgreSQL + Nginx 项目

技术栈:

  • Django:Web框架
  • PostgreSQL:数据库
  • Nginx:反向代理服务器
项目结构:
django-docker/
├── backend/
│   └── (Django 项目文件)
├── nginx/
│   └── default.conf
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
docker-compose.yml 示例:
version: '3.8'

services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data/

  backend:
    build: .
    command: gunicorn backend.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000"
    depends_on:
      - db

  nginx:
    image: nginx:stable-alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - backend

volumes:
  postgres_data:
构建并启动:
badocker-compose up -d --build

访问 http://localhost 即可看到部署好的 Django 网站。


九、Docker 学习路线图(建议)

阶段

学习内容

目标

第1阶段

Docker 安装、基本命令

熟悉容器操作

第2阶段

Dockerfile 编写、镜像构建

掌握自定义镜像

第3阶段

Docker Compose 使用

管理多容器应用

第4阶段

Volume、网络配置

实现数据持久化与容器互联

第5阶段

部署实际项目(Flask/Django/Node.js)

实战能力提升

第6阶段

与 CI/CD 集成(GitLab/GitHub Actions)

自动化部署流程

第7阶段

Docker + Kubernetes(K8s)

进阶云原生技能


十、推荐学习资源

  • 📚《Docker——从入门到实践》中文手册
  • 📚《Docker —— 云端分布式系统编程入门》
  • 🌐 Docker Docs
  • 🌐 https://github.com/veggiemonk/awesome-docker
  • 📘 B站视频:《Docker 最全教程》《从零开始学 Docker》
  • 📘 Coursera:《Docker Mastery》

十一、总结

Docker 是现代软件开发不可或缺的工具之一,它解决了环境不一致、部署复杂等问题,极大提升了开发效率和部署可靠性。

从安装、基础命令、编写 Dockerfile,到使用 Docker Compose 管理多容器应用,再到实战部署完整项目,你已经掌握了 Docker 的核心技能。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐