Docker - 镜像-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Docker - 镜像

镜像是什么

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

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

Docker镜像加载原理

UnionFS联合文件系统

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

UnionsFS(联合文件系统)Union文件系统UniosFS是一种分层轻量级并且高性能的文件系统它支持对文件系统的修改作为一次提交来一层层的叠加同时可以将不同的目录挂载到同个虚拟文件系统下unite several directories into a single virtual filesystem Union 文件系统是Docker镜像的基础。镜像可以通过分层来进行继承基于基础镜像没有父镜像可以制作各种具体的应用镜像

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

Docker镜像加载原理

docker镜像实际上由一层一层文件系统组成这种层级的文件系统UnionFS

bootfs(boot file system)主要包含bootloader和kernelbootloader主要是引导加载kernellinux刚启动时会加载bootfs文件系统在Docker系统的最底层是bootfs。这一层与我们典型的linux/unix系统是一样的包含boot加载器和内核当boot加载完成之后整个内核就都在内存中了此时内存的使用权已由bootfs转交给内核此时系统也会卸载bootfs

rootfsroot file system在bootfs之上。包含的就是典型linux系统中 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版比如UbuntuCentos等等。

在这里插入图片描述

对于一个精简的OSrootfs可以很小只需要包含最基本的命令工具和程序库就可以了因为底层直接用host的kernel自己只需要提供rootfs就可以了。因此可见对于不同的linux发行版bootfs基本是一致的rootfs会有差别因此不同的发行版可以公用bootfts

虚拟机是分钟级别容器是秒级

分层理解

分层的镜像

在这里插入图片描述

commit镜像

docker commit 提交容器成为一个新的副本

# 命令与git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

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

[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                                       NAMES
448d12d702d2   tomcat    "catalina.sh run"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   busy_turing
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it 448d12d702d2 /bin/bash
root@448d12d702d2:/usr/local/tomcat# ls
bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  native-jni-lib  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  webapps  webapps.dist  work
root@448d12d702d2:/usr/local/tomcat# cp -r webapps.dist/* webapps/
root@448d12d702d2:/usr/local/tomcat# cd webapps
root@448d12d702d2:/usr/local/tomcat/webapps# ls
docs  examples  host-manager  manager  ROOT
root@448d12d702d2:/usr/local/tomcat/webapps# 
root@448d12d702d2:/usr/local/tomcat/webapps# exit
exit

# 提交新的镜像
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker commit -m="调整webapps" -a="wys" 448d12d702d2 tomcat:1.0
sha256:07e43a4b5b9a1892b4a425aa5b25d31cd3366f7450b939dd62f3f5ca0349d4eb

# 启动新的镜像
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker run -it -d -p 8080:8080 tomcat:1.0
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker ps
CONTAINER ID   IMAGE        COMMAND             CREATED          STATUS          PORTS                                       NAMES
b1ee55bd7376   tomcat:1.0   "catalina.sh run"   44 seconds ago   Up 43 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   compassionate_bouman
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker