虚拟机下如何使用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;它通过将网页中的文本内容转换为特殊的字体格式来防止爬虫程序直接获取和解析文本信息。字体反爬的原理是将常规的字符映射到特殊的字…

Linux C++ 040-STL之算术生成算法

Linux C 040-STL之算术生成算法 本节关键字&#xff1a;Linux、C、算术生成算法 相关库函数&#xff1a;accumulate、fill accumulate() 功能描述&#xff1a;计算区间内&#xff0c;容器元素累计总和 函数原型&#xff1a; accumulate(iterator beg, iterator end, value)…

【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…

TensorFlow学习之:高级应用和扩展

生成对抗网络&#xff1a;了解GAN的基本原理&#xff0c;使用TensorFlow实现简单的GAN 生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GAN&#xff09;由两部分组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discrimin…

【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驱动…

CuraEngine(3)打印核心函数addLinesByOptimizer源码阅读

LayerPlan::addLinesByOptimizer的函数&#xff0c;它的主要功能是在给定的多边形集合&#xff08;polygons&#xff09;中按照最优顺序添加每个线条Line。函数使用了优化器类&#xff08;LineOrderOptimizer&#xff09;来对多边形进行排序&#xff0c;以便得到最优顺序。以下…

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

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

如何杜绝工厂产线人员的误操作?

工厂产线操作人员大部分教育程度不太高&#xff0c;在这里没有任何歧视的意思&#xff0c;工作中出现误操作的可能性比较大&#xff0c;在推行自动化过程中常常出现的问题&#xff0c;是软件开发人员所想不到的&#xff1b;单纯想利用软件规避所有的问题不太现实。 要杜绝工厂…

电磁场公式

矢量分析 梯度和方向倒数 标量场 φ \varphi φ 的梯度为 g r a d φ ∇ φ e x ⃗ ∂ φ ∂ x e y ⃗ ∂ φ ∂ y e z ⃗ ∂ φ ∂ z grad\varphi\nabla \varphi\vec{e_x}\frac{\partial \varphi}{\partial x}\vec{e_y}\frac{\partial \varphi}{\partial y}\vec{e_z}\f…

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、…

MySQL数据库——13.ORDER BY(排序) 语句

在 MySQL 中 ORDER BY 语句用于对查询结果进行排序。可以根据一个或多个列的值对结果集进行排序,可以指定升序(ASC)或降序(DESC)排序。 SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...; 在这个语法中,SELECT 查…

【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创建一个接口并对其进行注释。它具有可…