如何保存docker镜像
很多情况下,当我们运行docker镜像之后,所做的修改再某次restart
之后,就必须重新docker start
+ contain ID
来重新运行,因为直接docker run
+ contian name
的方式启动的并不是之前那个改动过的镜像。
又或者我们需要分享制作好的镜像,本教程介绍一下方法
背景
默认的official版本docker php-fpm
是不支持mysql等插件的,当我们在新机器上运行docker pull php:7.4-fpm
之后,可能会需要在该docker容器中运行
docker-php-ext-install mysqli
docker-php-ext-enable mysqli
换台机器需要重复这个操作,以下是解决方法:
Step 1
进入docker仓库服务器(例如docker.io)建立一个新的仓库地址,这里我们建立:
https://hub.docker.com/repository/docker/hemingway2003/php_fpm_mysql_plugin
Step 2
查看本地容器ID:
$ docker ps -a
返回:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8c28791ae12 debian "bash" 15 seconds ago Exited (0) 14 seconds ago dreamy_lehmann
Step 3
使用建立的仓库地址hemingway2003/php_fpm_mysql_plugin
保存该容器状态:
$ docker commit a8c2 hemingway2003/php_fpm_mysql_plugin
- docker对于ID是很宽松的,只要可以让docker区分出来,就算只写第一个字母
a
都是可以的
Step 4
提交:
$ docker push hemingway2003/php_fpm_mysql_plugin
One more thing
当然,如果你需要真正的保存镜像到本地,那么你可以直接:
$ docker save -o contain_save.tar hemingway2003/php_fpm_mysql_plugin
- 需要注意的是,此处必须使用镜像名而非容器ID,更改过的容器可以通过
commit
的方式保存,由于不需要docker push
,所以这个commit
的名字是几乎任意的(不可以保存成已有镜像的名字)
当需要导入时:
$ docker load --input contain_save.tar
或者
$ docker load < contain_save.tar