2024-04-03 22:04:13 +02:00

6.9 KiB

Docker

Docker is a containerization platform that encapsulates an application and its dependencies into a container, ensuring consistent operation across different computing environments. It leverages OS-level virtualization to deliver software in packages called containers, providing isolation and resource efficiency, and facilitating CI/CD practices by streamlining deployment and scaling.

Installation

Docker can be installed on different operating systems. For local workstations, Docker Desktop is the recommended installation. For servers, Docker Engine is the recommended installation.

Docker Desktop

Docker Desktop is a software application that enables developers to build, package, and run applications using Docker containers on their local machines. It provides an easy-to-use graphical interface and includes the necessary tools and components for managing Docker containers, such as the Docker engine, images, and networking capabilities.

For more information, see Docker Desktop

Install Docker Engine

One click installation script:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Run docker as non root user:

sudo groupadd docker
sudo usermod -aG docker $USER

For more information, see Install Docker Engine

Using Docker

Running Containers

COMMAND DESCRIPTION
docker run <image> Start a new container from an image
docker run -it <image> Start a new container in interactive mode
docker create <image> Create a new container
docker start <container> Start a container
docker stop <container> Graceful stop a container
docker kill <container> Kill (SIGKILL) a container
docker restart <container> Graceful stop and restart a container
docker pause <container> Suspend a container
docker unpause <container> Resume a container
docker rm <container> Destroy a container

Container Bulk Management

COMMAND DESCRIPTION
docker stop $(docker ps -q) To stop all the running containers
docker stop $(docker ps -a -q) To stop all the stopped and running containers
docker kill $(docker ps -q) To kill all the running containers
docker kill $(docker ps -a -q) To kill all the stopped and running containers
docker restart $(docker ps -q) To restart all running containers
docker restart $(docker ps -a -q) To restart all the stopped and running containers
docker rm $(docker ps -q) To destroy all running containers
docker rm $(docker ps -a -q) To destroy all the stopped and running containers
docker pause $(docker ps -q) To pause all running containers
docker pause $(docker ps -a -q) To pause all the stopped and running containers
docker start $(docker ps -q) To start all running containers
docker start $(docker ps -a -q) To start all the stopped and running containers
docker rm -vf $(docker ps -a -q) To delete all containers including its volumes use
docker rmi -f $(docker images -a -q) To delete all the images
docker system prune To delete all dangling and unused images, containers, cache and volumes
docker system prune -a To delete all used and unused images
docker system prune --volumes To delete all docker volumes

Inspect Containers

COMMAND DESCRIPTION
docker ps List running containers
docker ps --all List all containers, including stopped
docker logs <container> Show a container output
docker logs -f <container> Follow a container output
docker top <container> List the processes running in a container
docker diff Show the differences with the image (modified files)
docker inspect Show information of a container (json formatted)

Executing Commands

COMMAND DESCRIPTION
docker attach <container> Attach to a container
docker cp <container>:<container-path> <host-path> Copy files from the container
docker cp <host-path> <container>:<container-path> Copy files into the container
docker export <container> Export the content of the container (tar archive)
docker exec <container> Run a command inside a container
docker exec -it <container> /bin/bash Open an interactive shell inside a container (there is no bash in some
docker wait <container> Wait until the container terminates and return the exit code

Images

COMMAND DESCRIPTION
docker image ls List all local images
docker history <image> Show the image history
docker inspect <image> Show information (json formatted)
docker tag <image> <tag> Tag an image
docker commit <container> <image> Create an image (from a container)
docker import <url> Create an image (from a tarball)
docker rmi <image> Delete images
docker pull <user>/<repository>:<tag> Pull an image from a registry
docker push <user>/<repository>:<tag> Push and image to a registry
docker search <test> Search an image on the official registry
docker login Login to a registry
docker logout Logout from a registry
docker save <user>/<repository>:<tag> Export an image/repo as a tarball
docker load Load images from a tarball

Volumes

COMMAND DESCRIPTION
docker volume ls List all vol1umes
docker volume create <volume> Create a volume
docker volume inspect <volume> Show information (json formatted)
docker volume rm <volume> Destroy a volume
docker volume ls --filter="dangling=true" List all dangling volumes (not referenced by any container)
docker volume prune Delete all volumes (not referenced by any container)

Backup a container

Backup docker data from inside container volumes and package it in a tarball archive. docker run --rm --volumes-from <container> -v $(pwd):/backup busybox tar cvfz /backup/backup.tar <container-path>

An automated backup can be done also by this Ansible playbook. The output is also a (compressed) tar. The playbook can also manage the backup retention. So older backups will get deleted automatically.

To also create and backup the container configuration itself, you can use docker-replayfor that. If you lose the entire container, you can recreate it with the export from docker-replay. A more detailed tutorial on how to use docker-replay can be found here.

Restore container from backup

Restore the volume with a tarball archive. docker run --rm --volumes-from <container> -v $(pwd):/backup busybox sh -c "cd <container-path> && tar xvf /backup/backup.tar --strip 1"

Troubleshooting

Networking

docker run --name netshoot --rm -it nicolaka/netshoot /bin/bash