Skip to content

Docker

Installation

(
  set -x; sudo apt-get update &&
  sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release &&
  DIST=$(lsb_release -is | tr '[:upper:]' '[:lower:]') &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(armhf\)\(64\)\?.*/\1\2hf/' -e 's/aarch64$/arm64/')" &&
  curl -fsSL "https://download.docker.com/linux/${DIST}/gpg" | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg &&
  echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/${DIST} $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  sudo apt update &&
  sudo apt install -y docker-ce docker-ce-cli containerd.io &&
  sudo usermod -aG docker $(whoami)
)

Test that sudo is not needed

docker run --rm hello-world

qemu-user-static

uname -m
# x86_64
docker run --rm -t arm64v8/ubuntu uname -m
# standard_init_linux.go:211: exec user process caused "exec format error"
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --rm -t arm64v8/ubuntu uname -m
# aarch64

buildx

mkdir ~/.docker/cli-plugins
wget https://github.com/docker/buildx/releases/download/v0.5.1/buildx-v0.5.1.linux-amd64 -O ~/.docker/cli-plugins/docker-buildx
chmod a+x ~/.docker/cli-plugins/docker-buildx
# Set buildx as default
docker buildx install
# Create builder
docker buildx create --name mybuilder
# Switch to the new builder
docker buildx use mybuilder
# Inspect it
docker buildx inspect --bootstrap

Prune all

docker system prune --all

ssh certs

curl --remote-name --time-cond cacert.pem https://curl.se/ca/cacert.pem

Shell

# Debian
docker exec -it <container name> /bin/bash
docker run -it --rm <image name> /bin/bash
# alpine
docker exec -it <container name> /bin/ash
docker run -it --rm alpine:3.13.1 <container name> /bin/ash

Stop all containers

docker container stop $(docker container ls -aq)

Remove all stopped containers

docker container rm $(docker container ls -aq)

To delete all containers including its volumes

docker rm -vf $(docker ps -a -q)

To delete all the images,

docker rmi -f $(docker images -a -q)

Remember, you should remove all the containers before removing all the images from which those containers were created.

Copy Multiple Files

COPY ["__BUILD_NUMBER", "README.md", "gulpfile", "another_file", "./"]

docker-compose

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

hadolint

$ brew install hadolint

Pull by Digest

docker run -it --rm python:3.7.10-slim-buster@sha256:482d4cc1ae3c95d0f4dd25005e22a17f22f693ca7fb07bb7870ff9354844f738 /bin/bash

Run on Current Directory

docker run --rm -it -v $(pwd):/charts --entrypoint "/bin/bash" -w /charts k8s-at-home/charts-unit-test -l -c "bundle exec m -r ./test/charts"

Check if Image Exists

docker inspect --type=image treeder/hello.rb:nada
Error: No such image: treeder/hello.rb:nada
[]

Insecure Registries

sudo nano /etc/docker/daemon.json
{
  "insecure-registries" : ["registry.192.168.1.201.nip.io"]
  "insecure-registries" : ["registry.192.168.1.202.nip.io"]
  "insecure-registries" : ["registry.192.168.1.203.nip.io"]
  "insecure-registries" : ["registry.192.168.1.204.nip.io"]
  "insecure-registries" : ["registry.192.168.1.205.nip.io"]
  "insecure-registries" : ["registry.192.168.1.206.nip.io"]
  "insecure-registries" : ["registry.192.168.1.207.nip.io"]
}

References