Docker
Spickzettel für die Container-Plattform Docker.
Links:
- Docker Doku
- Docker Hub mit Image-Suche
- Blog-Artikel A basic LAMP setup - Docker-Stack mit Apache, MySQL, PHP (siehe auch GitHub-Repo)
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
-ti
für TTY und Std-In--rm
löscht den Container nach Beenden- Container einen Namen geben:
--name myname
- Host-Port mappen:
-p <host-port>:<container-port>
(vormy-image-id
) - Volume hinzufügen:
-v <host-path>:<container-path>[:ro]
(vormy-image-id
) -
Beispiel: nginx starten, der ein Host-Verzeichnis ausliefert:
docker run --rm -p 80:80 -v /my/host/path:/usr/share/nginx/html nginx
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:
- Per UI über Spotlight-Suche: Cmd+Space "Docker"
- Warten bis Start fertig ist (Lampe grün)
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
- Neu einloggen, damit Gruppe wirksam wird
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):
-d
: Container im Hintergrund ausführen (detached mode)-p 4000:80
: Host-Port 4000 auf Container-Port 80 mappen. D.h. Container-Applikation ist unterlocalhost:4000
erreichbar.-e MY_VAR=myvalue
: UmgebungsvariableMY_VAR
auf den Wertmyvalue
setzen.-v /my/own/dir:/var/somedir
: Host-Verzeichnis/my/own/dir
im Container als/var/somedir
einbinden.--name my-container
: Dem Container den Namenmy-container
geben.
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