docker的道法术器

2023-10-23 07:59
文章标签 docker 法术

本文主要是介绍docker的道法术器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.2 什么是docker【时势造英雄——云原生,云部署】
docker的发展历史:
在这里插入图片描述
啥是docker:
开源的应用软件的【容器】,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的机器上,从而抹平【系统环境windows、Macos、Linux】的差异。源码托管在github上;

2.1 docker的理念
在这里插入图片描述
* 集装箱
* 标准化【运维流程化】

	* 运输方式* 存储方式* API接口

*隔离:底层使用LXC技术(一种轻量的容器虚拟化技术,是Linux的一种内核限制机制)

2.2 docker解决的问题
1.抹平环境的差异,解决软件运行环境不一致所带来的问题
2.将运维的流程标准化,从而使【快速扩展】、【服务水平伸缩】变得简单
3.隔离各个应用,避免个别应用出错造成的服务雪崩

docker化的步骤:
* 依赖集装箱打包
* 鲸鱼运输到服务器

3.1docker的核心技术
在这里插入图片描述
Build:构建——构建镜像【镜像】
Ship:运输——运输镜像,从仓库和主机上运输【仓库】
Run:Run运行的镜像就是一个容器【容器】

图解:
在这里插入图片描述
3.2docker镜像【image】
镜像的本质:一系列文件(应用程序文件、运行环境文件…)按照一定的格式打包后的【文件集】

这个【格式】就是【镜像的格式】,与Linux的一项存储技术有关——联合文件系统(Union File System),是一个分层的文件系统,可以做到将【不同的目录挂到同一个虚拟文件系统下】
docker镜像利用了【分层的概念】实现了【镜像存储】
eg:
在这里插入图片描述

docker镜像存储格式图解:
在这里插入图片描述
从上图可以明显看出:docker的镜像文件是分层,分为n层,每一层存放的文件都不一样,即:每层有每层的作用;这5层堆叠起来就构成了一个docker镜像,也就是【鲸鱼身上托着的一个【集装箱】】,但是由于docker镜像采用了联合文件系统(Union File System),可以做到将【不同的目录挂到同一个虚拟文件系统下】;
从而就做到了这种效果:
docker镜像内部文件分层,但对外表现出来的效果是不分层的,所有文件都在一个层面上!
一个docker镜像当他的所有层都被加载进来后,对外展示的效果就会是【不分层的】
注意:docker镜像文件的每一层都是只读的,除了最上面的那层是可写的。

docker中从【文件】–>【镜像】–>【容器】的过程是:
在这里插入图片描述
3.3docker容器【container】
容器的本质:就是一个进程

把容器想象成一个虚拟机,每个虚拟机都有自己的文件系统,在这个文件系统里面,他的文件也是分层的,和【镜像】的文件分层类似,只有最上一层是可读可写的,下面的n层都是只读的,当遇到需要修改n层中的文件的时候(假设这个文件在x层),那么就会将x层的文件拷贝到【最上层】,在最上层对x层的文件进行修改。

**镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。**容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。
前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层(就是最上面的那一层)。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化(即:不应该存放任何数据)。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

理清【物理机】、【虚拟机】和【容器】之间的关系:
物理机 = 操作系统 + 物理载体(eg:笔记本、主机机箱)
虚拟机 = 操作系统的镜像 + 创建虚拟机的软件 + 物理机宿主(虚拟机需要占用物理机的一部分物理硬件,比如:硬盘、内存、cpu)
容器 = docker镜像运行的实例

一个问题:已经有了【虚拟机技术】为什么还需要【docker】?
首先明确一个基本事实:
【虚拟机】和【docker】他们解决问题的技术是一样的——虚拟化技术。
但是他们所要解决的问题是存在差异的:
虚拟机主要解决的是——用户隔离
docker主要解决的是——应用隔离
这两个问题的边界是不一样的,图解:
在这里插入图片描述
那【用户隔离】和【应用隔离】有啥不一样?
【用户隔离】:我们都知道,现实生活中,每个人都有自己的电脑,每台电脑上都有一个完整的操作系统,那么就相当于【一个用户独占一个操作系统】,即:一个用户需要一个完整的操作系统才可以满足他的需求

那一个应用需要一个完整的操作系统资源才可以运行起来吗?显然是不用的(虽然有那种情况,但是很少,很少)
所以,这个时候就需要docker技术了,通过docker技术的【镜像化打包】,将【应用程序】、【应用程序依赖的运行时】、【应用程序依赖的操作系统资源】等一系列的【运行时依赖树】”连根拔起“,【整体文件分层】镜像化打包成一个【docker镜像】,而容器就是镜像的运行实例。

从这里可以看出:【应用隔离】比 【用户隔离】要轻量很多,【用户隔离】需要一整个操作系统,而【应用隔离】只需要操作系统的一部分。
所以,虽然使用【虚拟机技术】一样可以实现【应用隔离】,但是,消耗会很大,会产生巨大浪费,因此,docker技术的出现并席卷IT技术界,是有其真实的行业痛点存在的。

使用虚拟机运行多个相互隔离的应用图解:
在这里插入图片描述
使用Docker运行多个相互隔离的应用图解:
在这里插入图片描述
docker有docker的优势,虚拟机有虚拟机技术的应用场景;
虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。
Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

两者【隔离图】对比:
在这里插入图片描述
docker容器使用由Linux内核提供的命名空间,大多数人把命名空间认为是一个上下文或域的授权

虚拟机的伟大在于:通过抽象来增加并行,服务于多操作系统的使用情况以及业界最好的安全性。但对于隔离,它们相当的昂贵,容器提供的隔离就便宜。

【服务器虚拟化】与【服务器Docker化】图解:
在这里插入图片描述
服务器:港口(拥有场地和各种设备)
服务器虚拟化:港口上的仓库(拥有独立的空间堆放各种货物或集装箱)
服务器Docker化:港口上的集装箱

不同的集装箱属于不同的运单(Docker上运行不同的应用实例),相互独立(隔离)。但由同一个人管理(主操作系统的内核),因此通过管理员可以看到所有集装箱的相关信息(因为共享操作系统内核,因此相关信息会共享)。

服务器虚拟化就好比在码头上(物理主机及虚拟化层),建立了多个独立的仓库(虚拟机)。其拥有完全独立(隔离)的空间,属于不同的客户(虚拟机所有者)。每个仓库有各自的管理员(当前虚拟机的操作系统内核),无法管理其它仓库,不存在信息共享的情况。

所以:需要根据不同的应用场景和需求采用不同的方式使用Docker技术或使用服务器虚拟化技术。
典型的Docker应用场景:主机上的Docker实例属于单一用户的情况下,在保证安全的同时可以充分发挥Docker的技术优势。

典型的虚拟机应用场景:对于隔离要求较高的环境如混合用户环境,就可以使用服务器虚拟化技术。

3.4docker仓库【warehouse】
远程docker开源仓库:hub.docker.com
国内仓库:c.163.com/hub#/home

docker仓库直接类比maven仓库就可以了,说白了,就是一个放docker镜像的地方

参考文章:
1.https://yeasy.gitbook.io/docker_practice/basic_concept/container
2.https://www.jianshu.com/p/50f48eb25215
3.https://www.imooc.com/video/14615/0

写在最后:转载需要注明出处

这篇关于docker的道法术器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/266588

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

docker-compose安装和简单使用

本文介绍docker-compose的安装和使用 新版docker已经默认安装了docker-compose 可以使用docker-compose -v 查看docker-compose版本 如果没有的话可以使用以下命令直接安装 sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-c

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

Windows与linux中docker的安装与使用

windos中安装使用docker 下载Docker_Desktop 安装包进入docker官网下载Docker_Desktop: https://www.docker.com/ 启用wsl 我们搜索“启用或关闭Windows功能”,打开后勾选适用于Linux的Windows 子系统 Docker_Desktop设置 出现Docker Engine stopped的解决

docker学习系列(四)制作基础的base项目镜像--jdk+tomcat

前面已经完成了docker的安装以及使用,现在我们要将自己的javaweb项目与docker结合 1.1准备jdk+tomcat软件 ​​我下载了apache-tomcat-7.0.68.tar.gz和jdk-7u79-linux-x64.tar.gz,存储于Linux机器的本地目录/usr/ect/wt/下(利用xshell上传)。利用linux命令 tar -zxvf apache-tom

docker学习系列(三)docker使用

紧接着之前的博客,这一篇主要写如何使用docker 系列1:docker简介:http://blog.csdn.net/u013469562/article/details/72864323 系列2: docker安装:http://blog.csdn.net/u013469562/article/details/72865167 一、docker镜像的获取 1.1搜索可用镜像

docker学习系列(二)docker安装

接着之前的博客http://blog.csdn.net/u013469562/article/details/72864323,今天写一下docker的安装和使用 1.1docker的安装前置需求 首先docker目前的版本已经到了v17.03 本文采用centos6.6版本安装docker,其他操作系统可以参考其他博客,首先docker对于centos的需求如下 C

docker学习系列(一)初识docker

在第一版本上线之后公司,我们决定将之前使用的开源api文档项目转移到本公司的服务器之上,之前用的是showdoc,showdoc利用的是php技术,作为java程序员表示需要快速部署php环境以及apach容器都需要时间,所以采用第二种方法,即利用docker进行快速部署(虽然学习成本也不比php少)。 一、docker简介 docker的官网是https://www.docker.com,