Docker 容器技术从入门到实战教程
Docker 容器技术通过环境一致性、资源高效和快速部署解决开发运维差异问题。教程涵盖 Ubuntu 系统下的 Docker 安装验证、镜像与容器核心概念解析、基础命令实战操作。内容包含使用 Dockerfile 构建自定义 Python Flask 镜像的方法,以及利用 Docker Compose 编排 Spring Boot、MySQL 和 Redis 多服务项目的完整流程。同时提供常见问题排查与优化建议,帮助开发者快速掌握容器化部署技能。

Docker 容器技术通过环境一致性、资源高效和快速部署解决开发运维差异问题。教程涵盖 Ubuntu 系统下的 Docker 安装验证、镜像与容器核心概念解析、基础命令实战操作。内容包含使用 Dockerfile 构建自定义 Python Flask 镜像的方法,以及利用 Docker Compose 编排 Spring Boot、MySQL 和 Redis 多服务项目的完整流程。同时提供常见问题排查与优化建议,帮助开发者快速掌握容器化部署技能。

在传统开发中,我们常遇到'在我机器上能跑'的问题——因为本地环境与服务器环境存在差异(如 Python 版本、依赖库、系统配置等)。为解决这个问题,过去常用虚拟机,但其资源开销大、启动慢。
Docker 提供了一种轻量级、秒级启动、环境一致的解决方案:
其他系统(Windows/macOS)可参考 Docker Desktop 官网。
# 安装 curl(若未安装)
sudo apt update && sudo apt install -y curl
# 下载安装脚本
curl -fsSL https://get.docker.com -o install-docker.sh
# 执行安装
sudo sh install-docker.sh
该脚本会自动:
docker-ce、containerd 和 docker-compose-plugindocker --version
sudo systemctl status docker
docker run hello-world
若看到 "Hello from Docker!",说明安装成功!
⚠️ 权限问题:为避免每次加
sudo,可将当前用户加入docker组:
sudo usermod -aG docker $USER
| 概念 | 说明 | 类比 |
|---|---|---|
| 镜像(Image) | 只读模板,包含应用及所有依赖 | 软件安装包 / 类(Class) |
| 容器(Container) | 镜像的运行实例 | 正在运行的程序 / 实例(Instance) |
| Dockerfile | 构建镜像的指令文件 | 菜谱 / 自动化脚本 |
| 仓库(Registry) | 存储镜像的地方,如 Docker Hub | 应用商店 |
# 搜索镜像
docker search nginx
# 拉取镜像(默认 latest)
docker pull nginx
docker pull python:3.9-slim
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx
# 后台运行 Nginx 容器,映射 80 端口
docker run -d -p 80:80 --name my-nginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 进入容器内部
docker exec -it my-nginx /bin/bash
# 查看日志
docker logs my-nginx
# 停止 & 删除容器
docker stop my-nginx
docker rm my-nginx
假设你有一个 Python Flask 应用 app.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello Docker!"
Dockerfile:创建 .dockerignore(避免打包无关文件):
.git
__pycache__
*.pyc
.env
创建 requirements.txt:
flask==2.3.3
# 使用官方 Python slim 镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY 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 --name flask-web my-flask-app
访问 http://localhost:5000 即可看到页面!
💡 生产建议:使用非 root 用户、多阶段构建、国内源加速等。
创建 docker-compose.yml:
version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: demo_db
ports:
- "3306:3306"
redis:
image: redis:latest
ports:
- "6379:6379"
app:
image: openjdk:17
depends_on:
- mysql
- redis
volumes:
- ./app:/app
working_dir: /app
command: ["java", "-jar", "springboot-demo.jar"]
ports:
- "8080:8080"
启动项目:
docker-compose up -d
停止项目:
docker-compose down
docker logs <容器名>。docker system prune -a。Docker 的学习曲线其实很平缓,关键在于动手实践。从运行一个 hello-world,到部署自己的 Web 应用,每一步都能带来成就感。掌握 Docker 不仅能解决环境问题,更是通往 Kubernetes、CI/CD、微服务架构的大门。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online