Docker详解(入门必看)_docker -v使用-程序员宅基地

技术标签: 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

智能推荐

【Django】使用FastDFS docker镜像存储图片和读取图片_docker本地知识库读取的图片-程序员宅基地

文章浏览阅读895次。1.FastDFSFastDFS是一个用C语言写的开源的轻量级分布式文件系统功能包括文件存储、文件访问(文件上传、文件下载)、文件同步等,解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务,如相册网站、视频网站FastDFS架构 包括Client、Tracker server和Storage server我们在Django项目存储和读取图片可以通过FastDFS实现,但这里使用docker运行该镜像2.docker运行FastDFS2.1 安装FastDFS先在系统上安装好Doc_docker本地知识库读取的图片

SpringBoot 关于Feign的超时时间配置_feign.client.config.default-程序员宅基地

文章浏览阅读1.8w次,点赞15次,收藏37次。无独有偶,我今天也遇到了一个关于 feign 超时时间配置的问题。今天项目现场提过来一个问题 “公司发过来的封装好的 springboot 项目中的 feign 调用超时时间需要修改”,细问之后,具体的需求场景是这样的:1、首先要对 feign 的超时时间做设置2、然后具体的要求是,只要对某一个微服务的其中一个接口进行特殊配置,对其余的所有接口做一个统一配置公司 feign 版本 spring-cloud-starter-openfeign 2.2.3.RELEASE基于 @FeignClien_feign.client.config.default

办理登机的英语词组手机键盘_如何使用智能手机使登机轻而易举-程序员宅基地

文章浏览阅读2.1k次。办理登机的英语词组手机键盘These days, it’s easier than ever to board many of the most popular airlines using nothing more than your smartphone and a little know-how to boot. Today we’re going to give you a few tip..._digital boarding

STM32 IAP应用开发--bootloader升级程序_stm32 bootloader-程序员宅基地

文章浏览阅读1.3k次,点赞4次,收藏30次。IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到数据存储区,从而实现固件升级。_stm32 bootloader

C语言中的数据类型及其转换详解_枚举常量如果超过int,会转化为long int-程序员宅基地

文章浏览阅读8.2k次。1. C语言中的数据类型  C语言中的类型按其组成可以分为简单类型和构造类型,按是否预定义了类型名字和值集可以分为基本类型和非基本类型,按是否加了类型限定符可以分为限定类型和非限定类型。  ANS_枚举常量如果超过int,会转化为long int

Linux中的伪终端编程_pty.h-程序员宅基地

文章浏览阅读1.1k次。[cpp] view plain copy如何操作伪终端: 伪终端的使用是成对出现的,分为master 和 slaver 主设备:/dev/ptmx (i850上的主设备名) 从设备:动态生成:/dev/pts/0.......x 功能:写入主设备的信息,可以从从设备上读出;写入从设备的信息,可以从主设备读出。用以实现对串口的多路复用。 _pty.h

随便推点

*简单脚本测试--利用date进行文件的创建*_利用date进行文件的创建。 rda假设我想要创建3个空的文件(通过touch),文件名开头-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏2次。想像一个状况,假设我的服务器内有数据库,数据库每天的数据都不太一样,因此当我备份时, 希望将每天的数据都备份成不同的档名,这样才能够让旧的数据也能够保存下来不被覆盖。 哇!不同档名呢!这真困扰啊?难道要我每天去修改 script ?不需要啊!考虑每天的『日期』并不相同,所以我_利用date进行文件的创建。 rda假设我想要创建3个空的文件(通过touch),文件名开头

[RK3568 Android11] 开发之默认授予第三方安装的APP权限_android11手动安装的第三方app授予权限-程序员宅基地

文章浏览阅读3.9k次,点赞2次,收藏8次。目录前言一、默认授予第三方APP权限二、指定应用默认授予权限三、验证默认授权前言 对于定制化的Android产品来说,客户需求是多样化的,比如客户需求在安装第三方应用时,默认授予APP所需的权限;在Android11系统中没有授予APP权限的情况下,APP会弹出多个权限框,需人工点击确定后系统才能授予对应的权限;对于定制化的产品来说并不是很有好,比如产品一批量起来,不可能让人工每一台都去点击授权,这样耗时和耗人力;需要系统默认授予APP权限,我们就需要对Android源..._android11手动安装的第三方app授予权限

springmvc-servlet.xml中use-default-filters的作用-程序员宅基地

文章浏览阅读249次。在ssm整合时,使用注解方式对相关bean进行管理,此时会出现一个问题SpringIOC容器和SpringMVC容器这两个容器对Bean管理的问题,一般情况下都是单单使用SpringMVC容器对@Controller注解标识的类进行管理,其他的类如@Service、@Component、@Repository等注解标识的类由Spring容器来管理(SpringMVC容器中的类可以引用...

2021年全网最细 VirtualBox 虚拟机安装 Ubuntu 20.04.2.0 LTS及Ubuntu的相关配置_2021年全网最细virtualbox安装ubuntu-程序员宅基地

文章浏览阅读2.4w次,点赞107次,收藏478次。目录一、VirtualBox 虚拟机的安装1. VirtualBox 的下载和安装2. 设置 VirtualBox 存储文件夹3. 在 VirtualBox 创建虚拟机二、Linux 操作系统(Ubuntu)的安装1. Linux 操作系统(Ubuntu)的下载2. 安装 Ubuntu3. 启动 Ubuntu三、配置 Ubuntu1. 设置终端2. 设置共享剪贴板3. 设置共享文件夹一、VirtualBox 虚拟机的安装VirtualBox 是由德国 Innotek 公司开发,由 Sun Microsy_2021年全网最细virtualbox安装ubuntu

CMake 官方完整版_cmake 文档-程序员宅基地

文章浏览阅读541次。假设,出于教学的目的,我们决定不使用平台log和exp函数,而是希望生成一个预先计算值的表,以便在mysqrt函数中使用。在本节中,我们将创建表作为构建过程的一部分,然后将该表编译到我们的应用程序中。首先,让我们删除中对log和exp函数的检查。然后从mysqrt.cxx中删除对HAVE_LOG和HAVE_EXP的检查。同时,我们可以删除。在子目录中,有一个名为的新源文件被提供来生成表格。检查完文件后,我们可以看到表是作为有效的 C++ 代码生成的,并且输出文件名作为参数传入。下一步是创建。_cmake 文档

STM8停产,新唐的N76E003 pin对pin替换STM8S003F3P6_stm8s003 pin对pin 代替-程序员宅基地

文章浏览阅读3.9k次。版权声明:本文为CSDN博主「qlexcel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qlexcel/article/details/81069808随着STM8的停产,新唐的N76E003 pin对pin替换STM8S003F3P6,而且很便宜,故这个时候拿来替换使用再好不过。下面..._stm8s003 pin对pin 代替

推荐文章

热门文章

相关标签