前言
工作中遇到三方闭源的中间件运行起来某项特性不符合需求,但是镜像提供方偏偏又没有将配置文件挂载出来以供修改,这就导致要使软件符合需求地运行只能进入到容器内部修改配置文件后重启,可谓非常之蛋疼。笔者平时对 Docker 接触不多,好在有同事提到 Docker 支持将运行中的容器重新打包为镜像,于是网上搜索资料,大致整理出以下步骤解决上面的问题,故有本文聊作记录,本文就以CentOS7作为演示。
一、容器保存为镜像
1.Docker 提供了 commit
命令支持将容器重新打成镜像文件,其命令格式如下所示:
命令:
docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名[:标签名]
命令行说明:
-a :提交的镜像作者
-c :使用Dockerfile指令来创建镜像
-m :提交时的说明文字
-p :在commit时,将容器暂停
容器名称|容器ID :当前要被打包的容器名称或容器ID
生成的镜像名[:标签名] :指定镜像名称或标签名称
2. 创建测试容器
创建并启动容器:
#拉取镜像
docker pull centos:7
#启动CentOS镜像
docker run --name centos7 --privileged -d --ulimit memlock=-1 -td centos:7 /usr/sbin/init
命令行说明:
--name "centos7" :容器名字
-i :以交互模式运行容器,通常与 -t 同时使用
-t :启动容器后,为容器分配一个命令行,通常与 -i 同时使用
-v :目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录>
-d :守护进程,后台运行该容器
-p :指定端口映射,格式:主机(宿主)端口:容器端口
-P :随机端口映射,容器内部端口随机映射到主机的端口
进入容器:
#进入Docker容器命令:
docker exec -it centos7 /bin/bash
在容器中随便增加一些文件作为测试:
3.将该容器打包成镜像
退出容器
执行打包命令(镜像名必须要全部小写,否则将不能打包)
docker commit -m thisthetextcentos -a hehailong centos7 textcentos7:1.0
命令行说明:
docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名[:标签名]
-m= : 为镜像添加描述信息
-a= : 为镜像添加创建者信息
容器名称|容器ID : 当前要被打包的容器名称或容器ID
生成的镜像名[:标签名] : 指定镜像名称或标签名称
查看镜像列表:
#docker查看镜像命令
docker images
4.运行容器
将打包的镜像在本机Docker验证打包成镜像是否成功:
运行容器:
docker run -it textcentos7:1.0 /bin/bash
二、将镜像备份成.tar文件
1.备份
命令:
docker save -o 保存的PathName 镜像名:标签
将镜像打包,并保存在当前目录下:
#打包备份textcentos7镜像,备份镜像名为mydockercentos.tar
docker save -o ./mydockercentos.tar textcentos7
2.从.tar文件恢复成Docker镜像
先删除原有的textcentos:1.0镜像:
恢复镜像:
#恢复mydockercentos.tar镜像备份文件
docker load -i mydockercentos.tar
命令行解释:
docker load -i :指定导出的文件。
docker load -q :精简输出信息。
三、上传到阿里云仓库
1.阿里云控制台
进入阿里云控制台,找到容器镜像服务,并点击进去。初次进入需要设置远程仓库密码:
2.将镜像提交到阿里云
查看上图阿里云基本信息中的操作指南:
Docker tag的目的是:标记此镜像为阿里云仓库的镜像:
3.从云仓库拉取镜像
先删除原有镜像:
拉取镜像:
运行镜像(另一台docker主机测试,完美部署):
参考文献
Docker 使用-将容器打成镜像_docker将容器打包成镜像-CSDN博客
Docker容器打包成镜像-【如何使用Docker将容器打包成镜像】_CSDN博客
Docker将容器打包成镜像并传输至其他服务器部署(可用于容器重新run) - 007少侠 - 博客园 (cnblogs.com)
评论