Docker Fortran image
Docker images are useful for reproducibility and ease of setup and for software binary distribution on platforms not natively available. For example, it may be desired to distribute a statically-linked binary that will run on any Linux system with compatible CPU architecture and kernel system calls.
To setup and maintain Docker images, it’s useful to have Docker Desktop available on the developer laptop to debug and test Dockerfiles. Read the install instructions particular to the laptop OS to understand OS-specific caveats and features. For example, on Linux laptops, to avoid the need for “sudo” in every command, follow the post-install.
Run a Docker container
Docker commands can be run from the system terminal if desired–all commands in this article assume this. Docker images by default will be downloaded to run locally.
Try the Hello World images, which should auto-download and print a welcome message
docker run hello-worldSearch for a desired image using Docker Desktop or docker search.
Consider the “Official” images first.
Let’s use
Alpine Linux.
docker search alpineGet the desired image
docker pull alpineVerify the images:
docker imagesStart the Docker container:
docker run -it alpine-it- interactive session
Verify the Alpine version running in the container.
It will have a # superuser prompt.
cat /etc/os-releaseSearch for desired APK packages from within the container:
apk update
apk search gfortranVerify the MUSL C library version like:
lddmanage containers
These commands are issued NOT from a system Terminal, not the Docker container.
-
list images:
docker images -a -
list containers (running and stopped):
docker ps -a -
stop a Docker container:
docker stop container_name -
start a Docker container:
docker start container_name -
login to a running Docker container:
docker exec -it container_name -
get container environment variables:
docker exec container_name env -
cleanup unused containers
docker system prune
Each docker exec command is a new shell instance.
Changing directories in one docker exec has no effect on subsequent commands for example.