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

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 的核心操作并应用于实际开发场景。

http://www.xdnf.cn/news/5227.html

相关文章:

  • 【天府诸葛杯】九天画芯 FSHD 三色光源技术晋级复赛:突围下一代底层显示技术
  • 数仓-如何保障指标的一致性
  • MySQL 索引和事务
  • 电子电路:光子是不是粒子?
  • 基于OpenCV的人脸识别:FisherFaceRecognizer算法
  • SolidWork-2023 鼠標工程
  • Java集合
  • Qt中的RCC
  • 如何避免在CMD中分段发送问题导致大模型多段回复的问题?
  • Day115 | 灵神 | 二叉树 | 二叉搜索树中的众数
  • Redis 哨兵
  • DIP依赖倒置原则
  • 第十课认识约数
  • 蓝牙身份证阅读器使用Uniapp调用二次开发demo
  • 逆向学习笔记(代码)
  • Linux `uptime` 指令详解与系统监控指南
  • 计算机体系结构一些笔记
  • C++中的继承与多态
  • 【Redis进阶】持久化
  • SpringMVC面试内容
  • 【无标题】I/O复用(epoll)三者区别▲
  • JS DOM操作与事件处理从入门到实践
  • 无线网络设备中AP和AC是什么?有什么区别?
  • 从零开始实现YOLOv8示例
  • 线性表-顺序表(Sequential List)
  • 【vue】vuex实现组件间数据共享 vuex模块化编码 网络请求
  • GRU网络详解
  • 解决使用宝塔Linux部署前后端分离项目遇到的问题
  • 第三章 Freertos智能小车遥控控制
  • 【Web】LACTF 2025 wp