Back
Close

How to Extract Files from Docker Container

Donotalo
4,695 views

Prerequisites

This tutorial will be using several software packages. How to use these packages are outside of the scope of this tutorial. Nevertheless, the prerequisites to understand this tutorial are listed below:

  • Proficiency in compiling code, preferably in C++
  • Knowledge of the CMake software build system
  • Linux
  • Shell scripting, preferably in Bash
    • Bash documentation link
  • Docker

Problem Statement

There is a source code repository. Compile the source code in a Docker container. Extract the output of the compilation in the host system. Hence, the host system will only require Docker to be installed to compile the code and get output.

The source code is in C++. The repository is set up to use CMake to compile the code. There is a build script (build.sh) in the repository written for Bash. Calling this script will compile the code. The build directory, where the output will be located, can be found in the build script.

Host system

The code in this tutorial was run on Debian Linux with Docker CLI installed in it.

The Dockerfile

Let's start with the Dockerfile. It will define a Docker image that will be used to run a container.

FROM debian:12.1

# Install necessary software packages and clean up
RUN apt update && apt install -y \
  cmake \
  gcc \
  g++ \
  git && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/*

# Define working directory
WORKDIR /src

# Download source code
RUN git clone https://[email protected]/donotalo/starter.git

# Mark the build script as executable
RUN chmod +x starter/build.sh

# Start bash shell for an interactive session
CMD ["/bin/bash"]

Save this file as Dockerfile.

Building a Docker Image

Let's have a convenient script to help with various docker commands. Write a file called docker.sh with the following code:

#!/usr/bin/bash

DEFAULT_REPO=default-repo
DEFAULT_TAG=default-tag

FUNCTION=$1

# Build docker image
build()
{
  repo="${1:-${DEFAULT_REPO}}"
  tag="${2:-${DEFAULT_TAG}}"
  image=${repo}:${tag}

  docker build \
    --file Dockerfile \
    --metadata-file docker-build.log \
    --progress auto \
    --tag "${image}" \
    .
}

${FUNCTION} $2 $3

A Docker image can be built by invoking the following command:

./docker.sh build <name> <tag>

Replace <name> & <tag> with your desired name and tag for the image. Once built, it can be listed by docker images command.

Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io