Docker - mwicat/personal GitHub Wiki

Install

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose

Install extra packages

RUN apt-get update && apt-get install -y procps netcat curl lsof

Post install

sudo groupadd docker
sudo usermod -aG docker $USER

Docker container as alias

alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli'

Wait for another service

Override dockerfile entrypoint

ENTRYPOINT ["/bin/bash","-c","while true; do echo sleep; sleep 1; done"]

Pull from registry and run command

docker run -it --entrypoint /bin/bash your_registry/group/image:tag

Docker exec in container by label

docker exec -i "$(docker ps -qlf label=app_name=app-shell)" django-admin

Download and run a service

docker run --name mongo -p 127.0.0.1:27017:27017 mongo

Download and run service, link to mongo

docker run --name app --link mongo app/image:latest

Run service app on host directory

docker run -it
    -e "SNYK_TOKEN=<TOKEN>"
    -e "USER_ID=1234"
    -e "MONITOR=true"
    -v "<PROJECT_DIRECTORY>:/project"
  snyk/snyk-cli:npm test --org=my-org-name

Clearing

Remove stopped containers and unused images

docker system prune

Remove unused volumes

docker volume prune

Docker on mac

Build image from dockerfile

docker build -t imagetag .

Run image

docker run -it imagetag -v `pwd`/tests:/tests -p 80:80 /bin/bash

Bootstrap

docker run -it --name ubuntu ubuntu:latest bash

Mount directory

docker run -it --name ubuntu --mount type=bind,source=$HOME/shared,target=/shared ubuntu:latest bash

Commit container to image

docker commit container_name image_name

Save and load image

docker save busybox > busybox.tar
docker load < busybox.tar

Remove containers

docker rm `docker ps --no-trunc -aq`

Show os version for each container

docker ps | awk '{print $2; system("docker exec -t " $1 " cat /etc/os-release"); print "\n" }'

Get interface for container

grep -xl "$(docker exec 9d349aa759ae cat /sys/class/net/eth0/iflink)" /sys/class/net/*/ifindex | cut -d/ -f 5

Remove images

docker rmi -f `docker images -aq`
docker images | grep your_project | awk '{ print $3 }' | sort | uniq | xargs docker rmi -f
docker-compose rm

Remove volumes

docker volume ls -q | grep your_project | xargs docker volume rm

Troubleshooting

Status code 137 = oom killed -> increase available memory

Copy files

docker cp foo.txt mycontainer:/foo.txt
docker cp mycontainer:/foo.txt foo.txt

Analyze layers size

docker history image:tag
wget https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_linux_amd64.deb
sudo apt install ./dive_0.9.2_linux_amd64.deb
dive image:tag

Create system user

RUN adduser \
    --gecos '' \
    --disabled-password \
    --no-create-home \
    --system \
    --home /nonexistent \
    --shell /usr/sbin/nologin \
    vcache

Troubleshoot connectivity

Resolve host to ip

getent hosts yourhostname

Check tcp port connection

⚠️ **GitHub.com Fallback** ⚠️