无Dockerfile制作镜像
原创
©著作权归作者所有:来自51CTO博客作者lemon时雨的原创作品,如需转载,请与作者联系,否则将追究法律责任
在日常工作中经常会遇到一个现有的镜像,需要对这个镜像进行改造,但是又没有这个构建这个镜像的dockerfile,在这种情况下如何制作出符合自己要求的新镜像呢,以下是我的制作思路,仅供参考和自我记录使用。
一、启动并进入原有镜像
在运行容器时,可以加-dit
参数,并在后面增加一个驻留在进程中长期运行的命令(如tail -f /dev/null)就可以保证容器不关闭了
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker run -dit --name ubuntu2 ubuntu:19.10 tail -f /dev/null
a0d3c58fc68b139f63355594dd91c2d047b84a3d56880418eedcd8fedb6307b6
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0d3c58fc68b ubuntu:19.10 "tail -f /dev/null" 5 seconds ago Up 4 seconds ubuntu2
使用 docker exec -it CONTAINER_ID shell类型(如bash) 来进入容器并保持终端
docker exec -it 49fb89680eeb645840e512aae797c9a4af2bd27362b07360a77744f5acc47bea /bin/sh
sh-4.2#
二、修改通过镜像启动的容器
进入容器后可以在容器中进行操作,完成自己的需求
有时在离线环境下,容器内无法直接通过wget或yum等命令安装软件,则可以使用docker cp
命令,从外部拷贝安装包或二进制文件至容器内
dokcer cp 需要拷贝的文件 容器ID:容器内目录
三、制作并导出镜像
当容器内修改完毕后,我们可以重新打开一个终端,利用docker commit
命令,将现有容器制作成镜像
docker commit 容器ID harbor.cfuture.shop/c2f/fe-build:v8
镜像制作完成后,可以通过docker save
命令将镜像导出成tar包,至此,无Dockerfile制作镜像就完成了
docker save harbor.cfuture.shop/c2f/fe-build:v8 -o febuild.tar