前面讲通过 Dockefile 可以制作自己的镜像,通过镜像创建容器启动服务,有时候需要修改容器里面的内容,比如我们想改点BUG。 我们可以直接在容器里面修改,验证通过后,基于现有的容器创建一个新的镜像。
docker commit 命令是从容器创建一个新的镜像, 基本语法
docker commit [OPTIONS] 容器名称或id 镜像名称:tag
PTIONS参数说明: -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。
先通过基础镜像,启动一个容器后
[root@VM_0_2_centos ~]# docker images
django_yoyo latest 984e5b0a9896 7 weeks ago 1.2GB
[root@VM_0_2_centos ~]# docker run -d -p 8004:8000 --name web_yoyo1 django_yoyo
874813d5c13fa002f6c5886a6b4c2cbc7d96639a3c8ef4de9154d4352b61b70b
docker exec 进入到容器
docker exec -it web_yoyo1 /bin/bash
可以查看容器内部的文件
root@874813d5c13f:/code# ls
1 Dockerfile LICENSE __pycache__ djoflower.out 2 images manage.py requirements.txt suite uwsgi.ini
ApiManager HttpRunnerManager README.md celerybeat.pid hrun_case.zip logs reports static templates
root@874813d5c13f:/code#
我想通过vi 去编辑文件
root@874813d5c13f:/code# vi requirements.txt
bash: vi: command not found
发现没有vi 命令 ,出现bash: vi: command not found
使用apt-get工具下载vim命令行工具
apt-get update
apt-get -y install vim
等下载完成后,就有vi命令编辑了
最后exit退出容器,回到宿主机上
前面在容器里面做了一些修改,安装了vim 命令行工具,接着我们基于前面的容器构建一个新的镜像
使用docker commit 创建新的镜像,先查看容器id
[root@VM_0_2_centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
874813d5c13f django_yoyo "python..." 38 minutes ago Up 38 minutes 0.0.0.0:8004->8000/tcp web_yoyo1
通过容器的 CONTAINER ID 值874813d5c13f 或者NAMES名称 web_yoyo1来创建新镜像
[root@VM_0_2_centos ~]# docker commit web_yoyo1 new_web:v1.0
sha256:ee5f78f470f9c715b0df77eead2dececad6d998b615138f69acfc28f8e95cd03
也可以带上-a和-m参数添加镜像提交信息
[root@VM_0_2_centos ~]# docker commit -a "author_yoyo" -m "add vim" web_yoyo1 new_web:v1.1
sha256:078d76416146e0901a948cb8ca9ec3c79425360767caa03602c6810d54e4f25b
最后docker images 查看刚才构建的本地镜像
[root@VM_0_2_centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new_web v1.0 ee5f78f470f9 About a minute ago 1.24GB
new_web v1.1 078d76416146 22 minutes ago 1.24GB
django_yoyo latest 984e5b0a9896 7 weeks ago 1.2GB
这样我们的新镜像就构建成功了