Crib Sheet: Important Docker commands
Start the Docker deamon on your machine (ECMWF):
sudo systemctl start docker
sudo systemctl restart docker
sudo systemctl status docker
which is actually: sudo /usr/bin/systemctl status docker
Which images are on my machine:
docker images
docker rmi oifs remove image oifs, might need -f option
docker rmi $(docker images -qa) removes all images
docker save -o oifs_image.tar oifs saves image oifs to a tar file
docker load -i oifs_image.tar loads saved docker image into memory
Which containers are running:
docker ps
docker ps -a show all containers
docker rm 6skd897asd removes container beginning with 6sk...
Build docker image:
docker build -t <image name> . uses file called Dockerfile
docker build -t <image name> -f <docker file>
At ECMWF: docker build -t oifs --build-arg http_proxy="$http_proxy" --build-arg ftp_proxy="$ftp_proxy" --build-arg https_proxy="$https_proxy" --build-arg no_proxy="$no_proxy" .
Run docker images in container:
docker run -it ubuntu run interactively with tty output
docker run -it oifs run image oifs interactively
docker run -v /scratch/rd/damk:/scratch:rw -it oifs mount volume $SCRATCH inside container
docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY metview metview allows Metview to open X Window from inside the container
Use Harbor online container registry:
Do this first: docker login eccr.ecmwf.int
The build command below makes an image that can be pushed to harbor: docker build -t eccr.ecmwf.int/openifs/oifs:0.0.1 -f --build-arg http_proxy="$http_proxy" --build-arg ftp_proxy="$ftp_proxy" --build-arg https_proxy="$https_proxy" --build-arg no_proxy="$no_proxy"
Then push it to harbor, manually specifying version number. Careful: Existing version numbers are overwritten! docker push eccr.ecmwf.int/openifs/oifs:0.0.1
Pull image from repository into memory: docker pull eccr.ecmwf.int/openifs/oifs:0.0.1
Dockerfiles
The Dockerfile describe the build process of the image. Examples for these files are provided in the OpenIFS git repository. The naming convention for Dockerfiles is as such:
Dockerfile.oifs<MODELRELEASE>.<GITHASH>.<ARCH>.<TYPE>
MODELRELEASE: string generated from IFS cycle, release number and OpenIFS version , e.g. 40r1v2
GITHASH: first five characters of the OpenIFS repository git commit from which this image is built
ARCH: architecture for which this image is built: x86_64
TYPE: dev, test or build. build to be used only for images from existing OpenIFS releases.