本文主要记录自己在学习使用docker过程中的一些指令操作,大多是解决某些比较常见的问题,但是又一时无法联想起来的命令操作。
问题及解决方式记录
20190313-无网络或特殊情形下的docker镜像打包存储
解决方式一:利用commit和save指令将镜像达成tar包,然后利用load指令进行加载,具体命令如下:
列出机器上所有容器(这里就包括正在运行和已经停止两种类型)
$:docker ps -a将==选定的容器==打包成镜像
$:docker commit xxxxx(需要打包成镜像的container ID) xxx(新打包镜像的名称)将镜像存储到特定的位置
$:docker save xxx(新打包镜像名) > /path/to/save/image/xxx.tar将文件导入镜像库中
$:docker load < /path/to/save/image/xxx.tar- 至此即可在无网状态进行容器迁移操作
CHEN之提醒:container和image是dockers中比较容易混淆的两个概念,image运行起来之后才是container,具体的区别参见:docker原理学习记录-image vs container
解决方式二:利用docker私有仓库的方式进行打包上传和下载操作,该方式较方式一要复杂一些,但是这种方式是更加规范和官方的镜像管理方式,能够实现集中化的镜像管理,具体搭建方式如下:
问题反思
- Question1:这里有一个很严重的问题,进行容器打包操作的时候,容器的状态有无规定?是否需要容器已经是exited状态?
Answer:之所以想到这个问题是因为如果容器运行时,会生成一个container层,用户在容器中进行的所有操作都记录在容器层中,且基础镜像不会因为各个容器改变,因此,如果需要对更改后的容器进行打包操作,一般情况是需要在exited状态进行打包操作的。 - Question2:
- Question1:这里有一个很严重的问题,进行容器打包操作的时候,容器的状态有无规定?是否需要容器已经是exited状态?
参考链接
打包镜像并使用文件导入
https://wiselyman.iteye.com/blog/2153202
建立docker私有库(docker registry)
https://wiselyman.iteye.com/blog/2153083