docker内部逻辑怎么理解

本篇内容主要讲解“docker内部逻辑怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“docker内部逻辑怎么理解”吧!

docker内部逻辑怎么理解  docker 第1张

镜像(Image)——一个特殊的文件系统
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)

容器(Container)——镜像运行时的实体
容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等

仓库(Repository)——集中存放镜像文件的地方
镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务

Docker采用了C/S架构。客户端和服务端可以运行在一个机器上,也可以通过socket或者RESTful API 来进行通信。
Docker  Daemon: 一般在宿主机后台运行,等待接收客户端的消息
Docker Client:则为客户提供一系列可执行的命令, 用户使用这些命令跟docker daemon交互

docker内部逻辑怎么理解  docker 第2张

1、用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者

2、Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。

3、Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动graphdriver将下载镜像以Graph的形式存储;当需要为Docker创建网络环境时,通过网络管理驱动networkdriver创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver来完成。libcontainer是一项独立的容器管理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。

1、容器和虚拟机对比

2、Docker的优势

3、Docker的劣势

4、Docker的应用场景

docker内部逻辑怎么理解  docker 第3张

1、Docker安装

2、认识镜像和容器

3、镜像容器管理

docker内部逻辑怎么理解  docker 第4张

什么是镜像?
镜像是一个多层的联合只读的文件系统。

什么是容器?
容器是在镜像基础上加上读写层。容器即进程。

构建镜像的过程?
镜像->镜像+可写层+执行命令->commit为新的镜像(新的一层)->镜像+可写层+执行命令->commit为新的镜像(新的一层)->…

docker内部逻辑怎么理解  docker 第5张

典型文件系统启动 :
一个典型的 Linux 文件系统由 bootfs 和 rootfs 两部分组成,

bootfs(boot file system)

主要包含 bootloader 和 kernel,bootloader 主要用于引导加载 kernel,当 kernel 被加载到内存中后 bootfs 会被 umount 掉

rootfs (root file system)

包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc 等标准目录和文件

加载过程:
bootfs 时会先将 rootfs 设为 read-only,然后在系统自检之后将 rootfs 从 read-only 改为 read-write,

Docker文件系统启动:

Docker 在 bootfs 自检完毕之后并不会把 rootfs 的 read-only 改为 read-write,而是利用 union mount(UnionFS 的一种挂载机制)将 image 中的其他的 layer 加载到之前的 read-only 的 rootfs 层之上,每一层 layer 都是 rootfs 的结构,并且是read-only 的。所以,我们是无法修改一个已有镜像里面的 layer 的!只有当我们创建一个容器,也就是将 Docker 镜像进行实例化,系统会分配一层空的 read-write 的 rootfs ,用于保存我们做的修改

docker内部逻辑怎么理解  docker 第6张

基础镜像的层信息

docker pull centos

tree -L 2 /var/lib/docker/overlay2/

构建后镜像的层信息

cd layer_dockerfile/

docker build -t centos:test -f ./Dockerfile .

tree -L 2 /var/lib/docker/overlay2/

每一层都包含了”该层独有的文件”以及”和其低层共享的数据的连接”,在Docker 1.10之前的版本中,目录的名字和镜像的UUID相同,而Docker 1.10后则采用了新的存储方式,可以看到目录名和下载镜像的UUID并不相同

Diff
存放挂载点的具体的文件内容

Link
对应l目录的链接源的名称

Lower
根没有lower,其它的lower指向的父层的链接

L:
”l“目录包含一些符号链接作为缩短的层标识符. 这些缩短的标识符用来避免挂载时超出页面大小的限制

docker内部逻辑怎么理解  docker 第7张

docker内部逻辑怎么理解  docker 第8张

Commit:容器提交为镜像

docker run -idt --name test centos

Touch liwei

docker commit 6de test2

Create:创建容器但是不启动

docker create --name nginx-con -p80:80 nginx:latest

Start:启动容器

docker start nginx-con

Stop:停止容器

docker stop nginx-con

Kill:杀掉容器,和停止相比不友好

docker kill nginx-con

Pause:暂停容器

docker pause nginx-con

Unpause:恢复暂停的容器

docker unpause nginx-con

Run:创建且启动容器

docker run -idt --restart=always --name nginx_con -v /tmp/:/mnt -p 88:80 -e arg1=arg1 nginx
Docker attach nginx_con
Ctrl+^p+^q

CP:宿主机和容器之间copy文件

docker cp docker_install.sh nginx_con:/opt

docker exec nginx_con ls /opt

docker cp nginx_con:/opt/docker_install.sh ./1.sh

Exec:执行命令,也可附加到容器

docker exec nginx_con ls /opt

Attach:附加到容器

docker attach nginx_con

docker exec -it nginx_con /bin/bash

Logs:查看容器日志

docker logs –f nginx_con

Inspect:查看元数据,可以查看镜像和容器

docker inspect nginx_con

Port:查看容器端口映射

docker port nginx_con

Top:查看容器中正在运行的进程

docker top nginx_con

Ps:查看容器

docker ps

docker ps -a

docker ps -aq

查看正在运行的容器,加上-a查看所有容器(包含停止和暂停状态的容器)

Rm:删除容器

docker rm nginx_con 删除容器

docker rm -f nginx_con 强行删除容器

Export:导出容器

docker pull busybox

docker run -itd busybox

docker export 983989307eef>busybox.tar

Import:导入容器

docker import busybox.tar busybox:1.3

Save:导出镜像

docker save busybox:1.3>busybox1.3.tar

Load:导入镜像

docker load -i busybox1.3.tar

Tag:镜像打标签

docker tag busybox:1.3 192.168.199.160/test/busybox:latest

Build:从dockerfile构建镜像

FROM centos

ENV TZ "Asia/Shanghai"

ADD echo.sh /opt/echo.sh

RUN chmod +x /opt/echo.sh

CMD ["/opt/echo.sh"]

docker build -t centos:test -f Dockerfile .

Pull:从 registry拉取镜像

docker pull nginx 从dockerhub上拉取

docker pull 192.168.199.160/test/nginx:latest 从内网harbor上拉取

Push:推送镜像到仓库[第一次需要输入密码,后续不需要了]

docker login 192.168.199.160

admin

Harbor12345

docker push 192.168.199.160/test/busybox:latest

Info、version、events

docker info 查看docker相关信息信息

Docker version 查看docker相关版本信息

Docker events 查看docker事件

【注】
1、创建容器后防火墙不要再动

2、cmd会被覆盖的问题,需要注意,可能会导致/bin/bash 把启动命令覆盖了,启动不了的问题例如
docker run -idt --restart=always --name nginx_con -v /tmp/:/mnt -p 88:80 -e arg1=arg1 nginx /bin/bash

3、cmd的命令都会在挂在后执行。

到此,相信大家对“docker内部逻辑怎么理解”有了更深的了解,不妨来实际操作一番吧!这里是蜗牛博客网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论电报频道链接