Docker 详解与实战:从安装到部署,打造你的第一个容器化应用
一、什么是 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. 镜像相关操作
|
命令 |
功能 |
|
|
查看本地所有镜像 |
|
|
从仓库拉取镜像 |
|
|
使用当前目录下的 Dockerfile 构建镜像 |
|
|
删除指定镜像 |
2. 容器相关操作
|
命令 |
功能 |
|
|
查看正在运行的容器 |
|
|
查看所有容器(包括已停止的) |
|
|
运行一个新容器 |
|
|
停止容器 |
|
|
启动已停止的容器 |
|
|
删除容器 |
|
|
进入正在运行的容器终端 |
五、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 部署实战案例 —— 部署一个 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 的核心技能。
更多推荐
所有评论(0)