查看镜像、容器、数据卷所占用的空间
docker system df
镜像是多层存储,每一层是在前一层的基础上进行修改;
而容器同样也是多层存储,是在以镜像为基础,在其基础上加一层作为容器运行时的存储层
一、镜像相关:
列出本地已下载的镜像,默认展示顶层镜像:
docker image ls
列出包括中间层在内的所有镜像:
docker image ls -a
删除镜像:
docker image rm
检索镜像:
docker search image_name
显示镜像历史:
docker history image_name
拉取镜像:若不写默认地址为Docker Hub,命令的输出结果最后一行给出了镜像的完整名称
docker pull ubuntu:16.04
发布镜像:
docker push new_image_name
二、构建镜像
进入容器
docker exec命令
docker exec -it webserver bash
root@7603bd94b5e:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@27603bd94b5e:/# exit
exit
有时候,采用上面命令进入容器会报错,error为:OCI runtime exec failed: exec failed: container_linux.go:367: starting container process caused: exec: "bash": executable file not found in $PATH: unknown
所以采用 docker exec -it 18ad /bin/sh
情况一:采用docker commit 慎用
docker commit \ --author "Joe Jiang <hijiangtao@gmail.com>" \ --message "modify: Nginx default page to Hello Docker" \ webserver \ nginx:v2
上面的改动都会被记录于容器存储层里,而Docker提供了一个docker commit命令,可以将容器的存储层保存下来成为镜像,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像,以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。
docker commit不是很推荐使用
1、由于commit命令的执行,有很多文件被改动或者添加,这还仅仅是比较简答的操作,如果是安装软件包、编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像极为臃肿。
2、使用 commit 生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。
3、不符合分层存储的概念,即任何修改的结果仅仅是在当前层进行标记,不会改动上一层,如果采用docker commit
制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,因为所删除的上一层东西不会丢失,会一直跟随着这个镜像。
情况二:采用Dockerfile
Dockerfile 很简单,一共就两行。涉及到了两条指令,FROM 和 RUN
FROM制定基础镜像,如果是以scratch为基础镜像,意味着不以任何镜像为基础,是一个空白镜像,接下来所写的指令将作为镜像第一层存在
Dockerfile中每一个指令都会建立一层,RUN也不例外,每一个RUN的行为,就和我们刚才手工建立镜像是一样的,新建立一层
,在其上执行这些命令,执行结束后,commit
这一层的修改,构成新的镜像,一般编写一个RUN即可,使用&&将各个所需的命令串联起来
最后添加了清理工作的命令,删除了为了编译构建所需要的软件,清理了所有下载、展开的文件,并且还清理了apt
缓存文件。这是很重要的一步,我们之前说过,镜像是多层存储,每一层的东西并不会在下一层被删除,会一直跟随着镜像。因此镜像构建时,一定要确保每一层只添加真正需要添加的东西,任何无关的东西都应该清理掉
构建镜像:
docker build -t nginx:v3 .
注意,在nginx:v3后面有一个 . 表示当前目录,而Dockerfile就在当前目录
当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件
参考文章:
https://hijiangtao.github.io/2018/04/17/Docker-in-Action/
https://yeasy.gitbook.io/docker_practice/basic_concept/repository
网友评论