虚拟机下如何使用Docker(完整版)

Docker详细介绍:

Docker 是一款开源的应用容器引擎,由Docker公司最初开发并在2013年发布。Docker的核心理念源自于操作系统级别的虚拟化技术,尤其是Linux上的容器技术(如LXC),它为开发人员和系统管理员提供了一种标准化、轻量级的方式来打包、分发和运行应用程序及其依赖环境。

**Docker的三大核心概念:**

1. **镜像(Images)**:
   - Docker镜像是构建容器的基础,是一种只读模板。它可以看作是一个包含了运行应用程序所需的所有文件、依赖库和其他配置信息的文件系统层次结构。镜像不包含动态数据,且通常是基于先前镜像层叠加创建的,具有存储效率高、易于分发的特点。

2. **容器(Containers)**:
   - Docker容器是从镜像启动的运行实例,它是对操作系统资源的隔离和限制的虚拟化单元。容器之间互不影响,各自运行在一个独立的环境中,共享宿主机内核,但拥有自己的文件系统、CPU、内存、网络资源等,从而实现了轻量级的虚拟化效果。

3. **仓库(Registries)**:
   - Docker仓库是用来存储和分发Docker镜像的地方,其中最知名的是Docker Hub。用户可以上传自己的镜像,或者下载其他人分享的镜像。企业级场景下,也会搭建私有仓库以满足安全性和合规性需求。

**Docker的主要优势:**
- **便携性**:开发人员可以在本地创建包含应用及其全部依赖的镜像,确保这个镜像能在任何支持Docker的环境中一致地运行。
- **资源高效**:相比于传统的虚拟机,Docker容器不需要额外的Hypervisor开销,因此启动更快、占用资源更少。
- **一致性**:确保应用在开发、测试和生产环境间的一致性,简化部署流程,减少环境差异导致的问题。
- **隔离与安全性**:容器之间相互隔离,通过控制组(cgroups)和命名空间等机制确保资源管理和安全隔离。

**Docker生态工具**:
- `docker run`:用于启动容器的命令,可以从镜像创建并运行一个新容器。
- `docker-compose`:用于定义和运行多容器应用程序,通过YAML文件(docker-compose.yml)集中管理多个容器及其依赖关系和服务编排。
- Docker Swarm:原生的集群管理工具,用于在多台主机上部署容器化的应用作为单一的虚拟系统。

由于Docker带来的便利性和标准化,它极大地推动了微服务架构的发展,成为现代云计算和持续集成/持续部署(CI/CD)工作流中的重要组成部分。

Docker使用教程:

        sudo -i 提升权限

        Ubuntu: apt install docker.io

        Centos: yum install docker.io

ubuntu举例:

安装成功后输入 docker --version 查看版本  如果显示信息则代表安装成功

 

docker run hello-world

这个命令相当于从仓库拉取一个helloworld镜像并运行,也是docker经典的测试镜像。

成功。

接下来我们可以随便拉取一个镜像,这边选择centos7,大家也可以自行选择。

拉取成功

查看全部镜像

这就是我们刚刚拉取的hello-world和centos7镜像。接下来我们把它做成容器,这样才能供我们使用

相信大家看到这可能会疑惑这些-it -d 的意思。以下是解释

-d 或 --detach:后台运行容器,并打印容器ID。容器将在后台运行,而非直接进入容器的命令行。-i 或 --interactive:使容器的标准输入保持打开,通常与 -t 结合使用,允许用户与容器的命令行进行交互。-t 或 --tty:为容器分配一个伪TTY,为容器分配一个终端,适合运行需要终端交互的命令行应用。--name:指定容器的名称,如果不指定,Docker会随机生成一个名称。-p 或 --publish:端口映射,格式为 <主机端口>:<容器端口>,将容器内部的服务端口暴露给主机。-v 或 --volume:数据卷挂载,格式为 <主机路径>:<容器路径>,用于将主机目录或文件映射到容器内。-e 或 --env:设置环境变量,格式为 <环境变量名>=<值>,用来向容器传递环境变量。--restart:设置容器重启策略,如 always、unless-stopped、on-failure[:max-retries] 等,决定当容器停止或退出时如何自动重启容器。-w 或 --workdir:设置容器内部的工作目录。--network:指定容器的网络模式,可以是预创建的网络或默认网络。--rm:容器退出后自动删除容器文件系统和网络配置。-u 或 --user:指定运行容器的用户或UID。<image>:必须参数,指定要运行的镜像名称。[command]:容器启动时执行的命令和参数,如果不指定,则使用镜像的默认ENTRYPOINT和CMD。--privileged=true:它用于赋予容器更多的权限。当设置为 --privileged=true(或者简写为 -privileged)时,容器内的进程将获得几乎与宿主机相同的访问权限,包括但不限于:所有设备的访问:容器可以访问宿主机的所有设备,比如硬件设备、内核模块等。CAP_SYS_ADMIN能力集:容器可以获得完整的Linux能力集,允许对系统进行高级操作,如修改网络接口、挂载文件系统、改变系统时间等。安全设定绕过:容器可以不受seccomp、AppArmor等安全机制的限制。其他内核资源完全控制:包括内核命名空间、cgroups等系统的完整控制权。

创建成功

进入容器

接下来我们就可以在容器里尽情释放才华,作者才华不够,就写一个txt文件好了。。。

接下来就是docker的很方便的一个地方,移植性。

退出容器

此时我们要进行的是打包容器,如果是平时我们的使用我们可以选择commit容器,提交成一个镜像,然后把镜像save成tar文件,但是注意,如果是公用考虑产品以后会在docker上迭代更新的话我们可以采用export,因为如果一直commit save的话最后的容器的大小可能会越来越大!这个就涉及到docker的一些底层原因,如果有小伙伴愿意深究可以点下方链接。

docker容器commit之后变得非常大的原因及解决办法_docker commit提交后镜像更大了-CSDN博客

转载于:CrystalheartLi

commit save 流程:

语法:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • -a :提交的镜像作者;

  • -c :使用Dockerfile指令来创建镜像;

  • -m :提交时的说明文字;

  • -p :在commit时,将容器暂停。

commit save方法:

        docker commit -a "bbxwg" centos7 mycentos7:1.0

save 

导出成功

export 方法:

大家是否会疑惑这两个镜像有何不同呢?如果说是正常使用的话没什么不同

  • save操作镜像,是保存一个完整的镜像,包含分层系统统一打包;
  • export操作容器,是导出容器当前的操作系统,不包含分层系统,仅包含当前系统中的状态。
  • save保存的是镜像(image),export保存的是容器(container)。

接下来就是导入环节。

我们可以换个虚拟机,如果嫌麻烦的话可以直接在本机操作。

注意:我们用save保存的镜像也就是img.tar我们需要用load下载,而export的镜像我们需要用import下载,否则无法下载成功!!

docker load -i img.tar  

docker import img2.tar

这样他们就会变成两个镜像,我们可以把镜像做成容器,直接使用。

首先我们删除容器和镜像

完成

这两个都一样其实,接下来创建并打开容器

至此,流程结束。

希望可以帮助到大家~

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

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

相关文章

字体反爬积累知识

目录 一、什么是字体反扒 二、Unicode编码 三、利用font包获取映射关系 一、什么是字体反扒 字体反爬是一种常见的反爬虫技术&#xff0c;它通过将网页中的文本内容转换为特殊的字体格式来防止爬虫程序直接获取和解析文本信息。字体反爬的原理是将常规的字符映射到特殊的字…

【Web】Dest0g3 520迎新赛 题解(全)

目录 phpdest EasyPHP SimpleRCE funny_upload EasySSTI middle PharPOP ezip NodeSoEasy Really Easy SQL&easysql EzSerial ljctr phpdest 尝试打pearcmd&#xff0c;但似乎没有写文件的权限 ?config-create/&file/usr/local/lib/php/pearcmd.php&a…

STM32H7通用定时器计数功能的使用

目录 概述 1 STM32定时器介绍 1.1 认识通用定时器 1.2 通用定时器的特征 1.3 递增计数模式 1.4 时钟选择 2 STM32Cube配置定时器时钟 2.1 配置定时器参数 2.2 配置定时器时钟 3 STM32H7定时器使用 3.1 认识定时器的数据结构 3.2 计数功能实现 4 测试案例 4.1 代码…

2024蓝桥杯每日一题(最大公约数)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;公约数 试题二&#xff1a;最大公约数 试题三&#xff1a;等差数列 试题四&#xff1a;最大比例 试题五&#xff1a;Hankson的趣味题 试题一&#xff1a;公约数 【题目描述】 …

小红书搜索团队提出新解码策略,降低大模型推理成本

如何让大语言模型&#xff08;LLMs&#xff09;“智能涌现”&#xff1f;关键技术之一是思维链&#xff08;Chain of Thought&#xff0c;CoT&#xff09;&#xff0c;它通过引导大模型&#xff0c;一步一步模拟人类思考过程&#xff0c;可有效增强大模型的逻辑推理能力。 而自…

redis7 源码调试 服务端处理客户端./redis-cli连接 指令执行过程

redis7 源码调试 服务端处理客户端./redis-cli连接 指令执行过程 ##redis-cli客户端发起 ./redis-cli 客户端连接 指令 ##redis网络请求 1、AE_READABLE事件 2、客户端fd 3、创建文件事件 4、添加客户端cfd读写事件 5、处理读事件AE_READABLE 6、回调函数处理连接请求 rea…

【Phytium】飞腾D2000 UEFI/EDK2 适配 RTC(IIC SD3077)

文章目录 0. env1. 软件2. 硬件 10. 需求1. 硬件2. 软件 20. DatasheetCPURTC 30. 调试步骤1. 硬件环境搭建2. UEFI 开发环境搭建3. 修改步骤1. UEFI 中使能RTC驱动、配置RTC信息等1.1 使能RTC驱动1.2 修改RTC对应的IIC配置信息1.3 解决驱动冲突1.4 验证波形 2. 修改对应RTC驱动…

【二分查找】Leetcode 74. 搜索二维矩阵【中等】

搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c…

LeetCode 1.两数之和(HashMap.containsKey()、.get、.put操作)

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

深入掌握k8s核心概念--Pod(二)

详解Pod的配置管理与调度特性等剖析 Kubernetes 中 Pod 的配置管理&#xff08;ConfigMap&#xff09;、调度策略、回滚与扩缩容详解一、Pod 配置管理&#xff1a;ConfigMap创建 ConfigMap 示例使用 ConfigMap 的 Pod 示例 二、玩转 Pod 调度&#xff1a;Kubernetes 高级调度策…

1 GBDT:梯度提升决策树

1 前言 前面简单梳理的基本的决策树算法&#xff0c;那么如何更好的使用这个基础算法模型去优化我们的结果是本节要探索的主要内容。 梯度提升决策树&#xff08;Gradient Boosting Decision Trees&#xff09;是一种集成学习方法&#xff0c;通常用于解决回归和分类问题。它通…

DC/DC电源模块直流升压变换器电压控制输出5V12V24V转0-50V80V110V150V180V200V250V300V500V800V1000V

特点 效率高达 75%以上1*2英寸标准封装单电压输出可直接焊在PCB 上工作温度: -40℃~75℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好电压控制输出,输出电压随控制电压线性变化 应用 GRB 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、…

【ElasticSearch】安装

1.官网寻找合适版本下载 这里我选择的是8.11.1 2.解压并启动 然后在浏览器输入http://localhost:9200/&#xff0c;判断是否启动成功 如下所示&#xff0c;则表示启动成功 安装过程中遇到过几个bug&#xff0c;记录在这篇文章中 【ElasticSearch】安装&#xff08;bug篇&am…

六、OpenFeign服务接口调用

一、提问 已经有loadbalancer为什么还要学习OpenFeign? 两个都有道理的话&#xff0c;日常用那个&#xff1f; 二、是什么 OpenFeign是什么 官网翻译 Feign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用Feign创建一个接口并对其进行注释。它具有可…

一键生成绘画作品,国内提供的7款AI绘画软件推荐

随着人工智能的迅猛发展&#xff0c;给我们的工作和兴趣带来了极大的便利。尤其是在绘画领域&#xff0c;随着越来越多的AI绘画工具的问世&#xff0c;我们能够以惊人的速度创作出精美的插图和照片。因此&#xff0c;本文将为大家介绍7款备受推崇的AI绘画软件~ 1.爱制作AI 爱制…

连连看游戏页面网站源码,直接使用

可以上传自己喜欢的图片 游戏页面 通关页面 源码免费下载地址抄笔记 (chaobiji.cn)

Java面试题:2024面试全攻略+BTA内部密卷 视频教程+springboot

基础篇 1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 阿里内部资料 基本类型 大小&#xff08;字节&#xff09; 默认值 封装类 6、Java自动装箱与拆箱 装箱就是…

ChatGPT 可以预测未来吗?

推荐 4月13日的一篇有趣的 paper&#xff0c;特来分享。 &#x1f449; 当前的大型语言模型&#xff08;LLMs&#xff09;具有强大的数据合成和推理能力&#xff0c;但它们在直接预测尚未发生事件的准确性上常常受到限制。传统的预测方法依赖于直接询问模型关于未来的问题。 …

算法思想总结:链表

一、链表的常见技巧总结 二、两数相加 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {//利用t来存进位信息int t0;ListNode*newheadnew ListNode(0);//创建一个哨兵节点&#xff0c;方便尾插List…

现在新开两融账户融资利率最低可以多少?5%~4.5%

两融是融资和融券的简称&#xff0c;是一种信用交易的方式&#xff0c;可以让投资者在股票市场上放大收益&#xff0c;也放大风险。融资是指投资者向证券公司借入资金&#xff0c;用于买入股票或其他证券&#xff0c;期待价格上涨后卖出&#xff0c;赚取差价&#xff0c;并在约…