docker容器导出,并将导出镜像在另外一台设备上运行起来

第一步:导出容器镜像
在源设备上已经存在部署好的docker容器,现在需要将其作为一个母镜像,在其他设备上进行导入,其实就是像作为一个安装的镜像。
在这里首先需要将镜像导出。

docker ps -a --no-trunc #不折叠任何列内容
CONTAINER ID                                                       IMAGE         COMMAND                           CREATED      STATUS          PORTS                                                                                                                 NAMES
88e1e9ea182a19fbd258b7146f18d65a8ab95aca9199392c26c7e3af2f1b8f35   nginx:1.15    "nginx -g 'daemon off;'"          2 days ago   Up 28 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:5800->5800/tcp, :::5800->5800/tcp   nginx
21ac1e8e32f4f6ef15663325973a27d4b6bbd569862f102839a2ba6d0f43cc05   php:7.4-fpm   "docker-php-entrypoint php-fpm"   2 days ago   Up 28 minutes   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp                                                                             php-fpm

##导出容器
docker export -o nginx-1.15.tar nginx  # docker export -o 导出镜像存放的地址  container_id/name

这里需要将容器的command列下的内容记下来后面需要用到.
第二步:将导出镜像上传到需要导入的设备,自行解决。
第三步:导入容器
1.导入容器镜像

docker import nginx-1.15.tar nginx:1.15 ## docker import 容器镜像地址 容器导入镜像名字
docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        1.15      42d88544a231   3 seconds ago    108MB

说明 容器名字冒号后面是tag,作为区分使用
2.启动镜像
这里基本和新部署docker容器一致,只有部分区别。

docker run --name nginx -d \ #--name 命名容器
--restart=always \ #启动模式
--network docker-net \ #使用的docker网络,
-p 443:443 \ # 映射端口,宿主机端口:容器内端口
-p 80:80 \
-p 5800:5800 \
-v /home/work/web:/var/www/html \ #映射目录 宿主机目录:容器类目录
-v /home/work/docker-conf/config/nginx/conf.d:/etc/nginx/conf.d/ \
-v /home/work/docker-conf/config/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/work/docker-conf/logs/nginx:/var/log/nginx/ \
 nginx:1.15 nginx -g 'daemon off;' # 使用的镜像 镜像名:镜像tag 

重点来了,在镜像名后面跟的,就是第一步中记录下来的command列的内容,这是重点,这里不添加的话,会让容器无法启动,或者一直是正在启动的状态。

### 将Docker容器导出镜像的方法 为了将Docker容器转换成一个新的镜像,有两种主要方法:`docker commit` 和 `docker export/save/import` 组合。然而需要注意的是,不同的方式有着各自的局限性和适用场景。 #### 使用 `docker commit` 当希望保存容器的状态创建新的镜像时,可以直接利用 `docker commit` 命令来实现这一目标: ```bash docker commit <container_id> new_image_name:new_tag ``` 这种方式能够保留容器运行期间所做的更改,将其封装到新镜像之中。不过值得注意的是,通过此命令生成的新镜像不会包含原始镜像中的历史层信息以及一些元数据配置,比如环境变量设置等[^1]。 #### 利用 `docker export/save/import` 流程 另一种方案涉及三个独立的操作——先使用 `docker export` 把容器的内容打包成 tarball 文件;再借助 `docker import` 或者 `docker load` 来加载这个压缩包从而形成新的镜像对象。具体操作如下所示: - **Export**: 导出当前容器文件系统的快照至本地磁盘上的 .tar 文件。 ```bash docker export -o exported_container.tar <container_id> ``` - **Import/Load**: 如果是从其他地方获取了一个由 `export` 创建出来的 `.tar` 文件,则应该采用 `import` 方法重建镜像; 若该 `.tar` 是经由 `save` 得来的则需调用 `load` 进行恢复处理。 对于前者, ```bash cat exported_container.tar | docker import - imported_image_name ``` 而对于后者 ```bash docker load -i saved_images.tar ``` 重要提醒,在实践中发现直接运用上述两种途径之一可能无法完全重现原容器的所有特性,特别是有关网络设定或是挂载卷的信息可能会丢失。因此建议优先考虑基于 `commit` 的做法除非有特殊需求指向另选他法[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值