Docker教程小白实操入门(7)--基于Commit定制镜像

一、需求

当某个镜像无法直接满足需求时,就可以在这些镜像的基础上修改,然后保存为新的镜像。

实例:在镜像busybox:latest的基础上,新增了一个hello.txt文件,形成一个镜像busybox:v1

二、拉取最新镜像,创建容器,对容器进行修改

# 拉取busybox:latest镜像,并新建容器container1,最后在容器里新建了一个文件hello.txt
docker run --name container1 busybox touch hello.txt

三、将“对容器的修改”保存为镜像

docker commit [OPTIONS] CONTAINER [镜像名]
  • [OPTIONS]:命令选项,其中--author指定作者,--message制定commit的信息;
  • CONTAINER:需要commit的容器;
  • 镜像名:新镜像的名字,以<仓库名>:<标签>的方式来指定。如果不显示设置,将默认为None:None。(这个代表没有指定镜像名)

本例为:

# 将container1容器保存为busybox:v1镜像
docker commit container1 busybox:v1

查看效果
 

# docker exec进入了该容器内部,实际上就是进入容器另开一个终端。
# 若报错,可将/bin/bash修改为/bin/sh
docker run -it --name container5 busybox:v1 /bin/bash

# 查看所有文件
ls

四、使用commit定制镜像的缺陷

在实际的环境中,一般不会使用Commit去构建一个镜像:

1. 由于commit会将对容器做出所有的修改都保存为镜像,换句话说,就是在原有镜像的基础上,再叠加上容器的存储层(该存储层仅仅保存了容器所做的修改),将这些内容构成一个新的镜像。

2. docker commit意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。

更好的定制镜像的方法:Dockerfile!!

参考:https://www.educoder.net/shixuns/4uyn5ebp/challenges

猜你喜欢

转载自blog.csdn.net/u013288190/article/details/108908438
今日推荐