docker通俗易懂_docker的工作原理的理解

docker通俗易懂_docker的工作原理的理解「这是我参与2022首次更文挑战的第一天,活动详情查看:2022首次更文挑战」。 关于Docker Docker的是什么 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到

「这是我参与2022首次更文挑战的第一天,活动详情查看:2022首次更文挑战」。

关于Docker

image.png

Docker的是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker的功能

虚拟机技术:

由于虚拟机技术有着以下缺点:

  1. 因为模拟一台电脑,导致资源占用十分的多
  2. 冗余的步骤比较多
  3. 启动很慢!!!
  4. 而且环境是共用的,一个出问题可能会导致全部崩盘

docker通俗易懂_docker的工作原理的理解

容器化技术

比较docker与虚拟机技术的不同:

  • 传统虚拟机,虚拟出一条硬件,与运行一整个完整的操作系统,然后在这个系统上安装和与逆行软件
  • 容器内的应该用直接运行宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
  • 每个容器之间是互相相隔的,眉哥哥容器内都有一个属于自己的文件系统,互不影响。

docker通俗易懂_docker的工作原理的理解

DevOps(开发,运维)

应该用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像发布测试,一键运行

更便捷的升级与扩缩容

使用了Docker之后,我们部署应用就像搭积木一样!

可以将项目打包为一个镜像,扩展。

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算机资源的利用

Docker是内核级别的虚拟化,可以在一个物理机上运行很多容器实力!服务器的性能可以被压榨到极致。

Dockers的基本组成

img

镜像(image) :

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomocat镜像===> run ===>tomacat01容器(提供给服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)

**容器(container) : **

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。启动,停止,删除,基本命令。

仓库(repository) :

仓库就是存放镜像的地方

仓库分为公有仓库和私有仓库

安装Docker

1.卸载旧版本的Docker

 sudo apt-get remove docker docker-engine docker.io containerd runc

2.更新包索引

sudo apt-get update

3.升级支持https类型库

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

4.添加官方的GPG密钥

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

5.配置使用stable版本

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

6..安装最新版本的Docker

sudo apt-get install docker-ce docker-ce-cli containerd.io

4.检测是否安装成功

sudo docker run hello-world

成功后会有这样一堆代码

QQ图片20220114163858.png

helloWorld运行原理

QQ截图20220115121005.png

底层原理

Docker是怎么工作的

Docker是一个Client-Server结构的系统,Docker的守护进程与逆行在主机上,通过Socker从客户端访问!DockerSever接受到Docker-Client的指令,就会执行这个命令!

docker通俗易懂_docker的工作原理的理解

Docker为什么比VM快

1.Docker有着比虚拟机更少的抽象层

2.docker利用的是宿主机的内核,vm需要的是Guest OS

查看源图像

所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载Guest OS,虚拟机是分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,所以启动是秒级的。

Docker常用的命令

帮助命令

docker version     #显示docker版本信息
docker info        #显示docker的系统信息
docker 命令 --help      #万能命令(帮助)

镜像命令

docker images 		#查看所有本地主机的镜像
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   3 months ago   13.3kB

#解释
REPOSITORY      镜像的仓库源
   TAG          镜像的标签
 IMAGE ID       镜像的ID
 CREATED        镜像的创建时间
 SIZE           镜像的大小

 #可选项
 -a        		#列出所有镜像
 -q				#只显示镜像的id


docker search 镜像名:版本号      #搜索镜像
docker pull 			  #下载镜像
docker rmi -f 容器id    #删除指定容器
docker rmi -f $(docker images -aq) #删除全部容器

容器命令

有镜像才可以创建容器,linux,下载一个ubuntu镜像

docker pull ubuntu

新建容器并启动

docker run [可选参数] image

#参数说明
--name="name"     容器名字,用来区分容器
-d     			  后台方式运行
-it               使用交互方式运行,进入容器查看内容
-p                指定容器端口 -p 8080:8080
-P                随机指定端口

#测试
docker run -it ubuntu /bin/bash       #启动并进入容器
成功之后用户名会变成镜像id

exit            		#从容器退回主机

列出所有正在运行的容器

docker ps
 #可选择
-a   				#列出当前正在运行的容器+带出历史运行过的容器
-n=?                #显示最近创建的容器
-q					#只显示容器的编号

退出容器

exit                 #容器通知退出
ctrl + p + q         #容器不停止推出

删除容器

docker  rm 容器id				   #删除指定容器【不能删除正在运行的容器】
docker  rm -f $(docker ps -aq)  #删除所有容器
docker ps -a -q|xargs docker rm   #删除所有容器

启动和停止容器

docker start 容器id           #启动容器
docker retart 容器id          #重启容器
docker stop 容器id            #停止容器
docker kill 容器id            #强制停止当前容器

常用的其他命令

后台启动容器

#docker run -d 镜像名
 #问题docker ps 发现Ubuntu停止了
 #常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

查看日志

docker logs -ft --tail  数字 容器id     #查看容器最近几条日志

查看容器进程信息

docker  top 容器id

查看镜像元数据

docker inspect 容器id

进入当前正在运行的容器

docker exec -it 容器id /bin/bash  #进入容器后开启一个新终端
docker attach 容器id     #进入容器正在执行的终端,不会启动新进程

从容器内拷贝文件到主机上

docker cp 容器id: 容器路径 目的主机的路径

部署nginx

首先下载nginx

docker pull nginx

然后查看是否有该镜像

docker images

启动nginx

docker run -d --name nginx01 -p 3344:80 nginx
-d     # 后台运行
--name   # 给容器命名
-p     # 宿主机端口:容器内部端口

端口暴露

我在外网访问3344端口,但访问的是docker里nginx的80端口

QQ图片20220116140458.png

Docker镜像讲解

镜像是什么

镜像是一种轻量级,可执行的独立的软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码,运行时,库,环境变量和配置文件。

所有的应用,直接打包docker镜像,就可以直接跑起来!!!

如何得到镜像:

  • 从远程镜像仓库下载
  • 朋友拷贝给你
  • 自己制造一个

Docker镜像加载原理

UnionFS(联合文件系统)

我们下载的时候看到的一层层就是这个!

联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。

联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看卡里,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理

Docker 的镜像是有一层一层的文件系统组成的,这个层级的文件系统就叫做联合文件系统,一般底下的层都是共用的

一般系统启动,是一个加载的过程,这个过程是 bootloader 引导加载 kernel,linux 操作系统刚启动的时候还会加载 bootfs 文件系统,而咱们的 Docker 镜像最底层就是 bootfs

img

boot file system 是一个文件系统,主要是包含 bootloader 和 kernel当 boot 加载完毕之后,整个内核都在运行正在内存中的,此时内存的使用权已经由 bootfs 交接给内核,这个时候系统会将 bootfs 卸载掉

在来说一下 rootfs,root file system,根文件系统,它是在 bootfs 之上的,就是包含了,linux 操作系统中的 /dev ,/proc,/bin,/etc 等目录和文件例如我们知道的 rootfs 有 centos,ubuntu等等

Commit镜像

docker commit 提交容器称为一个新的镜像
 #命令和git原理相似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像命,[TAG]

实践测试

#1.启动该一个默认的tomcat
 #2.发现这个默认的tomcat是没有webapps应用的,镜像的原因,官方默认的镜像webapps下面是没有文件的
 #3.我我自己拷贝进去了基本的文件
 #4.将我们操作过的容器通过commit提交一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改镜像

QQ图片20220117162338.png

如果你想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,这就好比游戏存档。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13621.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注