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

上位机知识篇---Docker

Docker 详细介绍

一、Docker 是什么

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个标准化的单元(称为容器)中,确保应用在任何环境中都能以相同的方式运行

简单来说,Docker 解决了 "在我的机器上能运行,在你的机器上却不能运行" 的问题。它通过容器化技术,将应用与底层基础设施隔离开来,实现了 "一次构建,到处运行" 的目标。

二、常见使用场景

1. 应用开发与测试

  • 开发者可以在本地创建一致的开发环境,避免因环境差异导致的问题
  • 测试人员可以快速部署相同的测试环境,确保测试结果的准确性
  • 前后端开发者可以在各自的容器中工作,互不干扰

2. 持续集成 / 持续部署 (CI/CD)

  • 在 CI 流程中,使用 Docker 构建应用并运行自动化测试
  • 在 CD 流程中,通过 Docker 容器实现应用的快速、一致部署
  • 支持蓝绿部署、金丝雀发布等高级部署策略

3. 微服务架构部署

  • 每个微服务可以打包为独立的 Docker 容器
  • 便于单独扩展、更新和管理各个服务
  • 简化微服务之间的通信和依赖管理

4. 云原生应用开发

  • 与 Kubernetes 等容器编排平台紧密集成
  • 适合开发弹性伸缩、高可用的云原生应用
  • 支持服务网格、配置管理等云原生技术

5. 大数据与 AI 应用部署

  • 快速搭建分布式计算环境
  • 简化机器学习模型的训练和部署流程
  • 便于在不同环境间迁移数据处理工作流

6. 隔离性环境需求

  • 为不同应用创建隔离的运行环境
  • 安全测试和恶意软件分析
  • 临时环境搭建和资源隔离

三、使用优势与劣势

优势

  1. 环境一致性:容器包含应用所需的所有依赖,确保在任何环境中行为一致
  2. 轻量级:容器共享主机操作系统内核,比虚拟机更节省资源
  3. 快速启动:容器启动通常只需几秒,远快于虚拟机
  4. 可移植性:可以在任何支持 Docker 的环境中运行,包括物理机、虚拟机、云服务等
  5. 资源高效利用:能够更有效地利用系统资源,提高服务器利用率
  6. 版本控制:支持容器镜像的版本管理,便于回滚和追踪
  7. 易于扩展:可以快速复制容器实现水平扩展
  8. 隔离性:提供一定程度的应用隔离,增强安全性

劣势

  1. 安全性限制:容器共享主机内核,隔离性不如虚拟机彻底
  2. 学习曲线:需要学习 Docker 特定概念和命令
  3. 存储管理复杂:容器的临时存储特性可能导致数据管理复杂
  4. 网络配置复杂:容器间网络配置相对复杂,特别是在大规模部署时
  5. Windows 支持有限:虽然支持 Windows,但体验和功能不如 Linux 完善
  6. 状态管理挑战:无状态应用更适合容器化,有状态应用需要额外的状态管理策略

四、Docker 使用详细步骤

1. 安装 Docker

在 Ubuntu 上安装
# 更新 apt 包索引
sudo apt-get update# 安装必要的依赖包
sudo apt-get install ca-certificates curl gnupg lsb-release# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 设置 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# 安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# 验证安装是否成功
sudo docker run hello-world
在 CentOS 上安装
# 安装必要的依赖包
sudo yum install -y yum-utils# 设置 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装 Docker 引擎
sudo yum install docker-ce docker-ce-cli containerd.io# 启动 Docker
sudo systemctl start docker# 设置 Docker 开机自启
sudo systemctl enable docker# 验证安装是否成功
sudo docker run hello-world
在 Windows 或 Mac 上安装
  • 下载并安装 Docker Desktop
  • 安装完成后,启动 Docker Desktop 应用

2. 基本 Docker 命令

镜像操作
# 搜索镜像
docker search <镜像名称># 拉取镜像
docker pull <镜像名称>:<标签>  # 标签默认为latest# 查看本地镜像
docker images# 删除镜像
docker rmi <镜像ID或名称># 构建镜像
docker build -t <镜像名称>:<标签> <Dockerfile路径>
容器操作
# 运行容器
docker run [选项] <镜像名称> [命令]# 常用选项:
# -d: 后台运行
# -p: 端口映射,格式为 主机端口:容器端口
# -v: 挂载卷,格式为主机路径:容器路径
# -e: 设置环境变量
# --name: 指定容器名称
# -it: 交互式运行# 示例: 运行一个nginx容器
docker run -d -p 80:80 --name mynginx nginx# 查看运行中的容器
docker ps# 查看所有容器(包括停止的)
docker ps -a# 启动容器
docker start <容器ID或名称># 停止容器
docker stop <容器ID或名称># 重启容器
docker restart <容器ID或名称># 删除容器
docker rm <容器ID或名称># 进入容器
docker exec -it <容器ID或名称> /bin/bash# 查看容器日志
docker logs <容器ID或名称># 查看容器详细信息
docker inspect <容器ID或名称>

3. 创建自定义 Docker 镜像

  1. 创建 Dockerfile

    在项目根目录创建一个名为 Dockerfile 的文件,例如:

    # 使用官方Python镜像作为基础镜像
    FROM python:3.9-slim# 设置工作目录
    WORKDIR /app# 复制当前目录下的所有文件到容器的/app目录
    COPY . .# 安装依赖
    RUN pip install --no-cache-dir -r requirements.txt# 暴露端口
    EXPOSE 5000# 容器启动时执行的命令
    CMD ["python", "app.py"]
    
  2. 构建镜像

    docker build -t my-python-app:1.0 .
    
  3. 运行自定义镜像

    docker run -d -p 5000:5000 --name myapp my-python-app:1.0
    

4. Docker Compose 管理多容器应用

当应用需要多个容器协同工作时(如前端、后端、数据库),可以使用 Docker Compose 简化管理。

  1. 安装 Docker Compose

    对于安装了 Docker Desktop 的用户,Compose 已经包含在内。Linux 用户需要单独安装:

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
    
  2. 创建 docker-compose.yml 文件

    version: '3'services:web:build: .ports:- "5000:5000"depends_on:- dbdb:image: postgres:13environment:- POSTGRES_USER=postgres- POSTGRES_PASSWORD=postgres- POSTGRES_DB=mydbvolumes:- postgres_data:/var/lib/postgresql/datavolumes:postgres_data:
    
  3. 使用 Docker Compose 启动应用

    # 启动所有服务
    docker-compose up -d# 查看服务状态
    docker-compose ps# 查看日志
    docker-compose logs# 停止服务
    docker-compose down# 停止服务并删除数据卷
    docker-compose down -v
    

5. 数据持久化

Docker 容器默认是临时的,为了持久化数据,需要使用数据卷:

# 创建数据卷
docker volume create mydata# 查看数据卷
docker volume ls# 查看数据卷详情
docker volume inspect mydata# 使用数据卷运行容器
docker run -d -v mydata:/app/data --name myapp myimage# 挂载主机目录到容器
docker run -d -v /host/path:/container/path --name myapp myimage

五、总结

Docker 作为容器化技术的代表,已经成为现代软件开发和部署的重要工具。它通过容器化解决了环境一致性问题,简化了应用的部署和扩展流程。

虽然 Docker 有一定的学习曲线和局限性,但其优势在大多数场景下远大于劣势,特别是在微服务、云原生和 DevOps 实践中表现突出。

掌握 Docker 的基本使用是现代开发者的重要技能,通过本文介绍的步骤,你可以开始使用 Docker 并逐步深入探索其更多高级特性。

http://www.dtcms.com/a/274427.html

相关文章:

  • 静态路由综合实验报告册
  • HashMap简介
  • 五星出东方洛老师:gma绘制的洛阳市瀍河回族区的地图和兴趣点
  • 高精加法-P1601 A+B Problem(高精)
  • intellij idea的重命名shift+f6不生效(快捷键被微软输入法占用)
  • 决策树算法在医学影像诊断中的广泛应用
  • 知识科普丨详述agent含义
  • 【深度学习系列】ResNet网络原理与mnist手写数字识别实现
  • 浏览器重绘与重排
  • JAVA ---Excel高效导入(去重1000万数据对比)
  • 聊聊微服务架构中的双token
  • Junit多线程的坑
  • Python爬虫动态IP代理报错全解析:从问题定位到实战优化
  • 【牛客刷题】超级圣诞树(递归法和分形复制法)
  • 实时数仓和离线数仓还分不清楚?看完就懂了
  • SpringCloud 运用(5)—— sentinel限流与seata分布式事务
  • 「备忘」查询日志
  • Spring Boot整合MyBatis+MySQL实战指南(Java 1.8 + 单元测试)
  • 从 JavaFX WebView 迁移至 JxBrowser
  • 【科研绘图系列】R语言绘制系统发育树和柱状图
  • 以科技赋能未来,科聪持续支持青年创新实践 —— 第七届“科聪杯”浙江省大学生智能机器人创意竞赛圆满落幕
  • 宝塔 php支持sqlserver
  • 稀疏激活大模型推理优化:突破效率瓶颈的曙光
  • JavaScript VMP (Virtual Machine Protection) 分析与调试
  • 动态规划初步(完全背包)
  • The 2023 ICPC Asia Hangzhou Regional Contest (H. Sugar Sweet II(基环树,期望))
  • 闲庭信步使用图像验证平台加速FPGA的开发:第九课——图像插值的FPGA实现
  • 【JMeter】执行SQL
  • Elasticsearch 滚动(Scroll)用法、使用场景及与扫描(Scan)的区别
  • Linux 下使用 vim 文本编辑器时的操作指令