Docker 容器化基础:镜像、容器与仓库的本质解析
Docker 概念与容器化技术
Docker 是一种容器化平台,能够将应用程序及其依赖项打包成一个容器,确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化,为应用程序提供了一个独立的运行环境。
容器化技术的核心优势
- 一致性:Docker 容器确保了开发、测试和生产环境的一致性,减少了环境差异带来的问题。
- 隔离性:每个容器都是独立运行的,互不影响,提升了系统的安全性和稳定性。
- 便携性:Docker 镜像可以在任何支持 Docker 的环境中运行,无需额外配置。
- 高效性:Docker 容器共享宿主机的内核,资源占用更少,启动速度更快。
Docker 架构概述
Docker 的架构包括以下几个核心组件:
- Docker Client:用户与 Docker 交互的接口,用于发送命令。
- Docker Daemon:后台运行的进程,负责创建、运行和管理容器。
- Docker Hub:Docker 镜像的中央仓库,用户可以从中拉取或推送镜像。
Docker 镜像
Docker 镜像是容器运行的基础,一个只读的模板,包含了构建容器所需的代码、配置文件和依赖项。
镜像的结构
Docker 镜像由多个层组成,每一层都是只读的,通过联合文件系统(UnionFS)叠加在一起,形成最终的文件系统。这种分层结构使得镜像的构建、存储和传输更加高效。
镜像的命名规则
Docker 镜像的命名格式为:仓库名/镜像名:标签
。其中:
- 仓库名:镜像所属的仓库,通常是用户名或组织名。
- 镜像名:镜像的名称,通常是应用程序或服务的名称。
- 标签:用于标识镜像的版本或特定配置,默认为
latest
。
构建 Docker 镜像
Docker 镜像可以通过 Dockerfile
构建。Dockerfile
是一个文本文件,包含了一系列构建镜像的指令。
Dockerfile 示例
# 使用官方 Python 镜像作为基础
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 复制当前目录的 requirements.txt 到工作目录
COPY requirements.txt .# 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt# 复制应用程序代码
COPY . .# 暴露端口
EXPOSE 8000# 设置环境变量
ENV PYTHONUNBUFFERED=1# 运行命令
CMD ["python", "app.py"]
构建镜像命令
docker build -t my-python-app:latest .
镜像的存储与分发
Docker 镜像可以存储在本地,也可以推送到 Docker 仓库(如 Docker Hub)中,以便在其他环境中使用。
查看本地镜像
docker images
删除镜像
docker rmi <image-id>
Docker 容器
Docker 容器是从 Docker 镜像创建的运行实例,每个容器都是一个独立的进程,拥有自己的文件系统、网络栈和进程空间。
创建与运行容器
从镜像创建容器并运行
docker run -it --name my-container my-image:latest /bin/bash
-it
:允许交互式 shell。--name
:指定容器名称。/bin/bash
:容器启动时执行的命令。
后台运行容器
docker run -d --name my-container my-image:latest
-d
:后台运行。
容器的生命周期管理
查看运行中的容器
docker ps
停止容器
docker stop my-container
启动容器
docker start my-container
重启容器
docker restart my-container
删除容器
docker rm my-container
容器的资源限制
Docker 提供了多种方式来限制容器的资源使用,例如 CPU、内存等。
限制 CPU 资源
docker run -it --cpus=2 my-image:latest
限制内存资源
docker run -it --memory=512m my-image:latest
容器的网络配置
Docker 提供了多种网络模式,包括:
- bridge:默认模式,容器运行在独立的网络栈中,通过 Docker 的网桥进行通信。
- host:容器使用宿主机的网络栈。
- none:容器没有网络栈,适用于不需要网络通信的场景。
示例:暴露端口
docker run -p 8000:8000 my-image:latest
-p
:将容器的 8000 端口映射到宿主机的 8000 端口。
Docker 仓库
Docker 仓库是存储和分发 Docker 镜像的地方,常用的有 Docker Hub 和私有仓库。
Docker Hub
Docker Hub 是 Docker 官方提供的公共仓库,用户可以在其中拉取和推送镜像。
从 Docker Hub 拉取镜像
docker pull python:3.9-slim
推送镜像到 Docker Hub
docker tag my-image:latest <your-username>/my-image:latest
docker push <your-username>/my-image:latest
私有仓库
私有仓库可以用于存储内部的镜像,确保安全性和控制权。
使用 Docker Registry
Docker Registry 是一个官方提供的私有仓库镜像,可以用于搭建私有仓库。
docker run -d -p 5000:5000 --name registry registry:2
推送镜像到私有仓库
docker tag my-image:latest localhost:5000/my-image:latest
docker push localhost:5000/my-image:latest
相关文章:
Docker 容器化基础:镜像、容器与仓库的本质解析
Docker 概念与容器化技术 Docker 是一种容器化平台,能够将应用程序及其依赖项打包成一个容器,确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化,为应用程序提供了一个独立的运行环境。 容器化技术的核心优势 一致性&…...
九.C++ 对引用的学习
一.基本概念 引用即内存的别名 int a 10; int& b a; 引用本身不占用内存,并非实体,对引用的所有操作都是在对目标内存进行操作 引用必须初始化,且不能更换对象 int c 5; b c; // 仅仅是在对引用的目标内存进行赋值 #include <ios…...

探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面
在开发鸿蒙应用时,你是否也曾为一个页面的布局反复调整?是否还在为查 API、写模板代码而浪费大量时间?今天带大家实战体验一下鸿蒙官方的 AI 编程助手——CodeGenie(代码精灵) ,如何从 0 到 1 快速构建一个…...

art-pi2 上手记录(二)
功能比较庞杂,写得不好,抛砖引玉 预备知识 stm32 默认从主闪存0x08000000启动 art-pi2的psram 映射0x90000000 art-pi2的8线ospi flash 映射0x70000000 stm32h7比较灵活,通过修改选项字节,可以实现从 0x0000 0000 到 0x3FFF 0…...

数据库SQLite基础
SQLite的存储结构 --->B树 大型数据库 :Oracle 中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 小型数据库 : MySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据) 一、SQLite基础 SQLite的源代码…...

1.3 古典概型和几何概型
文章目录 古典概型模型(等可能模型)几何概型 古典概型模型(等可能模型) 两个条件: 1) 有限个样本点 2) 等可能性 例题: 设有n个人,每个人都等可能地被分配到N个房间中的任一间(n≤N), 求下列事件的概率: (1)某指定的n间房…...

html-pre标签
我们都知道在常见标签里面的文字的格式是不会显示的,比如你打了多个空格,但却不会显示,而pre标签会显示。 主要特点: 保留空格和换行:在 <pre> 标签内,HTML 会保留所有的空格、换行符和制表符等格式…...

【WPF】WPF 项目实战:用ObservableCollection构建一个可增删、排序的管理界面(含源码)
💡WPF 项目实战:构建一个可增删、排序的光源类型管理界面(含源码) 在实际的图像处理项目中,我们经常需要对“光源类型”进行筛选或管理。今天我们来一步步构建一个实用的 WPF 界面,实现以下功能࿱…...

MCU_IO驱动LED
注意事项: 1、亮度要求较高的情况下,不能由IO直接驱动LED MCU_IO引脚输出的电压和电流较弱,如果对光的亮度有要求的话,需要使用三极管来驱动。 MCU_IO的电压一般为3.3V或者5V,输出电流一般10mA-25mA。 2、不同颜色…...

上门预约行业技术方案全解析:小程序、App还是H5?如何选择?
上门按摩行业这几年确实火,但千万别以为随便买个系统、招几个技师就能赚钱。作为一家深耕10年软件开发的公司,我们做了四五年上门按摩系统,见过太多人头脑一热冲进来,结果血本无归。 如果你真的想做上门按摩,先想清楚这…...
Java 集合面试题 PDF 及常见考点解析与备考指南
为了帮助你更好地学习Java集合相关知识,我将围绕Java集合面试题展开,介绍常见的技术方案及应用实例。这些内容涵盖了集合框架的基本概念、常见集合类的特点与使用场景,以及在实际开发中可能遇到的问题及解决方案。 Java集合面试题࿱…...

Java 大视界 -- 基于 Java 的大数据分布式计算在蛋白质组学数据分析中的加速与优化(255)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
如何通过外网访问内网?哪个方案比较好用?跨网远程连接网络知识早知道
广域网(英语:Wide Area Network,缩写为 WAN),又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。 局域网(LAN),全称为Local Area Network,指在较小的地理区域内,通…...

Vue.js教学第十八章:Vue 与后端交互(二):Axios 拦截器与高级应用
Vue 与后端交互(二):Axios 拦截器与高级应用 在上一篇文章中,我们学习了 Axios 的基本用法,包括如何发送不同类型的 HTTP 请求以及基本的配置选项。本文将深入剖析 Axios 的拦截器功能,探讨请求拦截器和响应拦截器的作用、配置方法和应用场景,通过实例展示如何利用拦截…...
C#中datagridview单元格value为{}大括号
使用数据库查询结果绑定datagridview数据源后,在对单元格的值进行处理的过程中出现报错,包括直接多cell.value.ToString()也报错,调试发现该单元格Value为“{}”,与null或""对比判断都没有结果,可使用Conver…...
46、web实验-遍历数据与页面bug修改
46、web实验-遍历数据与页面bug修改 在Web开发中,遍历数据和修改页面bug是常见的任务。以下是关于这两个主题的讲解: ### 一、遍历数据 **目的**:在页面上动态展示数据,例如用户列表、商品信息等。 **常用方法**: ####…...
华为OD机试_2025 B卷_数组去重和排序(Python,100分)(附详细解题思路)
题目描述 给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。 输入描述 一个数组 输出描述 去重排序后的数组 用例 输入1,3,…...

云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep)
云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep) 目录 云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep)1.which找到命令所对应的程序…...
gh hugging face使用
install sudo dpkg -i gh_2.74.0_linux_amd64.deb gh auth login gh auth login ? Where do you use GitHub? GitHub.com ? What is your preferred protocol for Git operations on this host? HTTPS ? Authenticate Git with your GitHub credentials? Yes ? How wo…...
SQL Server全局搜索:在整个数据库中查找特定值的高效方法
SQL Server全局搜索:在整个数据库中查找特定值的高效方法 一、需求背景:为什么需要数据库全局搜索? 在数据库管理和开发过程中,我们经常会遇到这样的场景: 只记得某个数据值,但忘记了它所在的表或列需要…...

JVM 内存溢出 详解
内存溢出 内存溢出指的是内存中某一块区域的使用量超过了允许使用的最大值,从而使用内存时因空间不足而失败,虚拟机一般会抛出指定的错误。 在Java虚拟机中,只有程序计数器不会出现内存溢出的情况,因为每个线程的程序计数器只保…...
Qt 5.12 上读取 .xlsx 文件(Windows 平台)
推荐最优方案:使用 QXlsx 库 QXlsx 是一个基于 Qt 的开源库,专门用于读写 .xlsx 文件,适用于 Qt 5.12,且无需依赖 Microsoft Excel 或 COM 对象。以下是其优势与实现步骤: 优势 跨平台:QXlsx 不依赖 Mic…...

虚拟机CentOS 7 网络连接显示“以太网(ens33,被拔出)“、有线已拔出、CentOS7不显示网络图标
文章目录 一、问题描述二、解决方法1、查看网络连接方式2、开启相关服务3、确认虚拟机网络连接 一、问题描述 问题描述:在VmWare中安装CentOS7, 启动后界面不显示网络的图标。 在GONE桌面—》设置中找到网络设置,发现显示线缆已拔出。 二、解决方法 …...

Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(六):图片上传交互功能
在 《Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(五)》 中,完成了语音交互功能的优化。本文作为该系列教程的第六篇,将聚焦于图片上传功能的开发。通过集成图片上传与预览能力,我们将进一步完善 AI…...

传统的将自然语言转化为嵌入向量的核心机制是:,将离散的语言符号转化为连续的语义向量,其核心依赖“上下文决定语义”的假设和神经网络的特征提取能力。
传统的将自然语言转化为嵌入向量的核心机制是:,将离散的语言符号转化为连续的语义向量,其核心依赖“上下文决定语义”的假设和神经网络的特征提取能力。 传统的将自然语言转化为嵌入向量(Word Embedding)的核心机制是分布式语义假设(Distributional Semantics Hypothesis…...
【前端】每日一道面试题6:解释Promise.any和Promise.allSettled的使用场景及区别。
Promise.any() 和 Promise.allSettled() 是 JavaScript 中用于处理异步操作的两种不同策略的 Promise 组合器,它们的核心区别在于逻辑目标与结果处理方式: 1. Promise.any() 使用场景: 需要获取 首个成功结果(类似竞速成功优先&…...
wordpress+woocommerce电商平台搭建方案的优势分析
以下是WordPress WooCommerce电商平台搭建方案的优势分析: 技术架构与功能扩展优势 强大的插件生态系统:WordPress拥有超过58000个插件,WooCommerce作为其中最受欢迎的电商插件,提供了丰富的功能扩展选项,如支持超过…...

玄机-日志分析-IIS日志分析
1.phpstudy-2018站点日志.(.log文件)所在路径,提供绝对路径 2.系统web日志中状态码为200请求的数量是多少 3.系统web日志中出现了多少种请求方法 4.存在文件上传漏洞的路径是什么(flag{/xxxxx/xxxxx/xxxxxx.xxx} 5.攻击者上传并且利用成功的webshell的文件名是什…...
IDEA:配置 Git 需要完成 Git 路径设置、账号认证以及仓库关联三个主要步骤
一、验证 Git 是否已安装 检查 Git 版本(Windows/Linux/Mac): 打开终端 / 命令提示符,输入: git --version若未安装,下载并安装 Git 二、在 IDEA 中配置 Git 路径 打开设置: Windows/Linux&a…...
PHP 复制商品扩展实操:轻松切换一号通、99api ,实现商品复制功能
目前已有一号通、99api复制商品扩展 复制商品扩展入口 namespace crmeb\services\copyproduct;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\facade\Config; use think\Container;/*** Class Product* package crmeb\services\copyp…...