Docker (docker.io)

artikel im entwurf, evtl fehlerhaft

Docker 1.0.1 ist in den Paketquellen von Ubuntu 14.04 enthalten.

$ 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

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

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://"
$ /usr/bin/dockerd -H "tcp://0.0.0.0:4243"
$ /usr/bin/dockerd --storage-driver=overlay2

links

$ 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
$ 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

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
$ 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

Security

Remote Api

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
  • linux/ubuntu/docker.txt
  • Zuletzt geändert: 2018/07/17 18:38
  • von haiko