Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

1. Docker 简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,每个容器内运行一个应用,不同的容器相互隔离,容器之间不会有任何接口(类似 iPhone 的 app),容器之间也可以建立通信机制。更重要的是容器性能开销极低。容器的创建和停止都十分快速,容器自身对资源的需求也十分有限。

Docker 引擎的基础是 Linux 容器(Linux Containers, LXC)技术。

2. Docker 容器与虚拟机比较

Docker 与虚拟机比较

Docker 与虚拟机对比

3. Docker 和常见的虚拟机的差异

Docker 与虚拟机不同之处

4. Docker 基础概念

4.1 Docker 镜像

Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向 Docker 引擎的只读的模板。包含了文件系统。

​例如:一个镜像可以只包含一个完整的 Ubuntu 操作系统环境,可以把它称为一个 Ubuntu 镜像。镜像里面仅安装了 Apache 应用程序(或用户需要的其他软件)。可以把它称为一个 Apache 镜像。

​镜像是创建 Docker 容器的基础。通过版本管理和增量的文件系统,Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。

4.2 Docker 容器

Docker容器(Container)类似于一个轻量级的沙箱,Docker 利用容器来运行和隔离应用。

​容器是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。

​可以把容器看做是一个简易版的 Linux 系统环境 (包括 root 用户权限、进程空间、用户空间和网络空间等) 以及运行在其中的应用程序打包而成的盒子。

镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

4.3 Docker 仓库

Docker仓库(Repository)类似于代码仓库,它是 Docker 集中存放镜像文件的场所。

有时候会看到有资料将 Docker 仓库和仓库注册服务器 (Registry) 混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签 (tag) 来进行区分。

例如存放 Ubuntu 操作系统镜像的仓库称为 Ubuntu 仓库,其中可能包括 14.04、12.04 等不同版本的镜像。仓库注册服务器的示例如下图所示。

注册服务器

根据所存储的镜像公开分享与否,Docker 仓库可以分为公开仓库 (Public) 和私有仓库 (Private) 两种形式。

​目前,最大的公开仓库是官方提供的 Docker Hub,其中存放了数量庞大的镜像供用户下载。国内不少云服务提供商 (如时速云、阿里云等) 也提供了仓库的本地源,可以提供稳定的国内访问。

​ 当然,用户如果不希望公开分享自己的镜像文件,Docker 也支持用户在本地网络内创建一个只能自己访问的私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上 pull 下来就可以了。

4.4 镜像、容器、仓库的区别

  1. docker 镜像(Images)
    一个只读模板,可以用来创建容器,一个镜像可以创建多个容器;
    Docker 提供了一个很简单的机制来创建和更新现有的镜像,甚至可以直接从其他人那里获取做好的镜像直接使用;
    可以理解为 Java 中的类;
  2. docker 容器(Container)
    容器是从镜像创建的运行实例,也就是镜像启动后的一个实例称为容器,是独立运行的一个或一组应用;
    Docker 利用容器来运行应用,他可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台;
    可以把容器看做是一个简易版的 Linux(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序;
    可以理解为 Java 中通过类创建的实例;
  3. docker 仓库(Resoisitory)
    仓库是集中存放镜像文件的场所,类似 git 代码仓库等;
    仓库(Respository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器一般存放多个仓库,每个仓库又有多个镜像,每个镜像又有不同的标签 tag;
    仓库分为公开仓库(public)和私有仓库(private)两种形式;
    最大的公开仓库是 Docker Hub,国内的公开仓库有阿里云等;
    可以在本地网络创建一个私有仓库;
    当创建好自己的镜像后,可以通过 push 命令把它上传到公开或私有仓库;
    仓库的概念类似 Git,仓库注册服务器可以理解为 GitHub 这种托管服务;
  4. docker 主机(Host)
    一个物理或虚拟的机器用来执行 Docker 守护进程和容器。
  5. docker客户端(Client)
    客户端通过命令行或其他工具使用 Docker。

5. Docker 的技术实现

Docker 的实现,主要归结于三大技术:

  • 命名空间 ( Namespaces )
  • 控制组 ( Control Groups )
  • 联合文件系统 ( Union File System )

5.1 Namespace

命名空间是 Linux 核心在 2.4 版本后逐渐引入的一项用于运行隔离的模块。

相信很多开发者在不同的编程语言中都见过命名空间的概念,在这些编程语言中,命名空间的主要目的就是为了集合相同模块的类,区分不同模块间的同名类。

同样的道理,Linux 内核的命名空间,就是能够将计算机资源进行切割划分,形成各自独立的空间。

就实现而言,Linux Namespaces 可以分为很多具体的子系统,如 User Namespace、Net Namespace、PID Namespace、Mount Namespace 等等。

这里我们以进程为例,通过 PID Namespace,我们可以造就一个独立的进程运行空间,在其中进程的编号又会从 1 开始。在这个空间中运行的进程,完全感知不到外界系统中的其他进程或是其他进程命名空间中运行的进程。

docker 进程组
利用 PID Namespace,Docker 就实现了容器中隔离程序运行中进程隔离这一目标。

Namespace 它可以创建出独立的文件系统、主机名、进程号、网络等资源空间,相当于给进程盖了一间小板房,这样就实现了系统全局资源和进程局部资源的隔离。

5.2 Control Groups

资源控制组 ( 常缩写为 CGroups ) 是 Linux 内核在 2.6 版本后逐渐引入的一项对计算机资源控制的模块。

顾名思义,资源控制组的作用就是控制计算机资源的。与以隔离进程、网络、文件系统等虚拟资源为目的 Namespace 不同,CGroups 主要做的是硬件资源的隔离。

之前我们提到了,虚拟化除了制造出虚拟的环境隔离同一物理平台运行的不同程序之外,另一大作用就是控制硬件资源的分配,CGroups 的使用正是为了这样的目的。

共享资源
需要再强调一次的是,CGroups 除了资源的隔离,还有资源分配这个关键性的作用。通过 CGroups,我们可以指定任意一个隔离环境对任意资源的占用值或占用率,这对于很多分布式使用场景来说是非常有用的功能。

例如,我们在服务器上部署一个业务服务和一个健康监控服务。通常情况下,监控服务只会占用很少的计算机资源,但我们无法保证其不会因为一些逻辑问题产生 Bug 进而过分消耗计算机资源。而它申请的计算机资源越多,意味着业务服务所能使用的计算机资源也就越少,最后甚至可能造成物理服务器的崩溃。

上述的问题在没有隔离实现的普通运行环境下是比较难解决的,因为所有不从系统层面出发的限制程序资源使用的方式都并不完全有效。由于 CGroups 实现于操作系统,而操作系统垄断着系统资源的分配,所以其完全能够限制隔离环境下应用的资源占有量。

5.3 Union File System

联合文件系统 ( Union File System ) 是一种能够同时挂载不同实际文件或文件夹到同一目录,形成一种联合文件结构的文件系统。联合文件系统本身与虚拟化并无太大的关系,但 Docker 却创新的将其引入到容器实现中,用它解决虚拟环境对文件系统占用过量,实现虚拟环境快速启停等问题。

在 Docker 中,提供了一种对 UnionFS 的改进实现,也就是 AUFS ( Advanced Union File System )。

文件系统
AUFS 将文件的更新挂载到老的文件之上,而不去修改那些不更新的内容,这就意味着即使虚拟的文件系统被反复修改,也能保证对真实文件系统的空间占用保持一个较低水平。

也许这个表述还不够形象,那么我们来用 Git 进行比较,会让大家会更容易理解。大家知道,我们在 Git 中每进行一次提交,Git 并不是将我们所有的内容打包成一个版本,而只是将修改的部分进行记录,这样即使我们提交很多次后,代码库的空间占用也不会倍数增加。

同样的,通过 AUFS,Docker 大幅减少了虚拟文件系统对物理存储空间的占用。由此,Docker 也开创出了虚拟化领域很多新的轻量级解决方案,这在之后的小节里我们会提到。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 使用 docker 容器 aria2-pro 下载 m3u8 文件的步骤如下: 1. 首先,安装 docker。如果你还没有安装 docker,请参考官方文档或者网上教程进行安装。 2. 下载 aria2-pro 镜像。在命令行中输入以下命令: ``` docker pull aria2-pro ``` 3. 启动 aria2-pro 容器。输入以下命令: ``` docker run -d --name aria2-pro -p 6800:6800 aria2-pro ``` 4. 使用 aria2c 命令下载 m3u8 文件。输入以下命令: ``` aria2c -c -s10 -x10 -j10 -i <m3u8文件的URL> ``` 其中,`-c` 参数表示继续下载,`-s10 -x10 -j10` 参数表示使用 10 个线程下载,`-i` 参数表示输入 m3u8 文件的 URL。 注意:在使用 aria2c 命令之前,需要先进入 aria2-pro 容器内。输入以下命令进入容器内: ``` docker exec -it aria2-pro /bin/bash ``` ### 回答2: 使用Docker容器下载m3u8文件的步骤如下: 1. 首先,在您的主机上安装Docker。可以通过在终端输入以下命令来安装Docker: ``` curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh ``` 2. 在Docker Hub上寻找aria2-pro的Docker镜像。可以使用以下命令来搜索并下载镜像: ``` docker search aria2-pro docker pull <镜像名称> ``` 3. 创建一个新的Docker容器。可以使用以下命令来创建并运行一个容器: ``` docker run -d -p <本地端口>:<容器端口> --name <容器名称> <镜像名称> ``` 4. 进入到新创建的Docker容器内部。可以使用以下命令进入容器终端: ``` docker exec -it <容器名称> /bin/bash ``` 5. 在容器内部安装aria2-pro依赖项。可以使用以下命令来安装所需的工具和库: ``` apt-get update apt-get install -y aria2 ffmpeg ``` 6. 使用aria2-pro下载m3u8文件。可以使用以下命令来启动aria2-pro下载m3u8文件: ``` aria2c -c -s10 -x10 -k1M --follow-torrent=false -m0 -o <输出文件名> <m3u8文件链接> ``` 7. 将下载的文件从容器复制到主机上。可以使用以下命令将文件从Docker容器复制到主机上: ``` docker cp <容器名称>:<容器内文件路径> <目标主机路径> ``` 8. 在主机上检查下载的文件。您可以在主机上的目标路径下查找已下载的文件。 通过遵循以上步骤,您就可以使用Docker容器aria2-pro来下载m3u8文件。请记住,需要根据具体情况进行相应的调整,例如替换命令中的<本地端口>、<容器端口>、<容器名称>、<镜像名称>、<输出文件名>、<m3u8文件链接>、<目标主机路径>等。 ### 回答3: 使用Docker容器aria2-pro下载m3u8文件非常方便。以下是详细步骤: 1. 首先,确保已在计算机上安装了Docker。在命令行中输入 "docker --version" 来验证是否已安装成功。 2. 打开终端或命令行,并输入以下命令来拉取aria2-pro Docker镜像: ``` docker pull p3terx/aria2-pro ``` 3. 下载m3u8文件并复制其链接。 4. 创建一个下载目录,并在该目录下创建一个名为 "aria2" 的文件夹,用来存储aria2的配置文件。 ``` mkdir -p /path/to/download/directory/aria2 ``` 5. 在下载目录中创建一个名为 "downloads" 的文件夹,用来存储下载的文件。 ``` mkdir -p /path/to/download/directory/downloads ``` 6. 创建一个名为 "aria2.conf" 的文本文件,用来配置aria2的参数。将以下内容复制到 "aria2.conf" 文件中: ``` dir=/path/to/download/directory/downloads rpc-listen-all=true continue=true input-file=/path/to/download/directory/aria2/aria2.session save-session=/path/to/download/directory/aria2/aria2.session save-session-interval=60 enable-rpc=true rpc-listen-port=6800 rpc-secret=your_password max-concurrent-downloads=3 max-connection-per-server=5 min-split-size=10M split=10 ``` 请注意,将"/path/to/download/directory" 替换为实际的下载目录路径,并为 "rpc-secret" 设置一个密码。 7. 启动aria2容器,并将下载目录和aria2配置文件挂载到容器中。 ``` docker run -d \ --name aria2-pro \ -p 6800:6800 \ -v /path/to/download/directory:/data \ -v /path/to/download/directory/aria2/aria2.conf:/etc/aria2.conf \ p3terx/aria2-pro ``` 请注意,将"/path/to/download/directory" 替换为实际的下载目录路径。 8. 打开Web浏览器,并输入 "http://localhost:6800" 来访问aria2的Web控制台。 9. 在Web控制台中,点击 "设置",在 "输入框URL" 中输入m3u8文件的链接,并点击 "开始" 开始下载。 10. 下载完成后,可以在"/path/to/download/directory/downloads" 目录中找到下载的文件。 这样就完成了使用Docker容器aria2-pro下载m3u8文件的过程。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值