当前位置: 首页 > news >正文

Docker 使用总结及完整示例介绍

以下是一份详细的 Docker 使用总结及完整示例介绍,涵盖基础概念、常用命令和实际应用场景:


一、Docker 核心概念

  1. 镜像 (Image)

    • 只读模板,用于创建容器。
    • 例如:ubuntu:22.04, nginx:alpine
  2. 容器 (Container)

    • 镜像的运行实例,拥有独立的环境和文件系统。
  3. 仓库 (Registry)

    • 存储镜像的平台,如 Docker Hub (docker.io)。
  4. 数据卷 (Volume)

    • 持久化容器数据的机制。
  5. 网络 (Network)

    • 容器间通信的桥梁,支持多种驱动(如 bridge, host)。

二、Docker 常用命令

1. 镜像管理
# 拉取镜像
docker pull ubuntu:22.04# 查看本地镜像
docker images# 删除镜像
docker rmi ubuntu:22.04# 构建镜像(需 Dockerfile)
docker build -t myapp:1.0 .
2. 容器操作
# 运行容器(前台模式)
docker run -it --name my_container ubuntu:22.04 /bin/bash# 运行容器(后台模式)
docker run -d -p 8080:80 --name nginx_container nginx:alpine# 查看运行中的容器
docker ps# 查看所有容器(包括已停止的)
docker ps -a# 停止/启动容器
docker stop nginx_container
docker start nginx_container# 进入运行中的容器
docker exec -it nginx_container /bin/sh# 删除容器
docker rm nginx_container# 查看容器日志
docker logs nginx_container
3. 数据卷管理
# 创建数据卷
docker volume create my_volume# 挂载数据卷到容器
docker run -d -v my_volume:/data --name vol_container ubuntu# 查看数据卷信息
docker volume inspect my_volume
4. 网络管理
# 创建自定义网络
docker network create my_network# 将容器连接到网络
docker run -d --network my_network --name app1 myapp:1.0

三、完整示例:构建并运行一个 Python Web 应用

1. 项目结构
myapp/
├── app.py
├── requirements.txt
└── Dockerfile
2. 编写代码
  • 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)
  • requirements.txt
flask==3.0.0
3. 编写 Dockerfile
# 使用官方 Python 基础镜像
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"]
4. 构建镜像
docker build -t my-flask-app:1.0 .
5. 运行容器
docker run -d -p 5000:5000 --name flask-container my-flask-app:1.0
6. 验证

访问 http://localhost:5000,显示 “Hello from Docker!”。


四、Docker Compose 多容器编排

1. 编写 docker-compose.yml
version: '3.8'services:web:build: .ports:- "5000:5000"volumes:- .:/appdepends_on:- redisredis:image: "redis:alpine"
2. 启动服务
docker-compose up -d
3. 停止服务
docker-compose down

五、最佳实践

  1. 精简镜像

    • 使用 alpineslim 版本的基础镜像。
    • 通过多阶段构建减少镜像大小。
  2. 避免以 root 运行

    • 在 Dockerfile 中添加非特权用户:
      RUN useradd -m appuser && chown -R appuser /app
      USER appuser
      
  3. 定期清理

    docker system prune -a  # 删除无用镜像、容器和缓存
    
  4. 使用 .dockerignore
    避免将无关文件(如 node_modules)复制到镜像。


六、常见问题

  1. 容器无法启动

    • 检查日志:docker logs <container_name>
    • 调试启动命令:docker run -it --entrypoint /bin/sh my-image
  2. 端口冲突

    • 修改主机端口映射:-p 8080:80-p 8081:80
  3. 数据持久化失败

    • 确认数据卷正确挂载:docker inspect <container_name>

通过以上内容,您可以快速掌握 Docker 的核心操作并应用于实际开发场景。

相关文章:

  • 查看Electron 应用的调试端口
  • Docker中运行的Chrome崩溃问题解决
  • Stable Diffusion进阶之Controlnet插件使用
  • HTML属性
  • Lambda表达式解读
  • C++进阶--AVL树的实现续
  • MCP:让AI模型更可信的秘密武器
  • VRRP协议-IP地址冗余配置
  • Telnetlib三种异常处理方案
  • 微服务的“迷宫” - 我们为何需要服务网格?
  • 深入详解人工智能数学基础——微积分中的自动微分及其在PyTorch中的实现原理
  • 类加载机制详解:双亲委派模型与打破它的方式
  • MindSpore框架学习项目-ResNet药物分类-模型训练
  • 人脸真假检测:SVM 与 ResNet18 的实战对比
  • Yocto中的${D}解读
  • Android 13 默认打开 使用屏幕键盘
  • 使用FastAPI和Apache Flink构建跨环境数据管道
  • vue3项目中使用CodeMirror更复杂的用法,实现自定义语法模式,手动在指定光标位置插入/获取/替换/绑定文本
  • 达索MODSIM实施成本高吗?哪家服务商靠谱?
  • C++修炼:stack和queue
  • 上海劳模风采馆焕新升级后重新开放,展示480位劳模先进故事
  • 上海发布预付卡消费“10点提示”:警惕“甩锅闭店”套路
  • 国家主席习近平同普京总统签署关于进一步深化中俄新时代全面战略协作伙伴关系的联合声明
  • 售卖自制外挂交易额超百万元,一男子因提供入侵计算机系统程序被抓
  • 8小时《大师与玛格丽特》:长度可以是特点,但不是价值标准
  • 上海市委政法委召开会议传达学习总书记重要讲话精神