如何保存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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注