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 for the Docker image. Examples for several of 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 bld. bld (build) to be used only for images from existing OpenIFS releases.
Example: Dockerfile.oifs40r1v2.41537.x86_64.bld