Docker

Spickzettel für die Container-Plattform Docker.

Links:

TODO

Häufige Befehle

Hilfe anzeigen:

docker
docker run --help

Infos zur Docker-Installation zeigen:

docker info

Installierte Images anzeigen:

docker images

Laufende Container anzeigen:

docker ps

Alle Container anzeigen:

docker ps -a

Aktuelle CPU/Mem-Auslastung der Container anzeigen:

docker stats

Container (mal kurz) erzeugen und starten:

docker run -ti --rm my-image-id my-command --my-command-args

Infos zu einem Container anzeigen:

docker inspect my-container-id

Logs eines Containers anzeigen:

docker logs my-container-id

Container starten:

docker start my-container-id

Container stoppen:

docker stop my-container-id

Container löschen:

docker rm my-container-id

Image löschen:

docker rmi my-image-id

Alle Images löschen, die nicht von Containern verwendet werden:

docker rmi $(docker images -q --filter "dangling=true")

Nicht mehr benötigten Platz freigeben:

docker system prune

Nicht mehr benötigte Images löschen (löscht Images, die von keinem Container verwendet werden):

docker image prune -a

Bash in Container öffnen:

docker exec -it my-container-id /bin/bash

Terminologie

Begriff Definition
Image Ein Paket, das alles enthält, um eine Applikation auszuführen.
Container Eine laufende Instanz eines Images.
Service Definiert, wie sich Container in Produktion verhalten soll.
Task Ein einzelner Container, der in einem Service läuft. 
Stack Definiert die Interaktion von Services.
Swarm/Cluster Mehrere Rechner auf denen Docker läuft und die zu einem Swarm/Cluster verbunden wurden.
Node Ein Rechner in einem Swarm/Cluster.
Swarm manager Ein Node, der andere Nodes des Swarm/Cluster steuern kann oder weitere Nodes zum Swarm/Cluster hinzufügen kann.
Worker Ein Node, der nur Befehle entgegen nimmt und Container ausführt, jedoch keine anderen Nodes steuern kann.

Installation (auf Mac)

Docker installieren:

brew cask install docker

Docker starten:

Installation (auf Linux)

Docker installieren:

sudo apt install -y apt-transport-https ca-certificates curl 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 install -y docker-ce

User zu Gruppe docker hinzufügen:

sudo groupadd docker
sudo usermod -aG docker $USER

Container definieren

Links:

Datei Dockerfile anlegen:

# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app
COPY ["/some/path/with spaces", "/my/target"]

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

Image erzeugen:

docker build -t myimage .

Image ausführen:

docker run myimage

Optionen (nach run angeben):

Service definieren

Links:

Datei docker-compose.yml anlegen:

db:
  image: mongo
  volumes:
    - ./data/runtime/db:/data/db
    - ./data/dump:/dump
  command: mongod --smallfiles
  restart: always

rocketchat:
  image: rocketchat/rocket.chat:latest
  environment:
    - MONGO_URL=mongodb://db:27017/rocketchat
    - ROOT_URL=https://chat.inumio.com
    - Accounts_UseDNSDomainCheck=True
  links:
    - db:db
  ports:
    - 3000:3000
  restart: always

Service bauen und starten:

docker-compose up -d

Service starten:

docker-compose start

Service stoppen:

docker-compose stop

Service-Logs anzeigen:

docker-compose logs -f

Log eines Containers anzeigen:

docker-compose logs --timestamp my-container-id