Docker基础实践与应用举例

embedded/2025/2/25 8:47:02/

Docker 是一个轻量级容器化平台,通过将应用及其依赖打包到容器中,实现快速部署和环境一致性。以下是 Docker 的实践与应用场景举例,结合具体操作步骤:


一、基础实践

1. 快速启动一个容器
# 运行一个Nginx容器,映射宿主机80端口到容器80端口
docker run -d -p 80:80 --name my-nginx nginx
  • -d: 后台运行
  • -p: 端口映射
  • --name: 容器名称
2. 查看容器状态
docker ps -a  # 查看所有容器
docker logs my-nginx  # 查看容器日志
3. 进入容器内部
docker exec -it my-nginx /bin/bash

二、应用场景举例

1. Web 服务部署

场景:部署一个 Python Flask 应用
步骤

  1. 编写 Dockerfile
    dockerfile">FROM python:3.9-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
    
  2. 构建镜像:
    docker build -t my-flask-app .
    
  3. 运行容器
    docker run -d -p 5000:5000 my-flask-app
    

2. 数据库容器

场景:运行 MySQL 数据库并持久化数据

# 创建数据卷
docker volume create mysql_data# 启动MySQL容器
docker run -d \--name mysql-db \-e MYSQL_ROOT_PASSWORD=my-secret-pw \-v mysql_data:/var/lib/mysql \-p 3306:3306 \mysql:8.0
  • -v: 将容器内的 /var/lib/mysql 挂载到宿主机卷 mysql_data,实现数据持久化。

3. 多容器协作(Docker Compose)

场景:部署一个包含 Web 应用、Redis 缓存的完整服务

  1. 编写 docker-compose.yml
    version: '3'
    services:web:build: .ports:- "5000:5000"depends_on:- redisredis:image: redis:alpinevolumes:- redis_data:/data
    volumes:redis_data:
    
  2. 启动服务:
    docker-compose up -d
    

4. 持续集成(CI/CD)

场景:在 GitLab CI 中运行测试
示例 .gitlab-ci.yml

test:image: node:16script:- npm install- npm test

三、进阶实践

1. 自定义网络
# 创建自定义网络
docker network create my-network# 将容器连接到网络
docker run -d --network my-network --name app1 my-app
docker run -d --network my-network --name app2 my-app
  • 同一网络内的容器可通过容器名直接通信(如 app1 可直接访问 app2:8080)。
2. 镜像优化
  • 使用多阶段构建减少镜像体积:
    dockerfile"># 构建阶段
    FROM golang:1.18 AS builder
    WORKDIR /app
    COPY . .
    RUN go build -o myapp# 运行阶段
    FROM alpine:latest
    COPY --from=builder /app/myapp /
    CMD ["/myapp"]
    

四、常见问题解决

  1. 容器时区问题
    Dockerfile 中设置时区:
    dockerfile">RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
  2. 容器内存限制
    docker run -m 512m --memory-swap 1g my-app
    

五、应用场景总结

场景工具/技术核心优势
微服务部署Docker Compose环境隔离,一键启动
开发环境统一Docker镜像消除“在我机器上能运行”问题
快速原型验证预构建镜像(如Jupyter)秒级启动,无需安装依赖
蓝绿部署Docker Swarm/K8s无缝切换,零停机更新

通过 Docker 可以实现:

  • 环境一致性:开发、测试、生产环境完全一致
  • 快速部署:镜像秒级启动,无需配置依赖
  • 资源隔离:每个容器独立运行,避免依赖冲突
  • 弹性伸缩:结合 Kubernetes 实现自动扩缩容

http://www.ppmy.cn/embedded/165009.html

相关文章

机器视觉3D中,深度图与点云图数据对比分析

在机器视觉3D中,深度图(Depth Map)和点云图(Point Cloud)是两种不同的数据表示形式,主要区别如下: 数据维度与结构 深度图 二维矩阵:每个像素存储对应场景中某一点的深度值(即到相机的距离)。 坐标系:基于图像坐标系(2D),每个像素的坐标是 (u, v),对应的深度值为…

Qwen2.5-VL Technical Report!!! 操作手机电脑、解析化学公式和乐谱、剪辑电影等,妥妥六边形战士 !...

大家好!今天要介绍一位AI界的“六边形战士”——Qwen2.5-VL!它不仅像学霸一样精通图文理解,还能像特工一样操作电脑手机,甚至能解析你手写的化学公式和长达几小时的电影!是不是比你家猫主子还全能? 论文&am…

Qwen2.5-VL技术报告:多模态大模型的新SOTA!视觉理解能力全面超越GPT-4o

1.摘要 Qwen2.5-VL是Qwen视觉语言系列的最新旗舰产品,在基础功能和创新功能方面都有了显著的进步。Qwen2.5-VL通过增强的视觉识别、精确的对象定位、强大的文档解析和长视频理解,在理解和与世界交互方面实现了重大飞跃。因此,Qwen2.5-VL不仅…

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-split_dota.py

split_dota.py ultralytics\data\split_dota.py 目录 split_dota.py 1.所需的库和模块 2.def bbox_iof(polygon1, bbox2, eps1e-6): 3.def load_yolo_dota(data_root, split"train"): 4.def get_windows(im_size, crop_sizes(1024,), gaps(200,), im_rate_t…

网络基础I

目录 一、OSI七层模型 1.1 osi(Open System Interconnection,开放系统互连) 二、TCP\IP五层(或四层模型) 三、数据包的封装和分用 四、网络中的地址管理 一、OSI七层模型 1.1 osi(Open System Interco…

Qt 中集成mqtt协议

一,引入qmqtt 库 我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台时 方便,直接编译就行了。 原始仓库路径:https://github.com/emqx/qmqtt/tree/master 二,使用 声明一个单例类,将订阅到…

飞天侠:用 aioredis 加速你的 Redis 操作

前言 如果你还在用同步方式操作 Redis,你的应用可能还停留在“慢跑”阶段,而不是极速奔跑!在现代高性能应用中,响应速度至关重要,而异步操作就是那把解锁高速的钥匙。而 aioredis,这款基于 asyncio 的 Redis 异步客户端,正是帮你提升性能、缩短延迟的得力助手。它能让你…

VoIP之音频3A技术

音频3A技术是改善语音通话质量的三种关键技术的简称,包括声学回声消除(Acoustic Echo Cancellation, AEC)、自动增益控制(Automatic Gain Control, AGC)、自噪声抑制(Automatic Noise Suppression, ANS&…