Docker 容器(一)

Docker

  • 一、Docker是什么
    • 1.什么是Docker
    • 2.Docker特点
    • 3.比较虚拟机和容器
  • 二、Docker安装
    • 1.Docker​​三大核心组件​​
    • 2.安装步骤(Ubuntu)
    • 3.阿里云镜像加速
  • 三、Docker镜像
    • 1.什么是镜像
    • 2.UnionFS(联合文件系统)
    • 3.Docker镜像加载原理
    • 4.提交容器镜像

一、Docker是什么

1.什么是Docker

Docker 是一种轻量级的容器化技术​​,它允许开发者将应用程序及其所有依赖(如代码、运行时环境、系统工具、库等)打包成一个标准化的、可移植的“容器”(Container),并在任何支持 Docker 的平台上快速部署和运行。

2.Docker特点

  1. 轻量级与高效性​​
    ​​基于容器技术​​:与传统虚拟机(VM)不同,Docker 容器共享宿主机的操作系统内核,无需启动完整的操作系统,因此​​资源占用更少​​(MB级 vs. VM的GB级)、​​启动更快​​(秒级 vs. VM的分钟级)。

    ​​高性能​​:接近原生运行效率,适合高密度部署(如微服务架构)。

  2. 环境一致性(一次构建,处处运行)​​
    ​​镜像(Image)机制​​:将应用及其依赖(如Java/MySQL等)打包成标准化的镜像,确保​​开发、测试、生产环境完全一致​​,避免“在我机器上能跑”的问题。

    ​​跨平台运行​​:镜像可在任何支持 Docker 的系统中运行(Linux/Windows/macOS),实现真正的​​跨平台移植​​

  3. 快速部署与扩展​​
    ​​一键部署​​:通过 docker run命令即可启动容器,无需手动配置环境,大幅简化运维。

    弹性伸缩​​:结合 Kubernetes 或 Swarm,可快速扩展容器实例以应对流量高峰。

  4. 隔离性与安全性​​
    ​​进程级隔离​​:每个容器拥有独立的文件系统、网络和进程空间,通过 Namespaces和 Cgroups实现资源隔离,避免应用间冲突。

    安全沙箱​​:容器内进程无法直接影响宿主机或其他容器(但安全性弱于VM,依赖宿主机内核安全)。

  5. 微服务与DevOps友好​​
    ​​微服务架构​​:每个服务可独立打包为容器,实现模块化开发和部署。

    ​​CI/CD支持​​:镜像版本化管理,无缝集成 Jenkins/GitLab CI 等工具,提升持续交付效率。

  6. 开源与生态丰富​​
    ​​基于Go语言开发​​:轻量且高性能,社区活跃。

    强大工具链​​:提供 Docker Compose(多容器编排)、Docker Hub(镜像仓库)、Kubernetes 集成等生态支持。

3.比较虚拟机和容器

  1. ​​虚拟化层级​​
    ​​Docker​​:利用宿主机的内核,通过Namespaces和Cgroups隔离进程和资源,​​无独立操作系统​​。

    ​​VM​​:通过Hypervisor(如VMware、KVM)虚拟出CPU、内存等硬件,每个VM需运行完整的Guest OS(如CentOS、Windows)。

  2. ​​资源效率​​
    ​​Docker​​:多个容器共享宿主机内核,无重复OS开销,资源利用率高,适合高密度部署。

    ​​VM​​:每个VM独占虚拟硬件和OS,资源浪费明显(例如运行10个VM需启动10个OS内核)。

  3. ​​启动速度​​
    ​​Docker​​:秒级启动(直接调用宿主机内核)。

    ​​VM​​:分钟级启动(需加载完整OS)。

  4. ​​隔离性与安全性​​
    ​​Docker​​:进程级隔离,安全性较弱(若宿主机内核漏洞会影响所有容器)。

    ​​VM​​:硬件级隔离,安全性更(一个VM被攻破不影响其他VM)。

  5. ​​适用场景​​
    ​​Docker​​:微服务、CI/CD、快速伸缩、DevOps(追求轻量和效率)。

    ​​VM​​:强隔离需求(如多租户云平台)、运行不同OS的应用(如Windows/Linux混合环境)。

二、Docker安装

1.Docker​​三大核心组件​​

Docker 镜像(Image)​
镜像是一个​​只读模板​​,包含运行应用所需的代码、运行时环境、库和配置。
一个镜像可创建很多个容器。

Docker 容器(Container)
容器是镜像的​​运行实例​​,类似于轻量级的虚拟机。每个容器都是相互隔离的、保证安全的平台。

Docker 仓库(Registry)​
用于存储和分发 Docker 镜像的服务器,类似代码仓库。

2.安装步骤(Ubuntu)

👉戳我可查看官方文档
(1)卸载旧版本
在安装 Docker Engine 之前,您需要卸载任何冲突的软件包。
运行以下命令以卸载所有冲突的包:

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

(2)安装Docker Engine

①设置 Docker 的存储库。apt

# Add Docker's official GPG key:
#更新本地 APT 软件包索引
sudo apt-get update
#安装 ca-certificates(用于 HTTPS 连接验证)和 curl(用于下载文件),确保系统支持安全下载
sudo apt-get install ca-certificates curl
#创建目录 /etc/apt/keyrings,权限设置为 0755(所有者可读写执行,其他用户可读执行),用于存储 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
#使用 curl下载 Docker 的官方 GPG 密钥,保存到 /etc/apt/keyrings/docker.asc。
# -fsSL:静默模式(不显示进度),跟随重定向,忽略 SSL 证书错误(因已通过 ca-certificates验证)。
# -o:指定输出文件路径。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc   
#将密钥文件权限设置为所有用户可读(a+r),确保 APT 可以访问该密钥
sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 再次更新 APT 软件包索引,使新添加的 Docker 软件源生效。
sudo apt-get update
#外网不能ping通可使用阿里云镜像仓库
# 1. 安装依赖工具
sudo apt-get update
sudo apt-get install -y ca-certificates curl# 2. 添加 Docker 的 GPG 密钥(阿里云镜像)
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc# 3. 添加阿里云 Docker CE 镜像源
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 4. 更新 APT 并安装 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

②安装 Docker 包。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

③通过运行映像来验证安装是否成功:hello-world

sudo docker run hello-world

3.阿里云镜像加速

在 阿里云控制台 访问容器镜像服务,即可打开镜像加速器。
打开镜像加速器方法,操作文档复制粘贴

三、Docker镜像

1.什么是镜像

**Docker 镜像(Image)**​​ 是一个​​只读的模板​​,包含运行某个应用程序所需的​​代码、运行时环境、依赖库、环境变量和配置文件​​。镜像是 Docker 容器的静态基础,容器则是镜像的运行实例

2.UnionFS(联合文件系统)

Union 文件系统(Union File System,简称 UnionFS)是一种​​分层、轻量级的文件系统​​,它将多个​​只读层(read-only layers)​​和一个​​可写层(writable layer)​​组合成一个单一的文件系统视图。
底层为只读层,上层为可写层,合并视图为用户看到的最终文件系统。

在Docker容器中的应用
(1)镜像分层存储​
Docker 镜像由多个​​文件系统​​组成,每层对应一个 Dockerfile 指令(如 RUN、COPY)。
(2)容器可写层​​
当启动容器时,Docker 在镜像的只读层之上添加一个​​可写层​​(容器层)。
所有文件修改(如创建、删除、更新)均发生在可写层,不影响镜像本身。

3.Docker镜像加载原理

BootFS(内核启动的必需品)
在 Docker 的镜像分层架构中,BootFS 是 ​​最底层的基础文件系统​​,直接依赖宿主机的 Linux 内核。
内核启动阶段​​:BootFS 是 Linux 内核启动时挂载的​​临时根文件系统​​,提供最基本的工具(如 init、modprobe)和驱动,用于加载真正的根文件系统(如 ext4、xfs)。

RootFS
RootFS(Root File System,根文件系统)是 ​​Linux 系统启动后挂载的最终文件系统​​,包含操作系统运行所需的​​所有用户空间文件和目录​​(如 /bin、/etc、/usr)。在 Docker 中,RootFS 是 ​​镜像的核心组成部分​​,直接决定了容器的运行环境。

BootFS vs. RootFS​

对比项BootFSRootFS
用途内核启动时的临时文件系统容器/系统的永久根文件系统
是否必需传统 Linux 必需,Docker 容器中省略Docker 容器的必需层(如 ubuntu:22.04
典型内容/boot/vmlinuz(内核)、/boot/initrd/bin/etc/usr等用户空间文件
生命周期内核启动后卸载容器运行时持续存在

Docker 镜像分层的好处​

  • 节省存储空间:多个镜像可以复用相同的基础层(如 ubuntu:22.04),避免重复存储。
  • 加速镜像构建与分发:如果 Dockerfile的某一层未变化(如 RUN apt-get update),直接复用缓存,跳过重复操作。
  • 环境一致性:镜像构建后,每层内容只读,确保开发、测试、生产环境完全一致。
  • 持多阶段构建:在最终镜像中仅保留必要层,丢弃中间层(如编译工具)。
  • 快速容器启动:容器启动时直接挂载镜像的现有层(无需解压完整文件系统)。
  • 安全与审计:每层有唯一的哈希值,确保镜像内容未被篡改(如 sha256:abcd…)。

4.提交容器镜像

docker commit命令用于将 ​​正在运行的容器​​ 的当前状态保存为一个 ​​新的镜像​​。适用于临时修改容器后需要持久化的场景(但推荐优先使用 Dockerfile构建镜像)。

docker commit [OPTIONS] <容器ID或名称> <新镜像名>[:标签]

常用选项

选项说明
-a--author指定镜像作者(如 -a "Your Name"
-m--message添加提交信息(类似 Git commit)
-p--pause在提交时暂停容器(默认行为)

(1)慎用 docker commit​​
提交的镜像​​缺乏透明性​​(无法追溯修改步骤),推荐优先使用 Dockerfile构建可复现的镜像。
提交的镜像可能包含​​冗余文件​​(如缓存、临时文件),导致体积膨胀。
(2)清理无用数据​​
提交前建议在容器内清理缓存:

apt-get clean && rm -rf /var/lib/apt/lists/*

Dockerfile对比

方式优势劣势
docker commit快速保存临时修改无法版本控制,难以维护
Dockerfile可复现、易维护、支持自动化构建需手动编写构建步骤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94302.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94302.shtml

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

相关文章

容器安全实践(二):实践篇 - 从 `Dockerfile` 到 Pod 的权限深耕

在上一篇《容器安全实践&#xff08;一&#xff09;&#xff1a;概念篇》中&#xff0c;我们深入探讨了容器安全的底层原理&#xff0c;并纠正了“容器天生安全”的误解。我们了解了 root 用户的双重身份&#xff0c;以及特权容器的危险性。 然而&#xff0c;仅仅了解这些概念…

c#_数据持久化

数据持久化架构 数据是应用程序的命脉。持久化架构的选择直接决定了应用的性能、可扩展性、复杂度和维护成本。本章将深入探讨.NET生态中主流的数据访问模式、工具和策略&#xff0c;帮助你为你的系统做出最明智的数据决策。5.1 ORM之争&#xff1a;Entity Framework Core深度剖…

996引擎-骰子功能

996引擎-骰子功能 测试NPC QF回调函数 结果 参考资料 在测试NPC播放骰子动画。 播放前需要先设置骰子点数 测试NPC [[骰子的显示顺序和点数 对应 私人变量 D0 D1 D2 D3 D4 D5]] -- NPC入口函数 function main(player)-- 骰子共6个,设置骰子点数后,再执行摇骰子,否则没动画…

Vue 3多语言应用开发实战:vue-i18n深度解析与最佳实践

&#x1f4d6; 概述 Vue 3 国际化&#xff08;i18n&#xff09;是构建多语言应用的核心需求。本文档介绍 Vue 3 中实现国际化的主流方案&#xff0c;包括 vue-i18n、Vite 插件方案和自定义解决方案。 &#x1f3af; 主流方案对比 方案优点缺点适用场景vue-i18n功能完整、生态成…

港口船舶流量统计准确率↑27%!陌讯多模态融合算法实战解析

一、行业痛点&#xff1a;港口船舶流量统计的三大核心难题智慧港口建设中&#xff0c;船舶流量统计是泊位调度、航道管理与安全预警的核心数据支撑&#xff0c;但传统方案受场景特性限制&#xff0c;长期存在难以解决的技术瓶颈。据《2023 年中国港口智能化发展报告》显示&…

Shell脚本的基础知识学习

Shell 脚本是 Linux/Unix 系统的核心自动化工具&#xff0c;能够完成以下任务&#xff1a; &#xff08;1&#xff09;批量操作&#xff1a;一键安装软件、批量处理文件&#xff08;重命名、压缩、备份等&#xff09;。 &#xff08;2&#xff09;系统管理&#xff1a;监控资源…

k8s部署,pod管理,控制器,微服务,集群储存,集群网络及调度,集群认证

k8s部署 k8s中容器的管理方式 ​ Kubernetes集群创建方式 centainerd 默认情况下&#xff0c;K8S在创建集群时使用的方式 docker docker使用的普记录最高&#xff0c;虽然K8S在1.24版本后已经费力了kubelet对docker的支持&#xff0c;但时可以借助cri-docker方式来实现集…

JAVA限流方法

在 Java 项目中限制短时间内的频繁访问&#xff08;即接口限流&#xff09;&#xff0c;是保护系统资源、防止恶意攻击或高频请求导致过载的重要手段。常见实现方案可分为单机限流和分布式限流&#xff0c;以下是具体实现方式&#xff1a;一、核心限流算法无论哪种方案&#xf…

性能比拼: .NET (C#) vs. Fiber (Go)

本内容是对知名性能评测博主 Anton Putra .NET (C#) vs. Fiber (Go): Performance (Latency - Throughput - Saturation - Availability) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本视频中&#xff0c;我们将对比 C# 与 .NET 框架和 Golang 的表现。在第一个…

信誉代币的发行和管理机制是怎样的?

信誉代币的发行与管理机制是区块链技术与经济模型深度融合的产物&#xff0c;其核心在于通过代码和社区共识构建可量化、可验证的信任体系。以下从技术架构、经济模型、治理机制三个维度展开分析&#xff0c;并结合具体案例说明&#xff1a;一、发行机制&#xff1a;行为即价值…

神经网络|(十二)概率论基础知识-先验/后验/似然概率基本概念

【1】引言 前序学习进程中&#xff0c;对贝叶斯公式曾经有相当粗糙的回归&#xff0c;实际上如果我们看教科书或者网页&#xff0c;在讲贝叶斯公式的时候&#xff0c;会有几个名词反复轰炸&#xff1a;先验概率、后验概率、似然概率。 今天就来把它们解读一下&#xff0c;为以…

使用UE5开发《红色警戒3》类战略养成游戏的硬件配置指南

从零开始&#xff0c;学习 虚幻引擎5&#xff08;UE5&#xff09;&#xff0c;开始游戏开发之旅&#xff01;本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01;开发类似《红色警戒3》级别的战略养成游戏&#xff0c;其硬件需求远超普通2D或小型3D项目——这类游戏…

Vue2+Vue3前端开发_Day12-Day14_大事件管理系统

参考课程: 【黑马程序员 Vue2Vue3基础入门到实战项目】 [https://www.bilibili.com/video/BV1HV4y1a7n4] ZZHow(ZZHow1024) 项目收获 Vue3 composition APIPinia / Pinia 持久化处理Element Plus&#xff08;表单校验&#xff0c;表格处理&#xff0c;组件封装&#xff09…

[ACTF新生赛2020]明文攻击

BUUCTF在线评测BUUCTF 是一个 CTF 竞赛和训练平台&#xff0c;为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.cn/challenges#[ACTF%E6%96%B0%E7%94%9F%E8%B5%9B2020]%E6%98%8E%E6%96%87%E6%94%BB%E5%87%BB下载查看&#xff0c;一个压缩包和一张图片。压缩包需要密…

关于日本服务器的三种线路讲解

租用日本服务器时&#xff0c;哪种线路选择更适合?当初次接触跨境业务的站长们着手租用日本服务器时&#xff0c;会发现不同服务商提供的网络线路五花八门&#xff0c;从陌生的运营商名称到复杂的技术参数&#xff0c;常常使其感到眼花缭乱。为了帮助大家理清思路&#xff0c;…

【大白话解析】 OpenZeppelin 的 MerkleProof 库:Solidity 默克尔证明验证工具全指南​​(附源代码)

🧩 一、Merkle Tree 是什么?为什么要验证它? 想象你有一个名单,比如: ["Alice", "Bob", "Charlie", "Dave"] 你想让别人验证:“我(比如 Alice)是不是在这个名单里?”,但不想把整个名单都放在区块链上(太贵!)。 于是你…

机械学习综合练习项目

数据集合完整项目文件已经上传一、项目介绍案例介绍 案例是针对“红酒.csv”数据集&#xff0c;在红葡萄酒质量分析的场景 中&#xff0c;利用多元线性回归来探索红葡萄酒的不同化学成分如何共同 影响其质量评分。在建立线性回归模型之后&#xff0c;当给出了红葡萄酒 的新的一…

第3篇:配置管理的艺术 - 让框架更灵活

前言 在前一章中&#xff0c;我们设计了强大的注解API。本章将深入探讨配置管理系统的设计&#xff0c;学习如何将注解中的声明式配置转换为运行时可用的配置对象。 配置管理的核心挑战 在我们的框架中&#xff0c;配置来源有三个层级&#xff1a;主要挑战&#xff1a; &#x…

发版混乱怎么规范

你是否经历过这种场景&#xff1a;临到发版&#xff0c;一堆功能代码挤在一起&#xff0c;测试分不清范围&#xff0c;修复一个Bug可能引发三个新Bug&#xff1f;发布过程像一场豪赌&#xff1f;问题的核心往往在于分支策略和流程的混乱。今天&#xff0c;我们就来建立一套在绝…

【golang长途旅行第30站】channel管道------解决线程竞争的好手

channel 为什么需要channel 使用全局变量加锁同步来解决goroutine的竞争&#xff0c;可以但不完美难以精确控制等待时间​&#xff08;主线程无法准确知道所有 goroutine 何时完成&#xff09;。全局变量容易引发竞态条件​&#xff08;即使加锁&#xff0c;代码复杂度也会增加…