Linux进阶 | 2万字总结最详细的Docker的安装、底层隔离机制和简单使用!建议收藏,持续更新❤

本文详细介绍了Docker的基础概念,包括Docker与VMware的区别、镜像、容器、仓库等,以及在Linux和Ubuntu上的安装教程。通过学习,读者将掌握Docker的安装和基本使用,了解其底层的命名空间、CGroups隔离机制。同时,文中提供了多个实战练习,帮助巩固所学知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 创作不易,来了的客官点点关注,收藏,订阅一键三连❤😜  


前言

运维之基础——Linux。我是一个即将毕业的大学生,超超。如果你也在学习Linux,不妨跟着萌新超超一起学习Linux,拿下Linux,一起加油,共同努力,拿到理想offer!


系列文章

Linux——详解系统监控和常用命令(top free dstat)

Linux——超超讲解SSH的原理与SSH的实现!建议收藏❤

Linux——万字总结用户与组的权限那些事儿!建议收藏!

Linux——万字总结用户与组相关知识!建议收藏!


总结

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。本期内容为Docker第一期,通过本期内容将会掌握docker的基本概念、底层隔离机制、如何在Linux和Ubuntu上安装docker以及docker的简单使用。


目录

前言

总结

Docker是什么

Docker与VMware

 Docker的基本概念

Image(镜像)

Container(容器)

Repository(仓库)

docker的常见文件

docker底层的隔离机制

namespace(命名空间)

kernel lxl

Control Groups

 容器的网络类型

Docker的安装

centos上的安装

Ubuntu上的安装

Docker的简单使用

docker进程的查看与关闭

docker常用命令

container网络链接模式创建

思考

练习

练习一:下载镜像

练习二:使用docker启动mysql

练习三:docker网络的练习


Docker是什么

参考链接:Docker详解链接

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

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

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

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。

注:

serverless:Serverless由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存储资源所记录。Serverless涵盖了很多技术,分为两类:FaaSFunction as a Service,函数即服务)和 BaaSBackend as a Service,后端即服务)。


Docker与VMware

Docker相比于传统虚拟化方式具有的优势和劣势:

  • docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动
  • docker 需要的资源更少, docker 在操作系统级别进行虚拟化, docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化
  • docker 更轻量, docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境, Docker 运行的镜像数远多于虚拟机数量,对系统的利用率非常高
  • 高可用和可恢复性: docker 对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制, VMware 可承诺虚拟机 99.999% 高可用,保证业务连续性
  • 快速创建、删除:虚拟化创建是分钟级别的, Docker 容器创建是秒级别的, Docker 的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间
  • 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。 Docker 在 Dockerfile 中记录了容器构建过程,可在集群中实现快速分发和快速部署
  • (缺点)与虚拟机相比, docker 隔离性更弱, docker 属于进程之间的隔离,虚拟机可实现系统级别隔离
  • (缺点)可管理性: docker 的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如 VMware vCenter 提供完备的虚拟机管理能力
  • (缺点)安全性: docker 的安全性也更弱。 Docker 的租户 root 和宿主机 root 等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户 root 权限和宿主机的 root 虚拟机权限是分离的,并且虚拟机利用如 Intel 的 VT-d 和 VT-x 的 ring-1 硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击

 Docker的基本概念

Docker 中包括三个基本的概念:镜像(image)、容器(container)、仓库(repository

从下图可以直观地看到 Docker 的架构:

Docker 使用 C/S 结构,即客户端/服务器体系结构。 Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。 Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 stock 或网络接口与远程 Docker 服务端进行通信。

这张图展示了 Docker 客户端、服务端和 Docker 仓库(即 Docker Hub 和 Docker Cloud ),默认情况下Docker 会在 Docker 中央仓库寻找镜像文件,这种利用仓库管理镜像的设计理念类似于 Git ,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库

Image(镜像)

Docker 镜像可以看作是一个特殊的文件系统(打包的文件),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像(Image)就是一堆只读层(read-only layer)的统一视角,也许这个定义有些难以理解。

Container(容器)

容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。(运行镜像的地方)

由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。

容器的三种状态:upcreatedexited

Repository(仓库)

Docker 仓库是集中存放镜像文件的场所。

仓库又可以分为两种形式public(公有仓库)private(私有仓库)

docker的常见文件

config.v2.json --> 存放容器的配置数据

json:javascript object notation,js对象简谱,是一种轻量级数据交换格式,格式用来描述数据

数据的形式:文本

数据的格式:key:value,结构清晰

非关系型数据、非结构化数据

/etc/resolv.conf --> 存放容器里的dns服务器的地址使用的是宿主机里的dns的配置

[root@docker etc]# cat resolv.conf

# Generated by NetworkManager

search localdomain

nameserver 192.168.232.2

/etc/hostname -->  存放主机名

[root@docker docker]# cat /etc/hostname

docker

/etc/hosts --> 对本机进行域名解析

[root@docker etc]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

/var/lib/docker/containers -->存放容器

[root@docker ~]# cd /var/lib/docker/containers/

[root@docker containers]# ls

1118734ea632e8537be012a61274c8d6ecd4027ba1a54a49db202463578e5663

2710b596777b80fc9755a43a4070494b6fb7d682a2fa895a91d690e63bfed04d

2c83a2d05e4ee8a885174e4b55bbe1ac1833df9aba82d86e824e44a43340e8e2

4cb9497e4b830a0eec6406d5be362adaf643982dc16a9cbcb68781b7d746bef2

58d99df640b7662f4ff625e7cde9d0e7f40250992f8fd1ad39bc48aeca162ddb

/var/lib/docker --> 存放docker里的文件


docker底层的隔离机制

namespace(命名空间)

Namespace是内核的一个功能,用来给进程隔离一系列资源(网络、文件系统、进程等)资源

kernel lxl

LXC-Linux Containers,LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。

LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。

Control Groups

Linux上的Docker Engine也依赖于另一种称为CGroup的技术。CGroups 最初叫Process Container,顾名思义就是将进程放到一个组里进行统一控制。后来改名叫Control Groups。CGroups 是 Control Groups 的缩写,它为资源管理提供了一个统一框架,可以把系统任务及其子任务整合到按资源等级划分的不同任务组内。并且对这些任务组实施不同的资源分配方案。CGroups可以限制、记录、隔离进程组所使用的物理资源(包括CPU、memory、I/O等)。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaochao️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值