The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!/usr/bin/perl
use strict;
=head1 NAME
docker-construct - Construct the filesystem of an exported docker image.
=head1 SYNOPSIS
docker-construct [--quiet|-q] [--include_config] IMAGE DIR
=head1 DESCRIPTION
docker-construct reconstructs the filesystem of an exported docker image. That
is, it takes a tarball exported by C<docker save> and recreates the filesystem
with all of the layers flattened in a directory. C<IMAGE> is the path to
the image tarball to use and C<DIR> is the directory to extract the image
into.
=head1 OPTIONS
=over 4
=item * I<-q>, I<--quiet>
If specified, will not output progress on stderr.
=item * I<--include_config>
If specified, the image's config json file will be added to the root of the
extracted filesystem as F<config.json>. (If there happened to be file with
that name there anyway, this will overwrite it).
=back
=cut
use Getopt::Long qw(:config auto_help);
use Pod::Usage qw(pod2usage);
use Docker::Construct qw(construct);
my ($quiet, $config);
GetOptions(
'q|quiet' => \$quiet,
'include_config' => \$config
);
my ($image, $dir) = @ARGV;
pod2usage "Invalid arguments." unless (defined $image && defined $dir);
eval {
construct(
image => $image,
dir => $dir,
quiet => $quiet,
include_config => $config
); 1;
};
if ($@) {
print STDERR "docker-construct: $@";
exit 1;
}
exit;
=head1 SEE ALSO
L<Docker::Construct>
=head1 AUTHOR
Cameron Tauxe, C<< <camerontauxe at gmail.com> >>
=head1 LICENSE AND COPYRIGHT
This software is copyright (c) 2020 by Cameron Tauxe.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut