Docker: 改变容器化世界的革命性技术

2023-11-13

目录

1.1什么是虚拟化

1.2什么是Docker

1.3容器与虚拟机的比较

1.4Docker组建

2、Docker安装

2.2设置ustc的镜像

2.3Docker的启动与停止

3、docker常用命令

3.1镜像

3.2容器相关命令


1.1什么是虚拟化

在计算机中,虚拟化(Vitualization)是一种资源管理技术,是将计算机的各种实体资源,比如服务器、网络、内存及存储等,予以抽象,转换后呈现出来,打破实体结构间的不可分割的障碍,使用户可以比原来的组态更好的方式来用用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或者物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(VIP)、桌面虚拟化、服务虚拟化、虚拟机等。

1.2什么是Docker

Docker是一个开源项目,诞生于2013年初,最初是doCloud公司内部的一个业余项目。它基于Google公司退出的Go语言实现的。项目后来加入了Linux基金会,遵循了Apache2.0协议。

 

为什么选择Docker

  • 更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件的存储速度,都是比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

  • 更快速的启动事件

传统的虚拟机技术启动应用服务往往虚拟需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级。甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间

  • 一致的运行环境

开发环境中一个常见的问题是环境的一致性问题,由于开发环境、测试环境、生产环境不一致,导致有些Bug并未在开发过程中被发现,而Docker的镜像提供了除了内核外完整的运行时环境,确保了应用运行环境的一致性,从而不会再出现[这段代码在我的机器上运行没有问题]这类的问题!

  • 持续交付和部署

对于开发和运维(DevOps)人员来说,最希望的就是一次创建或者配置,可以在任意地方正常运行。

使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像的构建,并且结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速的部署该镜像,甚至结合持续部署系统进行自动部署。

而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运维所需条件,帮助更好的生产环境部署该镜像。

  • 更轻松的迁移

    由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机还是虚拟机、公有云。私有云。甚至是笔记本,其运行结果是一致性的。因此用户可以很轻松的将在一个平台上运行的应用,迁移到另外一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况

  • 更轻松的维护和扩展

Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更加的容易,也使得应用的维护更新变得更加简单,基于基础镜像进一步扩展镜像也变得非常简单,此外,Docker团队各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境中使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

1.3容器与虚拟机的比较

下面的图片Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统的方式则是在硬件层面实现的。

与传统的虚拟机相比,Docker优势体现在启动速度快、占用体积小

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般为几十个

1.4Docker组建

1.4.1Docker服务器与客户端

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker也提供了一个命令行工具Docker以及一整套RESful API。亦可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到另外一台宿主机的远程Docker守护进程

1.4.2Docker镜像与容器

镜像是架构Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步的构建出来的:例如:

  • 添加一个文件;

  • 执行一个命令;

  • 打开一个窗口;

也可以将镜像当做容器的“源代码”。镜像体积很小,非常“便携”,抑郁分享、存储和更新。

Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。

和集装箱一样,Docker在执行上述操作时,并不会关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。

Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Refistry,然后下载到另一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中,像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。

1.4.3Registry(注册中心)

Docker用Registry来保存用户构建的镜像。Registry分为共有和私有两种。Docker公司运行公共的Refistry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并且保存自己的镜像(在Docker HUb 下载镜像巨慢,可以自己构建私有的Registry)。

2、Docker安装

Docker官方建议在ubuntu1中安装,因为Dock而是基于Ubuntu发布的,而且一般Docker出现问题Ubuntu是最先更新或者打补丁的,在很多版本的center os中是不支持更新最新的一些补丁包的。

1、yum包更新到最新

yum update 

2、安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemappper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2

3、设置yum源为阿里云

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安装docker

yum install -y docker-ce

5、查看是否安装成功

[root@centos7 ~]# docker -v
Docker version 24.0.2, build cb74dfc

2.2设置ustc的镜像

ustc是老牌的linux镜像服务提供者了,还在遥远的utuntu5.04版本的时候就在用,ustc的docker镜像加速器速度很快。ustc docker mirrror的优势之一就是不需要注册,是真正的公共服务。

http://lug.ustc.edu/wiki/mirrors/help/docker

编辑该文件

[root@centos7 ~]# mkdir -p /etc/docker/
[root@centos7 ~]# vim /etc/docker/daemon.json

在文件中输入如下内容

{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

2.3Docker的启动与停止

启动docker:

systemctl start docker

停止docker:

systemctl stop docker.socket 

查看docker运行状态

systemctl status docker

设置docker开机自启:

systemctl enable docker

3、docker常用命令

3.1镜像

查看镜像:

docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

搜索镜像:

docker search php

拉取镜像:

docker pull centos:7

删除镜像:

docker rmi 镜像id

3.2容器相关命令

3.2.1查看容器

查看正在运行的容器:

[root@centos7 ~]# docker ps

查看所有容器:

[root@centos7 ~]# docker ps -a

3.2.2创建与启动容器

创建容器命令

docker run

-i:表示运行容器

-t:表示容器启动后会进入其命令行,加入这两个参数后,容器创建爱你就能登录进去。即分配一个伪终端。

--name:为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者为映射到宿主机上的目录),可以使用多个v做多个目录或者文件映射。

注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上一个-d参数,则会创建一个守护式容器在后台运行(这样创建容器后就不会自动登录容器,如果只加-i,-t两个参数,创建后就会自动进入到容器中)。

-p:表示端口映射,前者是宿主主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

1、交互式方式创建容器

docker run -it --name=mycentos centos:7 /bin/bash

2、守护式方式创建容器

docker run -di --name=mycentos2 centos:7

登录容器:

docker exec  -it mycentos2 /bin/bash

停止容器:

docker stop f7f6b0dbd985

启动容器

docker start mycentos2
mycentos2
​

3.2.3容器的文件操作

将宿主机中的文件拷贝到容器中:

docker cp anaconda-ks.cfg mycentos2:/usr/local
Successfully copied 3.58kB to mycentos2:/usr/local

进入mycentos容器中进行查看:

docker exec  -it mycentos2 /bin/bash
​
ls
anaconda-post.log

将容器中的文件拷贝到宿主机中

docker cp mycentos2:/usr/local/anaconda-ks.cfg anaconda-ks2.cfg
Successfully copied 3.58kB to /root/anaconda-ks2.cfg

3.2.4目录挂载

创建一个新的容器:

[root@centos7 ~]# docker run  -di -v /usr/local/mydata/:/usr/local/mydata --name=mycentos3 centos:7
cd0247073e3ff747fd68ada87a26e432f77446b069bea84cbe94109f63a69182

在该目录下创建文件:

vim /usr/local/mydata/test
写入内容:abcddd

进入mycentos中查看:

docker exec  -it mycentos3 /bin/bash
cd /usr/local/mydata/
cat test
abcddd

3.2.5查看容器IP地址

查看容器的全部信息:

docker inspect mycentos3

查看指定信息:

docker rm cd0247073e3f
cd0247073e3f

删除某容器:

docker rm cd0247073e3f
cd0247073e3f
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker: 改变容器化世界的革命性技术 的相关文章

  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • docker-compose 将镜像推送到 aws ecr

    是否可以让 docker compose 构建镜像并将其推送到远程存储库 现在我做的是 docker compose 然后我做 docker compose config services 循环遍历名称重建图像名称和标签 然后执行 dock
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • leetcode分类刷题:滑动窗口(四、两个序列+窗口不定长类型)

    1 同样是给定两个序列 判断短序列在长序列中最短的覆盖连续子序列 那么此时的滑窗长度就大于等于短序列长度了 变为不定长的了 2 本文总结的题型短序列同样为滑动窗口 哈希表 matchKeys标记 覆盖的键数量 这里的覆盖含义恰好为上篇总结中
  • Qgis二次开发包下载及配置

    实习已经一个多月了 这周的任务需要用到qgis 所以首先需要编译并配置好这个库 自己尝试编译这个库 但是感觉很复杂 中间出的问题没能解决也就放弃了 还得找时间再试试 后来在网上找到了另外一个教程 其中提到可以利用Osgoe4W下载qgis二
  • 车牌识别-模板匹配-BP神经网络-卷积神经网络[深度学习]

    文章来源 http blog csdn net fighting dreamer article details 56285738 1 车牌识别的步骤 车牌定位 车牌分割 字符识别 正如上面所讲 车牌识别主要分为3个部分 其中第一部分车牌定
  • 微信小程序(十一)在wxml中使用自定义函数

    背景 我们有时候需要在wxml中使用一些运算 包括但不限于四则运算 三目运算等 我们如果想要使用自定义的一些方法 就需要使用wxs来实现了 下面代码简单介绍了列表中倒计时的实现方法 以及使用wxs把时间戳转换为年月日时分秒的方法 详见代码
  • uni-app 全局变量的几种实现方式

    公用模块 定义一个专用的模块 用来组织和管理这些全局的变量 在需要的页面引入 示例如下 在 uni app 项目根目录下创建 common 目录 然后在 common 目录下新建 helper js 用于定义公用的方法 复制代码const
  • 【ONNX】pytorch模型导出成ONNX格式:支持多参数与动态输入

    pytorch格式的模型在部署之前一般需要做格式转换 本文介绍了如何将pytorch格式的模型导出到ONNX格式的模型 ONNX Open Neural Network Exchange 格式是一种常用的开源神经网络格式 被较多推理引擎支持
  • 老司机都在用的浏览器,体积小功能齐全,直呼内行

    现在市面上的浏览器简直是多不胜数 虽然数量多 但是好用的并不多 尤其是某些大厂的浏览器 无用的功能越来越多 越来越臃肿 体积也越来越大 使用体验还不好 有时候甚至不如一些小众浏览器 今天给大家安利2款老司机都在用的手机浏览器 体积非常小 但
  • 刷脸支付对商家来说有着巨大的应用价值

    科技发展永不停止 一步一步改善着我们的生活 回顾支付方式的变化 从最初的以物易物到货币再到移动支付 一步步的发展都越来越便捷 而刷脸支付相比于扫码支付 省去了手机这个中间媒介 用人脸作为支付凭证 大大提升了付款效率 在现如今的科技下 可以毫
  • STM32F407移植FATFS文件系统(版本 R0.09b)支持长文件名和中文名称

    FatFs文件系统 默认是不支持长文件名和中文名称的 要想支持长文件名和中文名称 需要打开ffconf h文件进行配置 一 支持长文件名 FatFs文件系统 默认是不支持长文件名的 要想支持长文件名 需要打开ffconf h文件进行配置 找
  • linux下的vsftpd的db_load命令

    db load是linux下创建虚拟账户 选项 T允许应用程序能够将文本文件转译载入进数据库 由于我们之后是将虚拟用户的信息以文件方式存储在文件里的 为了让Vsftpd这个应用程序能够通过文本来载入用户数据 必须要使用这个选项 指定了选项
  • 第十六篇

    Ln Linux ln 英文全拼 link files 命令是一个非常重要命令 它的功能是为某一个文件在另外一个位置建立一个同步的链接 当我们需要在不同的目录 用到相同的文件时 我们不需要在每一个需要的目录下都放一个必须相同的文件 我们只要
  • 【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 文献结果 2 2 Matlab代码复现结果 3 参考文献 4 Matlab代码及文章
  • SQLServer帐号管理

    1 用户的创建 如图所示 右击 登录名 选中新建登录名 2 如何创建数据库用户 在数据库的下面 创建用户名 同时通过 浏览 按钮 关联想要授权的登录账号 3 给用户分配权限 注意 此处是给需要分配权限的数据库中的用户 进行安全对象的管理 例
  • 联想笔记本Ideapad300S-14ISK安装固态硬盘和win10

    1 拆机 把背面的螺丝钉拧开 拿个卡找个缝插进去转一圈就打开了 2 内存 先把电源排线拔掉 排线旁边有标识 和 内存条外面盖着一个金属壳 把四周的小固定扣压下去就能打开 内存条型号DDR3L 买了个DDR4才发现插不进去 3 固态硬盘 把机
  • visio使用技巧

    出处 blog作者 卡纳瓦罗 里面的东西主要是看了吕贤聪的 visio2003视频教程 后总结的一些技巧 还有平时应用visio时的一些心得 1 鼠标按住尺规的边缘往外拉 会拉出一条绘图辅助线 帮助绘图 精确定位 按del键就会消失 而且选
  • 多线程与同步代码块详解

    线程是程序执行的一条路径 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率 可以同时完成多项工作 多线程并发执行的实质就是CPU在做着高速的切换 多线程的应用场景 红蜘蛛同时共享屏幕给多个电脑 迅雷开启多条线程一起下载 QQ同时
  • 微芯I/O控制器瞄准工业与嵌入式运算应用

    微芯科技 Microchip Technology 日前发布SCH322X系列I O控制器新品 该系列产品基于工业及嵌入式开发工程师的需求而开发 功能丰富且具高灵活性 新一代I O控制器系列拥有尺寸更小的包装和更长的产品生命周期 可运用于更
  • caj转pdf

    https caj2pdf cn
  • 关于不同浏览器的内核与引擎--记录一下

    https www cnblogs com gdutbean archive 2012 02 21 2362003 html https www cnblogs com guanghe p 11719334 html js引擎介绍 几种JS
  • Docker: 改变容器化世界的革命性技术

    目录 1 1什么是虚拟化 1 2什么是Docker 1 3容器与虚拟机的比较 1 4Docker组建 2 Docker安装 2 2设置ustc的镜像 2 3Docker的启动与停止 3 docker常用命令 3 1镜像 3 2容器相关命令