docker 镜像命令

作者: 鲁智深 分类: docker 发布时间: 2018-08-28 22:34

docker images 就是基本的查看镜像命令

镜像是什么?

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

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

镜像就像千层饼

镜像就像千层饼

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

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

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

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

rootfs bootfs

rootfs bootfs

问题:平时我们安装的ubuntu虚拟机要好几个G,为什么docker这里才83mb?

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

来下载一个redis试试

下载一个redis镜像

下载一个redis镜像

be8881be8156: Pull complete
d6f5ea773ca3: Pull complete
735cc65c0db4: Pull complete
787dddf99946: Pull complete
0733799a7c0a: Pull complete
6d250f04811a: Pull complete

上面pull下来的就是一层层的镜像文件系统

文件系统

文件系统

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

镜像commit操作

docker commit 提交容器副本使之成为新的镜像,通常情况下我们直接运行一个镜像id(ps:比如redis)生成一个容器,commit则是对redis容器进行自定义修改后在封装成一个镜像,通过生成的新的镜像,也可以运行一个容器。

docker commit -m=”提交描述信息” -a=”作者” 容器id 要创建的目标镜像名:[标签名]

1
2
# 启动镜像-p指定端口映射 8888是docker对外暴露的端口,6379是redis默认端口
docker run -it -p 8888:6379 redis
docker指定端口启动redis

docker指定端口启动redis

1
2
# 查看正在运行的容器
docker ps
redis端口

redis端口

可以看到端口8888映射到了6379,也可以用随机端口映射

1
2
# -P 随机端口映射
docker run -it -P redis

重新打包一个镜像

1
2
3
4
5
6
docker ps
docker commit -a="ayf" -m="redis dev" 容器id  ayfredis:1.0
docker images
docker run -it -p 7777:6379 镜像名:标签
或者后台方式启动
docker run -d -p 6666:6379 镜像名:标签
打包镜像

打包镜像

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

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