docker小白第四天

docker小白第一天

什么是镜像

1、是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。

2、只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

镜像分层

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

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

Docker镜像加载原理

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

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

3、dokcer底层还有rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

docker镜像的理解

docker镜像层都是只读的,只有容器层是可写的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作"容器层","容器层"之下的都叫"镜像层"。

docker的commit命令

docker类似于一个最小型的linux机,仅仅保留了内核与极少量的操作命令。

bash 复制代码
docker commit提交容器副本使之成为一个新的镜像。
docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:[版本名]

例如,docker pull ubuntu下拉一个ubuntu镜像,然后docker run -it ubuntu /bin/bash 以交互式启动一个新的容器,但是该容器因为是极小linux内核,无法识别vim命令。

此时执行如下两命令

bash 复制代码
apt-get update
更新包管理工具,注意系统不一样,包管理工具不一样,ubuntu用apt
apt-get install vim
安装需要的vim包

安装完毕后,可以看到已经识别vim命令

然后commit提交我们的容器副本使之成为一个新镜像。

bash 复制代码
docker commit -m="add vim cmd" -a="cz" b7448758ee47 testmyubuntu:1.0
注意:镜像名字只支持小写字符。

可以看到刚刚自己生成的镜像,另外因为加了vim包,在size上,与原始的ubuntu镜像相比,大了100多MB。

启动新生成的镜像,与原来的做对比。

bash 复制代码
docker run -it ubuntu /bin/bash 
用原始ubuntu生成容器
docker run -it 镜像ID /bin/bash 
用自己生成的镜像进行新建容器

可以看到对比,自己新生成的镜像新建容器后,多了vim功能。

镜像分层

最大的一个好处就是共享资源,方便复制迁移,就是为了复用。比如说有多个镜像都从相同的base原始镜像构建而来,那么Docker Host只需在磁盘上保存一份base镜像;同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。新镜像是从base镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。

本地镜像发布到阿里云

登录阿里云

进入个人的容器镜像仓库

创建个人私有容器镜像仓库

创建个人实例后,创建命名空间。

镜像仓库选中刚才的空间,新建镜像仓库。

填写完相关信息后进入下一步,选择本地仓库

即可看到生成了一个仓库,并且自动生成了一些命令。

尝试推送自己生成的镜像

然后复制此处的代码,进入本地主机。依次完成登录阿里云仓库和推送镜像。

登录仓库

打包镜像,记住模板命令中的"中括号"要去掉

推送镜像包到阿里云容器镜像仓库

尝试下载自己的镜像

先删掉本地所有的镜像,然后拉取刚刚上传的镜像,生成新容器,执行vim命令进行测试。


相关推荐
水冗水孚8 分钟前
你用过docker部署前端项目吗?Tell Me Why 为何要用docker部署前端项目呢?
ubuntu·docker·容器
飞询23 分钟前
docker 部署 sftp
运维·docker
小Wang21 小时前
npm私有库创建(docker+verdaccio)
前端·docker·npm
LH_R1 天前
OneTerm开源堡垒机实战(四):访问授权与安全管控
运维·后端·安全
Raymond运维1 天前
MariaDB源码编译安装(二)
运维·数据库·mariadb
JuiceFS2 天前
从 MLPerf Storage v2.0 看 AI 训练中的存储性能与扩展能力
运维·后端
chen9452 天前
mysql 3节点mgr集群部署
运维·后端
LH_R2 天前
OneTerm开源堡垒机实战(三):功能扩展与效率提升
运维·后端·安全
dessler2 天前
Hadoop HDFS-高可用集群部署
linux·运维·hdfs
少妇的美梦3 天前
logstash教程
运维