diff options
-rw-r--r-- | include/docker.h | 5 | ||||
-rw-r--r-- | src/docker.c | 24 |
2 files changed, 26 insertions, 3 deletions
diff --git a/include/docker.h b/include/docker.h index 3c7dff6..413bf6d 100644 --- a/include/docker.h +++ b/include/docker.h @@ -10,6 +10,9 @@ //! Flag for docker buildx #define OMC_DOCKER_BUILD_X 1 << 2 +//! Compress "docker save"ed images with a compression program +#define OMC_DOCKER_IMAGE_COMPRESSION "zstd" + struct DockerCapabilities { int podman; //!< Is "docker" really podman? int build; //!< Is a build plugin available? @@ -79,6 +82,6 @@ int docker_exec(const char *args, unsigned flags); */ int docker_build(const char *dirpath, const char *args, int engine); int docker_script(const char *image, char *data, unsigned flags); -int docker_save(const char *image, const char *destdir); +int docker_save(const char *image, const char *destdir, const char *compression_program); #endif //OMC_DOCKER_H diff --git a/src/docker.c b/src/docker.c index 32c7b60..955428b 100644 --- a/src/docker.c +++ b/src/docker.c @@ -68,10 +68,30 @@ int docker_build(const char *dirpath, const char *args, int engine) { return docker_exec(cmd, 0); } -int docker_save(const char *image, const char *destdir) { +int docker_save(const char *image, const char *destdir, const char *compression_program) { char cmd[PATH_MAX]; + memset(cmd, 0, sizeof(cmd)); - sprintf(cmd, "save %s -o \"%s/%s.tar\"", image, destdir, image); + + if (compression_program && strlen(compression_program)) { + char ext[255]; + memset(ext, 0, sizeof(ext)); + if (startswith(compression_program, "zstd")) { + strcpy(ext, "zst"); + } else if (startswith(compression_program, "xz")) { + strcpy(ext, "xz"); + } else if (startswith(compression_program, "gzip")) { + strcpy(ext, "gz"); + } else if (startswith(compression_program, "bzip2")) { + strcpy(ext, "bz2"); + } else { + strncpy(ext, compression_program, sizeof(ext) - 1); + } + sprintf(cmd, "save \"%s\" | %s > \"%s/%s.tar.%s\"", image, compression_program, destdir, image, ext); + } else { + sprintf(cmd, "save \"%s\" -o \"%s/%s.tar\"", image, destdir, image); + + } return docker_exec(cmd, 0); } |