Docker详解(入门必看)_运维@小兵的博客-程序员ITS301

技术标签: Docker  容器  linux  docker  


参考文章、视频
Docker官方文档
Docker中文文档
狂神说Docker
终于有人Docker讲清楚了,网工别再说你不懂了!

一、Docker概述

Docker 作为目前最流行的开源容器引擎,具有开箱即用、快速部署、资源隔离、可移植性强等特性,可以在短时间上手使用,实现容器化部署应用。

讲个故事

我需要盖一个房子,于是我搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。

结果,住了一段时间,心血来潮想搬到海边去。这时候按以往的办法,我只能去海边,再次搬石头、砍木头、画图纸、盖房子。

烦恼之际,跑来一个魔法师教会我一种魔法。这种魔法可以把我盖好的房子复制一份,做成「镜像」,放在我的背包里。

等我到了海边,就用这个「镜像」,复制一套房子,拎包入住。

是不是很神奇?对应到我们的项目中来,房子就是项目本身,镜像就是项目的复制,背包就是镜像仓库。

如果要动态扩容,从仓库中取出项目镜像,随便复制就可以了。Build once,Run anywhere!

容器技术的核心

  • Cgroups(Control Groups)-资源管理[限制使用的资源]
  • NameSpace-进程隔离(命名空间)
  • SELinux安全

什么是Docker

  • Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。2014年4月9日,Docker1.0发布
  • 基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
  • Docker是完整的一套容器管理系统
  • Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
  • 是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup、namespace、Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器
  • 早期版本基于LXC,从0.7以后开始去LXC,转为自行研发的libcontainer,从1.11版本开始,进一步演进为使用runC和containerd

Docker和传统虚拟化方式对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker体系结构

在这里插入图片描述
架构图
在这里插入图片描述

Docker特性

优点

  • 相比于传统的虚拟化技术,容器更加简洁高效
  • 开箱即用、快速部署、可移植性强、环境隔离
  • 容器使用共享公共库和程序
  • 随处运行:容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的。
  • 高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置 CPU 和内存的使用率,进而更好地利用服务器的计算资源。
  • 快速扩展:每个容器都可作为单独的进程予以运行,并且可以共享底层操作系统的系统资源,这样一来可以加快容器的启动和停止效率。

缺点

• 容器的隔离性没有虚拟化强(linux下的容器不能虚拟出windows操作系统)
• 共用Linux内核,安全性有先天缺陷
• SELinux难以驾驭

应用场景

  • 节省项目环境部署时间
  • 环境一致性
  • 持续集成
  • 微服务
  • 弹性伸缩

二、基本概念

镜像(image)

  • 镜像好比一个模板,通过镜像来创建容器。
  • 一个镜像可以创建N个容器
  • 镜像是不可变的,不能修改里面的内容
  • 镜像可分为:基础镜像(OS)、环境镜像(jdk)、应用镜像(tomcat)、业务镜像(jar包)

容器(container)

  • 镜像run起来之后就称之为容器
  • 每个容器都是Linux的一个进程,也可以把容器看成是一个独立的Linux系统
  • 容器是可变的,可以在容器里面进行各种Linux操作(touch、mkdir、rm)

镜像仓库(repository)

  • 存放镜像的地方
  • 分为公有仓库和私有仓库
  • 官方的仓库为Docker Hub,私有仓库可以通过registry和harbor来搭建

三、安装Docker

Shell脚本安装Docker(二进制版)
SUSE12安装docker19.03.13

四、Docker Run流程

在这里插入图片描述

五、Docker镜像原理

UnionFS

联合文件系统(Union File System):它可以把多个目录(也叫分支)内容联合挂载到同一个目录下,而目录的物理位置是分开的。
镜像可以通过分层来继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像

Docker镜像加载原理

bootfs(boot file system)主要包含bootloader和kernel.

Docker镜像的最底层是bootfs,与典型的Linux是一样的,包含boot加载器和内核。当boot加载完之后,整个内核就在内存中了,此时内核的使用权已由bootfs转交给内核,系统也会卸载bootfs。

rootfs在bootfs之上,包含的就是典型Linux系统的/dev,/proc,/etc,/bin/等标准目录。
在这里插入图片描述
由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。 但是所有的变更都发生顶层的可写层,而下层的原始的只读镜像文件并未变化。

顶层的可写层称为容器层,下层的原始只读镜像称为镜像层

分层原理

镜像是分层的,每一层都可以共享。

六、容器数据卷

实现数据的持久化。

七、Dockerfile制作镜像

dockerfile详解

八、Docker网络

Docker网络详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/anqixiang/article/details/117230252

智能推荐

1.6卷积神经网络笔记—三维RGB图像卷积_w_bird的博客-程序员ITS301

1.三维立体图像(RGB三通道)的卷积运算6*6*3分别代表RGB图像的 高、宽、通道数;3*3*3分别代表滤波器矩阵 高、宽、通道数。图像和滤波器通道数必须相等(匹配)将3*3*3滤波器转换成立方体,一共3^3=27个数值,(按照前面章节介绍的卷积运算计算)。分别乘与滤波器对应的RGB图像三个通道的数值,再相加得到4*4输出矩阵的值。2.3*3*3滤波器作用检测某一通道的边缘特征:将3*3*3滤...

Zuul网关配置、ZuulException: Forwarding error_打豆豆。的博客-程序员ITS301_zuulexception

Zuul 是什么,有什么作用:核心作用就是过滤和路由;基本配置如下:server: port: 10010 #端口spring: application: name: api-gateway # 网关名字zuul: routes: user-service: # 路由的 id path: /user-service/** #映射路径...

弹出启动windows安全中心服务器,Win10每次开机都弹出启用Windows安全中心服务怎么办?..._ZHDYH的博客-程序员ITS301

Win10每次开机都弹出启用Windows安全中心服务怎么办?网友XLGB行不过巨硬,关闭了Win10自带的杀毒软件,然后每次开机右下角任务栏都会出现如下图所示提示框:启用Windows安全中心服务Windows安全中心服务已关闭。点击或单击启用这个问题是因为与Windows安全中心相关服务被停止导致,一般情况下,我们只要只要在服务中启动Security Center相关即可解决这个问题,下面是操...

Gitlab-CI持续集成之Runner配置和CI脚本_weixin_30537391的博客-程序员ITS301

Gitlab-CI持续集成之Runner配置和CI脚本一、简介1. 为实现持续集成,需为该项目准备以下两样东西:1)软件集成脚本.(gitlab-ci.yml)2)一台Runner服务器当然,考虑到集成环境的配置,还需要docker镜像作为载体。2. 基本流程如下: 1)安装Runner服务器,注册和项目对应的Runner S...

Windows PowerShell基本语法及常用命令_AlstonWilliams的博客-程序员ITS301

PowerShell常用命令:一 Get类1.Get-Command : 得到所有PowerShell命令,获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的基本信息。                              包括Cmdlet、Alias、Function。2.Get-Process : 获取所有进程3.G

一个遮罩层怎么遮罩两个图层_遮罩效果全解(13种方法)_牛岱的博客-程序员ITS301

初学者关于遮罩的话题问的较多,下面我将遮罩的一些常见问题进行一下归纳。1、请问遮罩的原理是什么?遮罩层好比黑夜中的一支手电筒,照在哪儿(指被遮罩层)哪儿就显现。第一步:创建两个图层,命名,一个是遮罩层,一个是被遮罩层;第二步:在被遮罩层图层输入文字“闪吧,我的最爱”;第三步:在遮罩层随便画一个形状,例如一个圆;第四步:此步最关键。点击遮罩层图层,右键选择“遮罩层”,如图1(1)2、我想让遮罩层运动...

随便推点

DbVisualizer常用的一些配置_恨水不成冰9520的博客-程序员ITS301_dbvisualizer怎么设置为中文

设置字体解决中文乱码在sql编辑器中,默认配置下,dbvis的中文会出现乱码,可以修改sql编辑器的字体,使中文正常显示。设置字体的方式为,选择菜单栏中 Tools -> Tool Properties,弹出新页面,在新页面的General中,展开Apperance后选择Fonts,此时可在页面右方对字体进行设置。将字体统一设置成支持中文的字体即可,建议选择字体选择Monspaced,大小设置为14。调整字体后显示效果调整各项工具栏图标大小同样选择菜单栏中 Tools -.

pythontime模块计算时长_用python的time模块查看你出生多长时间了_姐姐妹妹向前冲的博客-程序员ITS301

time模块的应用查看出生了多长时间查看银行卡解封时间1、查看出生了多长时间这里我们使用time模块计算我们出生了多长时间import time # 导入时间模块b = input('你的出生年月日(请以此格式输入:20000905):')bieth_time = time.mktime(time.strptime(b, '%Y%m%d')) # 计算出生日的时间戳now_time = tim...

LeetCode-[链表]-翻转链表_西瓜和柚子你喜欢哪个的博客-程序员ITS301_链表翻转

1. 双指针迭代翻转链表翻转链表和交换两个变量的操作大同小异。首先需要一个prev指针(指着当前节点的前一个节点),一个cur指针(指着当前节点)翻转链表需要注意的一点是:链表之间靠指针连接,如果贸然将某个节点的next指向其他节点,就有可能造成该节点的丢失,所以翻转链表时(单向或双向),都要注意保存它的周围环境。public ListNode reverseList(ListNode h...

线性表 - ringqueue_生活需要深度的博客-程序员ITS301

一个无锁消息队列引发的血案(四)——月:RingQueue(上) 自旋锁 - shines77 - 博客园

全球及中国土壤修复行业十四五建设规划与发展商机研究报告2022-2027年_土壤修复后多久可以建设_普通网友的博客-程序员ITS301

全球及中国土壤修复行业十四五建设规划与发展商机研究报告2022-2027年···························《修订日期》:2022年1月《报告价格》:纸质版6500元 电子版6800元 纸质+电子7000元 (有折扣)《专员对接》:周文文《查询鸿晟信合研究院了解详细内容!》第一章 土壤污染及土壤修复的相关概述第二章 国际土壤修复市场回顾2.1 国际2.1.1 土壤修复的主要起源2.1.2 发达国家土壤修复机制2.1.3 欧盟研发土壤修复新技术2.1....

linux 音乐播放错误,红旗linux6.0 sp1 播放音乐错误_史愿的博客-程序员ITS301

红旗linux6.0 sp1 播放音乐错误发布时间:2008-04-04 19:03:43来源:红联作者:god0906红旗linux6.0 sp1 播放音乐时没有声音,并且只能够能放41秒报如下错误请大侠们把光芒解决:This application has crashed! We're terribly sorry about this :(But, all is not lost! You ...

推荐文章

热门文章

相关标签