Docker理论总结

news2024/10/6 4:11:47

目录

容器技术的演变

物理机时代

虚拟化时代

容器化时代

容器化技术的应用场景 

Docker介绍与基本概念

标准化的应用打包

Docker的发展

Docker是容器化平台

Docker体系架构

容器与镜像

Docker执行流程

容器内部

Tomcat容器内部结构

在容器中执行命令

容器生命周期

镜像

Dockerfile镜像描述文件

Dockerfile自动部署Tomcat应用

镜像分层

容器通信

容器间Link单向通信

Bridge网桥双向通信

Volume容器间共享数据

容器编排工具 Docker Compose


容器技术的演变

物理机时代 

物理机时代

部署非常慢

成本很高

资源浪费

难于扩展与迁移

受制于硬件

虚拟化时代

多部署

资源池

资源隔离

很容易扩展

VM需要安装操作系统

容器化时代

容器化技术的应用场景 

标准化的迁移方式

统一的参数配置

自动化部署

应用集群监控

开发与运维之间的沟通桥梁
 

Docker介绍与基本概念

开源的应用容器引擎,基于 Go 语言开发

容器是完全使用沙箱机制,容器开销极低

Docker就是容器化技术的代名词    

Docker也具备一定虚拟化职能

docker文档

Docker overview

标准化的应用打包

Docker的发展

Docker是容器化平台

Docker是提供应用打包,部署与运行应用的容器化平台

可以看到docker类似于jvm,在程序和可用资源中间

Docker体系架构

分为3层,底层是docker服务器,也称为服务进程,所有的操作都在这里处理

中间是rest api,通信层,通信通过http协议 

最外层是docker客户端,通过rest api,向server发送命令,server处理后通过api向客户端返回

类似于docker pull这种命令

这样服务器和客户端可以不用在同一个服务器,运维只要在自己的机器安装客户端即可,可以管理很多服务器

容器与镜像

镜像:镜像是文件,是只读的,提供了运行程序完整的软硬件资源,是应用程序的"集装箱"

容器:是镜像的实例,由Docker负责创建,容器之间彼此隔离 

类似于win7的操作系统光盘,就是镜像。安装完的操作系统,就是容器

Docker执行流程

 client:发出指令的一方

docker host:里面daemon负责接受命令,管理镜像images和容器containers

reqistry:仓库,远程存储各种镜像

例如:部署redis,执行docker pull redis,docker daemon会在本地查看是否有镜像,没有,从registry下载redis镜像到docker服务器本地

然后执行docker run redis,daemon发现已经有了镜像,创建redis容器,容器内部就是一个迷你的linux系统,有它提供redis服务。

如果要分布式,就再执行docker run redis,这样就再运行了一个redis,并且2个redis的隔离的,互不影响

容器内部

Tomcat容器内部结构

底层有一个linux系统,但是这个系统很小,一般只能支持上面的应用,而且只提供最基础的命令

自动安装了一个jdk8,上面安装了一个tomcat8.5

在容器中执行命令

格式:docker exec [-it] 容器id 命令

exec 在对应容器中执行命令

-it 采用交互方式执行命令

实例:docker exec -it 0738ed2fe68b /bin/bash

如果对tomcat容器这样做,后面可以不断输入命令,并且此时直接进入usr/local/tomcat目录

最后输入命令 exit,即可退出 

容器生命周期

方框是事件,圆形是容器状态

输入docker run,执create,start,变成running状态

输入docker create,执create,变成stopped状态,只创建容器,不运行。

然后输入docker start,执行start,变成running状态

输入docker kill或者docker stop,都会执行die,让当前容器变得不可用。然后,kill会杀掉容器应用的进程,而stop不会杀掉,只是停止stop容器,然后都变成stopped状态。但是如果输入docker start,kill的容器会生成一个新容器,而stop会将原来的状态恢复。

输入docker restart,会执行die,start,restart,从而让容器重启

输入docker pause,会执行pause事件,变成状态paused。然后可以输入docker unpause,会恢复。

如果容器内部oom异常了,会执行die。然后根据docker的重启策略,如果要重启,就执行start,变成状态running。如果不重启,就变成stopped状态。

输入docker rm,就执行destroy,变成状态deleted

真实显示的状态:

stopped分成2个,created和exited,分别从create和die变成。

running显示为up

paused还是paused

deleted不会有这个状态,因为容器都显示不出来了 

镜像

Dockerfile镜像描述文件

Dockerfile是一个包含用于组合镜像的命令的文本文档

Docker通过读取Dockerfile中的指令按步自动生成镜像

docker build -t 机构/镜像名<:tags> Dockerfile目录 

机构名

镜像名

版本号,如果不写,就是latest

Dockerfile目录可以是绝对路径,也可以是相对路径

Dockerfile自动部署Tomcat应用

在firstdockerfile目录下,创建一个docker-web目录,里面有一个index.html,想让tomcat容器一运行,就能访问index.html

在firstdockerfile目录下,创建一个Dockerfile文件(没有后缀名),编辑,输入下面命令

FROM tomcat:latest

MAINTAINER dragon.com

WORKDIR /usr/local/tomcat/webapps

ADD docker-web ./docker-web

每行的第一个词语都是dockerfile的命令

FROM表示设置基准镜像,表示之后从这个镜像开始扩展。这里表示以最新版本的tomcat为基准,基于它进行扩展。

MAINTAINER 表示这个镜像由哪个人或者哪个机构进行维护,这里表示有dragon.com机构维护,拥有

WORKDIR 用于切换工作目录,这里表示以容器内的/usr/local/tomcat/webapps作为工作目录,实际上是要把web应用存在这个目录里面,tomcat才能运行这个应用。注意:如果目录不存在,会自动创建

ADD 表示复制目录下所有文件到镜像的指定目录下。第一个docker-web指和dockerfile同级的文件夹,第二个指如果webapps这个目录下面没有docker-web这个目录,就创建它。add表示,将第一个表示的文件夹里的所有东西(就是index.html),复制到容器里docker-web目录里面。

然后把文件都存在docker所在的虚拟机里面,文件结构如上 

然后 cd /usr/image/first-dockerfile

然后docker build -t dragon.com/mywebapp:1.0 /usr/image/first-docker/
或者docker build -t dragon.com/mywebapp:1.0 .

也就是绝对路径或者相对路径

docker images就可以看到新的镜像

镜像分层

在dockerfile自动生成镜像的4个语句中,会有一个临时容器,执行这些命令,每执行一句,就会有一个临时快照,也就是running in xxx ,执行完后,会对当前的步骤进行一个存档,这样就可以对它进行复用。

比如说部署一个其他应用,前面3步都一样,这样前3步的临时快照就可以复用

 可以看到如果前面的语句相同,那么就会直接使用缓存,不同的地方才会创建临时容器运行

容器通信

容器间Link单向通信

例如tomcat只需要单向的访问mysql,mysql不需要知道tomcat

还有每个容器被创建后,都会创建一个虚拟ip,而且他们之间是网络互通的,但是每创建一个容器,虚拟ip地址都可能发生变化,所以不建议使用ip进行通信,而是根据名称进行通信,docker会自动进行转发

例如这里,给tomcat容器命名为web,创建一个centos容器命名为database(假装数据库),之所以要执行bash,是因为不执行命令,centos会自动退出

可以使用docker inspect xxxx(container id),查看这个容器的具体信息,里面有它的虚拟ip

 

可以看到使用虚拟ip,是可以互相通信的,但不能直接ping database,因为ip没有和名称进行关联

删除web容器,然后重新创建,里面增加 --link database,web应用能向database通信

之后只要将jdbc配置文件里的ip地址,改成这个database,即可

 

Bridge网桥双向通信

可以使用link来进行双向通信,但是用网桥更加方便

bridge是一个虚拟组件,让容器里的应用和外部进行通信,数据会和物理网卡进行通信

还可以对指定的容器进行分组,组内的容器天然互联互通

先启动两个容器,并且--name命名

docker network ls能列出docker当前的网络明细

每个容器都会有一个默认的网桥,联向外网

创建一个新的网桥 docker network create -d bridge my-bridge

之后通过这个网桥的容器,彼此之间都是互联的

 使用命令 docker network connect my-bridge xxx  就可以把xxx绑定到这个网桥

 然后两个容器内部就可以根据名字,相互连接了

它的实现原理是,网桥会生成一个虚拟网卡,容器的网络连接都通过它。

但是如果向外部通信,都会通过虚拟网卡,进行数据的转发到物理网卡,再转发到外网

Volume容器间共享数据

比如说多个tomcat容器,共享一些数据。

volume数据卷,在宿主机上开辟一个空间,这样容器可以共享这个空间,类似于nas这样

这样,宿主机的路径a和容器的路径b,进行一个映射,容器访问b,就可以访问a

 

通过设置-v挂载宿主机目录

格式:

docker run --name 容器名  -v 宿主机路径:容器内挂载路径 镜像名

实例:

docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat

通过--volumes-from 共享容器内挂载点

1 创建共享容器

docker create --name webpage   -v /webapps:/tomcat/webapps tomcat /bin/true

第一步,只是创建容器,名字为webpage,并且进行路径的映射

2 共享容器挂载点

docker run --volumes-from webpage --name t1 -d tomcat

第二部,容器运行,根据容器webpage的挂载信息,创建一个新的容器,名字叫t1

这样挂载点被webpage统一管理

容器编排工具 Docker Compose

比如说,要创建mysql数据库,nginx,tomcat应用

如果要上线,怎么让运维安装这3个东西

compose可以通过一个脚本,先安装mysql,再安装nginx,最后安装tomcat,同时形成彼此之间的依赖关系

Docker Compose 单机多容器部署工具

通过yml文件定义多容器如何部署

WIN/MAC默认提供Docker Compose,Linux需安装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

( “树” 之 DFS) 104. 二叉树的最大深度 ——【Leetcode每日一题】

104. 二叉树的最大深度 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c; 返回它的最大深度 3 。 思路&am…

深度学习TensorFlow

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

redis整理之-持久化

redis整理之-持久化5. 持久化5.1 持久化简介5.1.1 场景-意外断电5.1.2 什么是持久化5.2 RDB5.2.1 save指令5.2.2 bgsave指令5.2.3 save配置自动执行5.2.4 RDB三种启动方式对比5.3 AOF5.3.1 AOF概念5.3.2 AOF执行策略5.3.3 AOF重写5.3.4 AOF工作流程及重写流程5.4 RDB与AOF区别5…

python开发环境的安装,PyCharm+python解释器

文章目录注意&#xff1a;软件打包下载&#xff1a;PyCharm的下载与安装下载安装python解释器的下载与安装下载安装PyCharm软件设置注意&#xff1a; 以下是Windows下的安装&#xff0c;Linux以及其他操作系统下的安装请类比参照&#xff01; 软件打包下载&#xff1a; PyCh…

主干网络backbone讲解—— Conv4与Resnet12

1 Conv4 在一些论文中&#xff0c;也称为Conv-64F。其中“64F”表示网络中使用了64个滤波器&#xff08;filters&#xff09; 它包含 4 个重复的卷积块&#xff0c;在每个块中包含&#xff1a; 一个 kernel3&#xff0c;stride1&#xff0c;padding1的卷积层&#xff1b;一个…

jquery中的ajax方法怎样通过JSONP进行远程调用

关于JSONP的概念以及为什么要使用JSONP您可以参考JSONP教程&#xff0c;本文的重点在于演示下在JQUERY中的Ajax方法怎样通过JSONP进行远程调用。 $.ajax的参数 首先介绍下$.ajax的参数&#xff1a; type&#xff1a;请求方式 GET/POST url:请求地址 async:布尔类型&#xff…

第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组题解+个人总结

提示&#xff1a;此题解为本人自己解决&#xff0c;如有差错请大家多多指正。 文章目录题解总结一、幸运数1.试题2.解法3.代码二、[有奖问答](https://blog.csdn.net/A2105153335/article/details/130038980?spm1001.2014.3001.5501)三、[平方差](https://blog.csdn.net/A2105…

spring 随笔 ioc/di 4-Bean生命周期钩子

0. RUN&#xff0c;或8RUN&#xff0c;是每年都会思考的问题 Spring框架后置处理器PostProcessor详解 BeanDefinitionRegistryPostProcessor 扩展接口 动态注册bean AOP的高级特性targetSource AnnotationAwareAspectJAutoProxyCreator#postProcessBeforeInstantiation源码解析…

第五十九章 线段树(二)

第五十九章 线段树&#xff08;二&#xff09;一、懒标记&#xff08;lazy_tag&#xff09;1、作用2、思路二、结构体定义三、带有懒标记的函数操作1、pushup函数2、build函数3、modify函数4、pushdown函数5、query函数四、代码一、懒标记&#xff08;lazy_tag&#xff09; 1、…

redis五大基本数据类型之(源码分析)

redis五大数据结构StringHashsetListZset总结String String 是最基本的 key-value 结构&#xff0c;key 是唯一标识&#xff0c;value 是具体的值&#xff0c;value其实不仅是字符串&#xff0c; 也可以是数字&#xff08;整数或浮点数&#xff09;&#xff0c;value 最多可以…

远程桌面连接是什么?远程桌面连接使用教程

有时候电脑出现各类网络连接、网址访问出错问题&#xff0c;自己无法解决的情况下&#xff0c;常常会求助其他擅长IT的同事或朋友&#xff0c;要么自己通过社交工具在线沟通、要么抱着电脑找人家解决。然而&#xff0c;通过远程桌面完全可以让朋友同事远程帮自己查看电脑问题&a…

永远加载不满的进度条

前言 各位开发大佬&#xff0c;平时肯定见到过这种进度条吧&#xff0c;一直在加载&#xff0c;但等了好久都是在99% 如下所示&#xff1a;有没有好奇这个玩意儿咋做的呢&#xff1f;细听分说 &#xff08;需要看使用&#xff1a;直接看实践即可&#xff09; fake-progress …

亚马逊云科技Serverless Data:数字经济下的创新动能

Serverless时代已经到来&#xff01;企业的技术架构&#xff0c;总是伴随着不断增长的数据与日趋复杂的业务持续演进。如何通过构建更易用的技术架构来聚焦在业务本身&#xff0c;而不必在底层基础设施的管理上投入过多的精力&#xff0c;是数据驱动型企业需要思考的重要议题。…

实操| 前端新人无敲代码开发APP

作为一种大型的基于GPT-3. 5结构的语言模型&#xff0c;ChatGPT由OpenAI训练&#xff0c;采用深度学习技术&#xff0c;通过大量的文本数据学习&#xff0c;可以生成类似于人类自然语言的文字。ChatGPT是一种非常强大的对话引擎&#xff0c;能进行对话、回答问题和完成任务。Ch…

数据库锁原理

数据库锁原理锁的定义InnoDB中的锁模式共享锁独占锁共享意向锁和独占意向锁LOCK_AUTO_INC自增锁INNODB_AUTOINC_LOCK_MODEInnoDB中的锁类型表锁行锁行子类型LOCK_REC_NOT_GAP精准行锁LOCK_GAP行GAP锁LOCK_ORDINARY行NEXT-KEY锁LOCK_INSERT_INTENTION插入意向锁锁的定义 为了体…

数据分析之Matplotlib 基础入门

目录 第一章 什么是Matplotlib 常见图表及其分类 Matplotlib 第一个绘图程序 第二章 Matplotlib 基础 Matplotlib 图表常用设置 颜色设置 线条样式和标记样式 画布设置 设置坐标轴标题 设置坐标轴刻度 设置坐标轴范围 设置网格线 设置文本标签和标题 添加图例 添…

Image Deconvolution with the Half-quadratic Splitting Method

Image Deconvolution with the Half-quadratic Splitting Method 在处理图像重建或者逆问题的时候&#xff0c;我们经常会看到一种称为 Half-quadratic Splitting&#xff08;HQS&#xff09;的方法&#xff0c;这是在优化领域里非常经典的一种方法&#xff0c;之前也断断续续…

【Cesium 编程第一篇】概述、环境搭建、界面介绍

年前年后一直在面试&#xff0c;发现一个奇怪的现象&#xff1a;很多互联网公司经受住三年的疫情冲击&#xff0c;反而在疫情放开的那一刻撑不住了&#xff0c;很多大厂都在批量的裁员&#xff1a;美国硅谷、北京字节、迪士尼中国等等。在北京的朋友也是年后到现在一直没有找到…

AI是一场革命,我真不是在跟风

AI是场革命&#xff0c;好像现在很多人都开始这么说&#xff0c;那么我说我不是在跟风&#xff0c;为什么&#xff1f;不好意思&#xff0c;又要翻翻旧贴 -> AI是一场革命&#xff0c;不要笑&#xff0c;我是认真的。2016年我就这样讲了&#xff0c;就如我常说的&#xff0c…

【《中国工业经济》论文复刻】“一带一路”倡议与中国企业升级

数据和变量描述 本部分介绍文章研究所使用的数据和关键变量。 数据来源&#xff1a;自主整理 时间范围&#xff1a;2012-2017年 变量说明&#xff1a; 相关变量见下表。 一. 摘要 近年来&#xff0c;中国应该如何实现产业升级受到学界的广泛关注&#xff0c;产业升级归根…