Docker (docker.io)
artikel im entwurf, evtl fehlerhaft
Docker 1.0.1 ist in den Paketquellen von Ubuntu 14.04 enthalten.
-
Installation aus den Paketquellen
$ sudo apt-get update $ sudo apt-get install docker.io
Will man auf dem letzten Stand sein, empfiehlt es sich Docker manuell zu installieren. Docker bietet ein Script an was die Aufgabe unter Ubuntu übernimmt:
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
-
Docker als Benutzer ausführen
Der Dockerdaemon kennt seit Version 0.5.3 die Gruppe docker
. Ist ein User in dieser Grupppe kann man die Docker Binary ohne sudo
ausführen. Trotzdem darf man nicht vergessen das der Daemon immer als Root ausgeführt wird. Daher sollte die Überschrift eher „docker ohne sudo ausführen“ heissen. Man führt den Benutzer der Gruppe docker
hinzu:
$ sudo gpasswd -a USERNAME docker
Nach erneutem Anmelden kann man das überprüfen mit
$ groups
Jetzt muss der Daemon noch neu gestartet werden:
upstart
$ sudo service docker.io restart
systemd
$ sudo systemctl docker enable $ sudo systemctl docker start
Docker Arbeitsverzeichnis ändern
Beispiel Systemd
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network.target [Service] ExecStart= ExecStart=/usr/bin/dockerd --data-root /mnt/ssd/docker-overlay-fs2 -H "fd://"
Dockerd tcp socket lauschen
$ /usr/bin/dockerd -H "tcp://0.0.0.0:4243"
Storage Treiber wechseln
$ /usr/bin/dockerd --storage-driver=overlay2
Überschrift
links
Version überprüfen
$ docker version Client version: 1.4.1 Client API version: 1.16 Go version (client): go1.3.3 Git commit (client): 5bc2ff8 OS/Arch (client): linux/amd64 Server version: 1.4.1 Server API version: 1.16 Go version (server): go1.3.3 Git commit (server): 5bc2ff8
Beispiel
$ docker pull dockerfile/ghost $ docker run -d -p 9999:2368 dockerfile/ghost $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a661a09dfe35 dockerfile/ghost:latest bash /ghost-start 3 minutes ago Up 3 minutes 0.0.0.0:9999->2368/tcp prickly_goldstine
Nützliches
Images im Docker Hub suchen
$ docker search SUCHSTRING
$ docker search hhvm NAME DESCRIPTION STARS OFFICIAL AUTOMATED joostlaan/hhvm-laravel 12 [OK] jolicode/hhvm 6 [OK] philipz/nginx-hhvm-wordpress 5 [OK] jeffutter/wordpress-hhvm 4 [OK] kagami/nginx-hhvm Personal maintained nginx-hhvm server base... 1 [OK] mssola/hhvm It contains the configuration to setup a D... 1 [OK] jakubzapletal/hhvm 1 [OK] partlab/ubuntu-hhvm Simple base docker image to run PHP applic... 0 [OK] tomwilderspin/hhvm-nginx nginx configured to run Fcgi to a 'hhvm' l... 0 [OK] usabilitydynamics/hhvm 0 [OK]
Image aus dem Repository installieren
$ docker pull REPOSITORYID
Build Image with alpine linux (makefile)
- Makefile
version=3.6.2 arch=aarch64 tag=example/aarch64:${version} all: clean build build: docker import https://nl.alpinelinux.org/alpine/v3.6/releases/${arch}/a$ clean: docker rmi -f ${tag}; echo "clean image"
$ make $ docker run -it --rm example/aarch64:3.6.2 cat /etc/alpine-release 3.6.2
Lokale Images auflisten
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE haiko/www latest 98353e15f658 20 hours ago 402.9 MB yoshz/apache-php latest a2b899832fab 41 hours ago 402.9 MB dockerfile/ghost latest dd3b7896c135 5 days ago 574.6 MB jenserat/seafile latest 2a67cb005dce 2 weeks ago 335.1 MB mprasil/dokuwiki latest ec838663d24b 4 months ago 303.3 MB learn/tutorial latest 8dbd9e392a96 22 months ago 128 MB
Image taggen
# tag image $ docker tag myapp example.local:5000/myrepo/myapp:1.0
Push Image
# push to registry example.local:5000 $ docker push example.local:5000/myrepo/myapp:1.0
Image löschen
docker rmi <ID>
Images Speicherverbrauch
$ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 17 7 2.111GB 1.542GB (73%) Containers 7 7 669.6kB 0B (0%) Local Volumes 15 3 706.8MB 516.4MB (73%)
Laufende Container anzeigen
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6f8f3dee30dc dockerfile/ghost:latest "bash /ghost-start" About an hour ago Up About an hour 0.0.0.0:80->2368/tcp ghost
Wenn man nur die Container Id möchte der vorhandenen Container um sie zb in einem Script zu nutzen kann man sich das Flag -q
nutzen:
$ docker ps -q 6f8f3dee30dc
Alle vorhandenen Container, also auch die gestoppten können mit dem Schalter -a
angezeigt werden:
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 450f791f8f21 pmasuper:latest "/usr/bin/supervisor About an hour ago Up 8 seconds 443/tcp, 0.0.0.0:80->80/tcp webdev1 360082b90b2e pmasuper:latest "/usr/bin/supervisor About an hour ago Exited (0) About an hour ago berserk_shockley 3f5e3ce66956 pmasuper:latest "/bin/bash" About an hour ago Exited (0) About an hour ago furious_lumiere
Nur die Ids:
$ docker ps -aq 450f791f8f21 360082b90b2e 3f5e3ce66956 a915b71bc258 bd660813342c cecdd9982924
Container löschen
docker rm <ID>
In laufenden Container anmelden
Seit Version 1.3 (?) kann man exec
nutzen um in einen laufenden Container einzugreifen - oder eine Shell zu starten:
$ docker exec -it mycontainer /bin/sh
Für ältere Docker Versionen wird https://github.com/jpetazzo/nsenter empfohlen. Ein anderer Artikel unter http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/ gibt gute Gründe auf einen SSH Daemon im Container zu verzichten.
ALLE Container löschen
docker rm $(docker ps -aq)
Container exportieren u importieren
Der Unterschied zwischen save
und export
wird hier http://stackoverflow.com/questions/22655867/what-is-the-difference-between-save-and-export-in-docker gut beschrieben.
$ docker export CONTAINERID >> filename.tar
Export the contents of a filesystem as a tar archive to STDOUT
$ cat filename.tar | docker import - your/reponame
Proxy Docker Socket mit OpenSSH Client
(Beispiele in Fish Shell, getestet unter Arch Linux mit OpenSSH Version 7.7)
Socket:
$ ssh -nNT -L (pwd)/docker.sock:/var/run/docker.sock you@example.com
Example:
$ docker --host unix://(pwd)/docker.sock ps
TCP:
$ ssh -nNT -L hosttip:5000:/var/run/docker.sock yout@example.com
Example:
$ docker --host 192.168.1.162:5000 ps
Interessant auch in Verbindung mit autossh
und systemd unit:
- docker-proxy.service
Description=AutoSSH Docker Proxy After=network.target [Service] Environment="AUTOSSH_GATETIME=0" ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -nNT -L hostip:5555:/var/run/docker.sock yout@example.com User=you [Install] WantedBy=multi-user.target
$ systemctl daemon-reload $ systemctl enable --now docker-proxy.service
Sonstiges
Auflisten der Repositories mit Curl und jq
$ curl --silent https://user:pass@myhub.example.com/v2/_catalog | jq -r '.repositories | .[]'
Webinterface
Beispiel Portainer:
$ docker run -d -p 0.0.0.0:9000:9000 --restart always --name portainer -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer:linux-arm64-1.13.2 --no-auth