Docker 镜像导出命令
网上搜到全部镜像导出为一个包的命令,没有搜到每个独立打包的命令,自己写了一下。
导出文件名为 : 镜像标签 + 创建时间 + 系统 + 架构 + 文件大小 + sha + 替换非法字符
,自用足够了。
# 1. 替换日期 : `(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})` --> `\1\2\3T\4\5\6` # 匹配到日期格式后重新连接 # sed 不支持 `\d`
# 2. 截取ID : `sha256:(\w{10})\w{54}` --> `\1` # 64位拆分为前10位与后54位,仅保留前10位即可
# 3. 去除无用字符 : `[|]` --> `` # 去除包裹镜像名称的`[]`符号
# 4. 文件名合法化 : `/:*?<>|\"` --> `_` # 替换掉非法字符
# 初始化格式字符串,之后再使用每个语句
$ IMAGES_FORMAT="{
{.Repository}}:{
{.Tag}}"; \
INSPECT_FORMAT="{
{.RepoTags}}_{
{.Created}}_{
{.Os}}-{
{.Architecture}}_{
{.Size}}_{
{.ID}}.tar"; \
REGEX_TIME="s#\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9T]\{5\}\):\([0-9]\{2\}\):\([0-9]\{2\}\)#\1\2\3\4\5#g;"; \
REGEX_ID="s#sha256:\(\w\{10\}\)\w\{54\}#\1#g;"; \
REGEX_REMOVE="s#\[\|\]##g;"; \
REGEX_REPLACE="s#[/:*?<>|\\\\\"]#_#g";
# 显示单个镜像名称 # "hello-world:latest"
$ IMAGE="hello-world"; docker images --format ${IMAGES_FORMAT} ${IMAGE};
# 显示单个镜像原始文件名 # "[hello-world:latest]_2023-05-02T16:49:27Z_linux-amd64_13256_sha256:d2