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.pswp.cn/news/914051.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914051.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914051.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯第十六届(2025)真题深度解析:思路复盘与代码实战

> 省一选手的血泪经验:**避免这些坑,你也能冲进国赛!** 2025年蓝桥杯省赛已落下帷幕,作为近年来**难度最高的一届竞赛**,不少选手在考场上遭遇了“滑铁卢”。本文将以C++ B组真题为例,逐题解析解题思路,并提供**优化后的AC代码与详细注释**。笔者最终排名省一前40%,…

使用gdal读取shp及filegdb文件

一、使用qgis开源工具构建两个文件&#xff0c;分别是filegdb和shp&#xff0c;每个文件包含一个图层&#xff0c;图层内容只包含一个字段&#xff1a;id&#xff0c;有两个数据行&#xff0c;图层几何为多边形&#xff0c;图层都是如下的效果。二、使用rust读取上述文件 rust依…

从0开始学习R语言--Day44--LR检验

之前我们提到用LM检验的方式&#xff0c;来判断数据在空间上是否受到邻近数据及其残差的影响&#xff0c;但是LM检验是采用直接计算的方式&#xff0c;只关注了数据的残差平方和&#xff0c;没有数据关于依赖项的考虑&#xff0c;容易被结果误导。而LR检验虽然在结果上有时候跟…

openEuler 24.03 (LTS-SP1) 下私有镜像仓库部署与自签 SSL 全流程目标

目录 openEuler 24.03 (LTS-SP1) 下私有镜像仓库部署与自签 SSL 全流程 1 创建根 CA 与服务器证书&#xff08;修正版&#xff1a;SAN 写法兼容所有 OpenSSL&#xff09; 2 配置 Docker Compose 文件 3 客户端节点信任 CA 3.1 Docker 3.2 containerd 4 推送 / 拉取测试 …

mysql的LIMIT 用法

常见用法1. 限制返回行数-- 返回前5条记录 SELECT * FROM products LIMIT 5;2. 分页查询&#xff08;带偏移量&#xff09;-- 跳过前10条&#xff0c;返回接下来的5条记录&#xff08;第11-15条&#xff09; SELECT * FROM products LIMIT 10, 5;-- MySQL 8.0 也支持这种语法 S…

maven 发布到中央仓库之持续集成-03

maven 系列 maven-01-发布到中央仓库概览 maven-02-发布到中央仓库常用脚本 maven-03-发布到中央仓库之持续集成 maven-04-发布到中央仓库之 Ignore Licence maven-05-maven 配置进阶学习 maven-06-maven 中央仓库 OSSRH 停止服务&#xff0c;Central Publishing Portal …

(补充)RS422

RS4221. 基本定义与定位 官方名称&#xff1a; EIA/TIA-422&#xff08;电子工业协会/电信工业协会标准422&#xff09;。类型&#xff1a; 一种定义了电气特性的 平衡式差分 串行通信标准。目的&#xff1a; 克服 RS-232 在传输距离、速率和抗干扰能力上的严重局限性。核心思想…

自建ELK vs 云商日志服务:成本对比分析

在当今数据驱动的时代&#xff0c;日志管理已成为企业IT基础设施中不可或缺的一部分。面对日益增长的日志数据&#xff0c;许多团队都在纠结&#xff1a;是自建ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;堆栈&#xff0c;还是直接使用云服务商提供的日志服务…

Eigen 几何模块深拆:Isometry3d vs Affine3d + 变换矩阵本质详解

文章目录0 写在前面1 数学背景对比2 Eigen 实现差异3 Isometry3d 是不是 4 4 矩阵&#xff1f;4 核心 API 速查5 实战示例5.1 SLAM 位姿链&#xff1a;相机点 → 世界点5.2 体素滤波&#xff1a;各向异性缩放&#xff08;X/Y → 5 cm&#xff0c;Z → 10 cm&#xff09;5.3 把…

python的病例管理系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具&#xff1a;Navicat/SQLyog等都可以 随着医疗…

博客系统开发全流程解析(前端+后端+数据库)与 AI 协作初体验

一、前言&#xff1a;为什么选择博客系统作为全栈入门&#xff1f; 对于初入编程世界的开发者来说&#xff0c;“全栈” 似乎是一个庞大而遥远的概念。前端、后端、数据库、部署运维… 知识体系繁杂&#xff0c;令人望而生畏。选择一个目标明确、功能完整且贴近实际应用的项目…

Xavier公式的原理

数学原理&#xff1a; (1) 前向传播的方差一致性 假设输入 x 的均值为 0&#xff0c;方差为 σx2σ_x^2σx2​&#xff0c;权重 W的均值为 0&#xff0c;方差为 σW2σ_W^2σW2​&#xff0c;则输出 zWxzWxzWx的方差为&#xff1a; Var(z)nin⋅Var(W)⋅Var(x) Var(z)n_{in}⋅Va…

pytorch学习笔记(二)-- pytorch模型开发步骤详解

简介&#xff1a; 本章主要是针对Pytorch神经网络的开发步骤做一个详细的总结&#xff0c;对每一步的前世今生做一个了解&#xff0c;下面先列一下开发需要的步骤有哪些&#xff1a; 模型构建&#xff0c;主要是前向传递函数的确认确认损失函数以及学习步频&#xff08;learni…

consul 的安装与服务发现

1. helm 安装 consul 到 k8s 安装放在这里了&#xff1a;https://github.com/lianan2/installation/tree/master/consul-helm consul 的常用命令&#xff1a; # 查看集群状态 kubectl -n consul exec -it consul-server-0 -- consul operator raft list-peers kubectl -n con…

ros topic和service的使用

在做ldiar slam的时候&#xff0c;最常用的当属topic&#xff0c;偶尔也会用一下service&#xff0c;action则很少使用。现在一块来看一下topic的使用。一、topic的使用topic的消息订阅和发布#include<ros/ros.h> #include<rosbag/bag.h> #include<rosbag/view.…

【TCP/IP】18. 因特网服务质量

18. 因特网服务质量18. 因特网服务质量18.1 服务质量&#xff08;QoS&#xff09;18.2 实时传输协议&#xff08;RTP&#xff09;18.3 实时传输控制协议&#xff08;RTCP&#xff09;18.4 集成业务&#xff08;IntServ&#xff09;18.5 区分业务&#xff08;DiffServ&#xff0…

数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter

【PyTorch】图像多分类项目 目录 StratifiedShuffleSplit transforms.ToTensor Counter StratifiedShuffleSplit sss StratifiedShuffleSplit(n_splits1, test_size0.2, random_state0) 创建StratifiedShuffleSplit对象&#xff0c;用于将数据集划分为训练集和测试集。 …

【环境配置】KAG - Windows 安装部署

前言 本博客将介绍如何在 Windows 系统上 部署运行 KAG 项目&#xff0c;将使用 WSL 和 Docker 和 Vscode 帮助我们之后利用 KAG 开发个人知识库问答项目。 KAG&#xff08;Knowledge-Augmented Generation&#xff09;知识增强生成系统 是一个融合知识图谱与大语言模型能力的…

《探索电脑麦克风声音采集多窗口实时可视化技术》

引言在当今数字化信息飞速发展的时代&#xff0c;声音作为一种重要的信息载体&#xff0c;其处理和分析技术日益受到广泛关注。声音可视化技术&#xff0c;作为声音处理领域的关键技术之一&#xff0c;具有极为重要的价值。它能够将抽象的声音信号转化为直观的视觉图像&#xf…

加工进化论:SPL 一键加速日志转指标

作者&#xff1a;劳贵泓&#xff08;泓逸&#xff09; 1. 背景 日志服务的 SPL&#xff08;Search Processing Language&#xff09;自推出以来&#xff0c;凭借其强大的数据处理能力&#xff0c;已经成为众多开发者和企业实现高效数据分析的首选工具。随着业务场景的不断拓展…