本帖最后由 CQxxk 于 2020-9-6 11:08 编辑
前面提到了镜像是容器运行的前提,创建镜像的方法主要有三种:基于已有镜像运行的容器创建新镜像、基于本地模板导入、基于Dockerfile创建,本文主要介绍基于已有镜像运行的容器创建新镜像。镜像是多层存储,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加上容器运行时的存储层。
当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。 Docker 使用docker commit 命令将容器的存储层保存下来成为镜像。也就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。后续我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。
命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS说明:
例如在Ubuntu原始镜像中将官方软件源更新为163软件源后保存为新的镜像可以通过一下步骤实现: 1、docker run -it ubuntu:18.04 /bin/bash #运行本地镜像运行Ubuntu容器 2、使用以下命令修改sources.list文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse" > /etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list 3、在容器内查看修改后的sources.list文件
4、使用commit提交为新的镜像,提交作者为:xiaokang,提交说明文字:update source.list ,并将镜像标记为:ubuntu:update-apt-source 命令:docker commit -a "xiaokang" -m "update source.list" -p c83bae60cc42 ubuntu:update-apt-source #c83bae60cc42为当前运行的docker的ID
5、使用新的镜像文件创建容器,检查source.list文件
可以看到使用新的镜像运行的容器内,source.list已经修改了。 |