~/Blog

Brandon Rozek

Photo of Brandon Rozek

PhD Student @ RPI studying Automated Reasoning in AI and Linux Enthusiast.

Advanced Docker Image Construction with Bash

Published on

Updated on

Warning: This post has not been modified for over 2 years. For technical posts, make sure that it is still relevant.

On current versions of Docker, you can’t mount volumes during image construction. This poses an issue for me as I don’t want to replicate gigabytes of data already existing on my disk when it won’t appear on the final build. Therefore, instead of building an image with a traditional Dockerfile, we’re going to use a bash script on a running base image container and export the filesystem to create the image from.

So first run the base image with the mounts that you want

docker run -v /mnt:/mnt -td --name containername baseimage /bin/bash

Then copy whatever setup script you have and execute it on the running container

docker cp setup containername:/setup
docker exec -it containername /setup

Once the setup script finalizes, we can export the container filesystem into a file called image.tar

docker export --output="image.tar" containername

Once we’ve exported the filesystem, we can get rid of the existing container

docker stop containername && docker rm containername

Now create a Dockerfile with the following:

FROM scratch
ADD image.tar /
CMD ["bin/bash"]

Now you can create the image by building the Dockerfile

docker build -t finalimagename .
Reply via Email Buy me a Coffee
Was this useful? Feel free to share: Hacker News Reddit Twitter

Published a response to this? :