Docker: Unterschied zwischen den Versionen

Aus Alexander's Wiki
K
 
(41 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Virtualisierung]]
[[Kategorie:Docker]]
= Installation =
= Installation =
== Paket für Ubuntu ==
== Ubuntu (x86) ==
<source lang="bash" enclose="div">
<source lang="bash" enclose="div">
   apt-get install docker lxc
  apt-get update
   apt-get install apt-transport-https ca-certificates


   wget -qO- https://get.docker.com/ | sh
   apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
   docker run hello-world
 
  echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" > /etc/apt/sources.list.d/docker.list
 
  apt-get update
  apt-get purge lxc-docker
  apt-cache policy docker-engine
 
  apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
 
  apt-get install docker-engine
  service docker start
 
  docker run hello-world # Test
</source>
 
== Raspbian (arm) ==
<source lang="bash" enclose="div">
  curl -sSL https://get.docker.com | sh
</source>
 
= Docker Registry =
''ToDo''
 
= Arbeiten mit Docker =
== Eingerichtete Images auflisten ==
<source lang="bash" enclose="div">
> docker ps -a
 
CONTAINER ID  IMAGE    COMMAND  CREATED      STATUS      PORTS                NAMES
cc65f386f2d5  nginx:1  nginx    9 months ago  Up 3 seconds 0.0.0.0:7890->80/tcp dc-nginx    
</source>
 
== Container starten ==
Wenn der Container schon konfiguriert ist:
<source lang="bash" enclose="div">
> docker start cc65f386f2d5
</source>
</source>
Sonst muss man die ganzen Paramter mitgeben:
<source lang="bash" enclose="div">
  docker run --name=myContainer -i -t -d -p 80:80/tcp -p 443:443/tcp -v /conf.d:/conf.d forumi0721alpinearmhf/alpine-armhf-nginx:latest /bin/ash
</source>
Ein paar bedeuten:
-d, --detach=true|false
-i, --interactive=true|false
--name=myContainer
-t, --tty=true|false
-v|--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]
== Container stoppen ==
<source lang="bash" enclose="div">
docker stop cc65f386f2d5
</source>
== Interaktive Shell in laufenden Container ==
<source lang="bash" enclose="div">
docker exec -it 96d65e7eff87 ash
</source>
== Container löschen ==
== Image eines Containers löschen ==
= Hilfen =


== docker-compose ==
== docker-compose ==
docker-compose macht das Leben ein wenig einfacher.
docker-compose macht das Leben ein wenig einfacher.
<source lang="bash" enclose="div">
<source lang="bash" enclose="div">
  curl -L https://github.com/docker/compose/releases/download/1.3.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  chmod +x /usr/local/bin/docker-compose
  chmod +x /usr/local/bin/docker-compose
</source>
</source>


== Docker Image ==
== Dockerimage Architektur ==
<source lang="bash" enclose="div">
<source lang="bash" enclose="div">
docker run -p 666:80 -i -t ubuntu:12.04 /bin/bash
  docker inspect 882059b7ca70 | jq '.[] | .Architecture'
  docker search armhf-
</source>
</source>
''Der lokale Port 666 zeigt auf den Port 80 im Docker-Image.''


= Verwaltung =
== Finden von fertigen Images ==
=== Finden und Herunterladen von Images ===
Images lassen sich sowohl mit dem Befehl
Images lassen sich sowohl mit dem Befehl
<source lang="bash" enclose="div">
<source lang="bash" enclose="div">
Zeile 28: Zeile 95:
</source>
</source>
suchen. Eine Übersicht ist auch dem Docker-Webseite zu sehen.
suchen. Eine Übersicht ist auch dem Docker-Webseite zu sehen.
== Inspizieren von Images ==
<source lang="bash" enclose="div">
docker inspect dcac31412f51
</source>
= Verwaltung =
Mit dem Befehl
Mit dem Befehl
<source lang="bash" enclose="div">
<source lang="bash" enclose="div">
docker pull docker pull sameersbn/gitlab
docker pull sameersbn/gitlab
</source>
</source>
lassen sich dann die Iamges herunterladen. Dabei steht der Teil vor dem / für den Nutzer, das das Image erzeugt hat und der Teil nach dem Schrägstrich für das Programm, welches durch das Image bereitgestellt wird.
lassen sich dann die Iamges herunterladen. Dabei steht der Teil vor dem / für den Nutzer, das das Image erzeugt hat und der Teil nach dem Schrägstrich für das Programm, welches durch das Image bereitgestellt wird.
Zeile 72: Zeile 146:
</source>
</source>


=== Organisation ===
The contents of the /var/lib/docker directory vary depending on the driver Docker is using for storage.


= Betrieb =
By default this will be aufs but can fall back to overlay, overlay2, btrfs, devicemapper or zfs depending on your kernel support. In most places this will be aufs but the RedHats went with devicemapper.
== Container starten ==
<source lang="bash" enclose="div">
docker.io start cc65f386f2d5


CONTAINER ID  IMAGE    COMMAND  CREATED      STATUS      PORTS                NAMES
You can manually set the storage driver with the -s or --storage-driver= option to the Docker daemon.
cc65f386f2d5  nginx:1  nginx    9 months ago  Up 3 seconds 0.0.0.0:7890->80/tcp dc-nginx 
</source>


== Container stoppen ==
*    /var/lib/docker/{driver-name} will contain the driver specific storage for contents of the images.
<source lang="bash" enclose="div">
*    /var/lib/docker/graph/<id> now only contains metadata about the image, in the json and layersize files.
docker.io stop cc65f386f2d5
</source>


= Benutzung =
In the case of aufs:
<source lang="bash" enclose="div">
docker.io attach cc65f386f2d5
</source>


= Liebling Docker Images =
*   /var/lib/docker/aufs/diff/<id> has the file contents of the images.
* [https://registry.hub.docker.com/_/owncloud/ Owncloud]
*   /var/lib/docker/repositories-aufs is a JSON file containing local image information. This can be viewed with the command docker images.
* [https://registry.hub.docker.com/_/sonarqube/ SonarQube]
* [https://github.com/sameersbn/docker-gitlab#quick-start GitLab]
* Hudson oder [https://registry.hub.docker.com/_/jenkins/ Jenkins]


= Special Gitlab =
In the case of devicemapper:
Gitlab arbeitet mit den Datenbanken:
* postgress
* mysql
* Redis


== Einfachste Weg ==
*    /var/lib/docker/devicemapper/devicemapper/data stores the images
<source lang="bash" enclose="div">
*    /var/lib/docker/devicemapper/devicemapper/metadata the metadata
wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
*    Note these files are thin provisioned "sparse" files so aren't as big as they seem.
docker-compose up
</source>


Im Browser http://localhost:10080 aufrufen und mit den folgenden Zugangsdaten einloggen:
=== Backup ===
Es müssen die Beiden Verzeichnisse:
* /var/lib/docker
* /srv/docker
mit den Unterordnern besichert werden.


* username: '''root'''
= Eigene Installationen =
* password: '''5iveL!fe'''
== Gitlab ==
=== x86 ===
[[Docker:Gitlab|Gitlab]]
=== arm ===
<source lang=bash encl=div>
# https://hub.docker.com/r/zsoltm/gitlab-armhf/


== Der manuelle Weg ==
export GITLAB_ROOT_PASSWORD=xxxxx
# eigentlich
docker run -d --name gitlab-postgres -e POSTGRES_USER=git -e POSTGRES_PASSWORD=somepass zsoltm/postgresql-armhf
# das geht auch nicht
docker run -it -d --name gitlab-postgres2 -e POSTGRES_USER=git -e POSTGRES_PASSWORD=somepass zsoltm/postgresql-armhf --rm postgres sh -c 'exec psql -h 127.0.0.1 -p 5432 -U git'


Ist hier nicht vollständig beschrieben: siehe [https://github.com/sameersbn/docker-gitlab/blob/master/README.md#database hier]
docker run -it -d --name gitlab-postgres --entrypoint /bin/bash -e POSTGRES_USER=git -e POSTGRES_PASSWORD=somepass zsoltm/postgresql-armhf


<source lang="bash" enclose="div">
docker run -d --name gitlab-redis -v `pwd`:/data zsoltm/redis-armhf
  docker pull sameersbn/gitlab:latest
docker run -it -p 80:80 -p 23:22 --link=gitlab-redis:redis --link=gitlab-postgres:postgres\
  docker pull sameersbn/mysql:latest
  -v /home/docker/git-data:/home/git/data -e GITLAB_HOST=gitlab.kluge-pferde.de -e GITLAB_EMAIL_FROM=gitlab@kluge-pferde.de\
  -e SMTP_HOST=smtp.gmail.com -e SMTP_PASSWORD=somepassword zsoltm/gitlab-armhf
</source>
</source>


== Traefik on ARM ==
<!-- git clone https://github.com/armswarm/traefik.git -->
<source lang="bash" enclose="div">
<source lang="bash" enclose="div">
docker run --name=mysql-gitlab -d \
docker pull nsteinmetz/traefik-arm
  --env='DB_NAME=gitlabhq_production' \
docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml nsteinmetz/traefik-arm
  --env='DB_USER=gitlab' --env='DB_PASS=password' \
    --volume=/srv/docker/gitlab/mysql:/var/lib/mysql \
    sameersbn/mysql:latest
</source>
</source>


The above command will create a database named '''gitlabhq'''_production and also create a user named '''gitlab''' with the password '''password''' with full/remote access to the '''gitlabhq_production''' database.
== On Hold ==
 
* [https://registry.hub.docker.com/_/owncloud/ Owncloud]
<source lang="bash" enclose="div">
* [https://registry.hub.docker.com/_/sonarqube/ SonarQube]
docker run --name=redis-gitlab -d \
* Hudson oder [https://registry.hub.docker.com/_/jenkins/ Jenkins]
  --volume=/srv/docker/gitlab/redis:/var/lib/redis \
* [https://hub.docker.com/r/turnkeylinux/mantis-14.0/ Mantis]
  sameersbn/redis:latest
</source>
 
<source lang="bash" enclose="div">
docker run --name=gitlab -d --link=mysql-gitlab:mysql --link=redis-gitlab:redisio \
  --publish=10022:22 --publish=10080:80 \
  --env='GITLAB_PORT=10080' --env='GITLAB_SSH_PORT=10022' \
  --volume=/srv/docker/gitlab/gitlab:/home/git/data \
  sameersbn/gitlab:latest
</source>
 
Here the image will also automatically fetch the '''DB_NAME''', '''DB_USER''' and '''DB_PASS''' variables from the mysql container as they are specified in the docker run command for the mysql container. This is made possible using the magic of docker links.

Aktuelle Version vom 26. März 2017, 14:00 Uhr

Installation

Ubuntu (x86)

  apt-get update
  apt-get install apt-transport-https ca-certificates

  apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

  echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" > /etc/apt/sources.list.d/docker.list

  apt-get update
  apt-get purge lxc-docker
  apt-cache policy docker-engine

  apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

  apt-get install docker-engine
  service docker start

  docker run hello-world # Test

Raspbian (arm)

  curl -sSL https://get.docker.com | sh

Docker Registry

ToDo

Arbeiten mit Docker

Eingerichtete Images auflisten

> docker ps -a

CONTAINER ID  IMAGE    COMMAND  CREATED       STATUS       PORTS                NAMES
cc65f386f2d5  nginx:1  nginx    9 months ago  Up 3 seconds 0.0.0.0:7890->80/tcp dc-nginx

Container starten

Wenn der Container schon konfiguriert ist:

> docker start cc65f386f2d5

Sonst muss man die ganzen Paramter mitgeben:

  docker run --name=myContainer -i -t -d -p 80:80/tcp -p 443:443/tcp -v /conf.d:/conf.d forumi0721alpinearmhf/alpine-armhf-nginx:latest /bin/ash

Ein paar bedeuten:

-d, --detach=true|false
-i, --interactive=true|false
--name=myContainer
-t, --tty=true|false
-v|--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]

Container stoppen

 docker stop cc65f386f2d5

Interaktive Shell in laufenden Container

 docker exec -it 96d65e7eff87 ash

Container löschen

Image eines Containers löschen

Hilfen

docker-compose

docker-compose macht das Leben ein wenig einfacher.

 curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
 chmod +x /usr/local/bin/docker-compose

Dockerimage Architektur

  docker inspect 882059b7ca70 | jq '.[] | .Architecture'
  docker search armhf-

Finden von fertigen Images

Images lassen sich sowohl mit dem Befehl

 docker search gitlab

suchen. Eine Übersicht ist auch dem Docker-Webseite zu sehen.

Inspizieren von Images

 docker inspect dcac31412f51

Verwaltung

Mit dem Befehl

 docker pull sameersbn/gitlab

lassen sich dann die Iamges herunterladen. Dabei steht der Teil vor dem / für den Nutzer, das das Image erzeugt hat und der Teil nach dem Schrägstrich für das Programm, welches durch das Image bereitgestellt wird.

Liste aller lokal vorliegenden Images

Die Liste der lokal vorliegenden Images lass sich mit dem Befehl

  docker images

anzeigen. Ein mögliches Ergebnis könnte so aussehen:

REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
sameersbn/gitlab       latest              5e06a7e49560        34 hours ago        631.6 MB
sameersbn/gitlab       7.11.4-1            e07ed8d5eff4        3 months ago        617 MB
sameersbn/redis        latest              44943bcb43f1        3 months ago        199.2 MB
sameersbn/mysql        latest              d9d83f2d5b98        3 months ago        325.9 MB
hello-world            latest              91c95931e552        5 months ago        910 B
sameersbn/postgresql   9.4                 271ad7e099d3        7 months ago        228.2 MB
nginx                  latest              61e8f94e1d65        14 months ago       499.1 MB

Anzeige der verfügbaren Container

Die zur Verfügung stehenden Container kann man mit folgendem Befehl anzeigen lassen:

 docker.io ps -a

Die Liste sieht dann wie folgt aus.

CONTAINER ID  IMAGE    COMMAND  CREATED       STATUS                  PORTS                NAMES
cc65f386f2d5  nginx:1  nginx    9 months ago  Exited (1) 8 months ago 0.0.0.0:7890->80/tcp dc-nginx

Löschen von Images und Containern

Die Images, die bei Nichtbenutzung nur viel Speicherplatz belegen, lassen sich mit dem Befehl

docker rmi <image>

löschen. Analog gilt für das Entfernen von Containern:

docker rm <container>

Organisation

The contents of the /var/lib/docker directory vary depending on the driver Docker is using for storage.

By default this will be aufs but can fall back to overlay, overlay2, btrfs, devicemapper or zfs depending on your kernel support. In most places this will be aufs but the RedHats went with devicemapper.

You can manually set the storage driver with the -s or --storage-driver= option to the Docker daemon.

  • /var/lib/docker/{driver-name} will contain the driver specific storage for contents of the images.
  • /var/lib/docker/graph/<id> now only contains metadata about the image, in the json and layersize files.

In the case of aufs:

  • /var/lib/docker/aufs/diff/<id> has the file contents of the images.
  • /var/lib/docker/repositories-aufs is a JSON file containing local image information. This can be viewed with the command docker images.

In the case of devicemapper:

  • /var/lib/docker/devicemapper/devicemapper/data stores the images
  • /var/lib/docker/devicemapper/devicemapper/metadata the metadata
  • Note these files are thin provisioned "sparse" files so aren't as big as they seem.

Backup

Es müssen die Beiden Verzeichnisse:

  • /var/lib/docker
  • /srv/docker

mit den Unterordnern besichert werden.

Eigene Installationen

Gitlab

x86

Gitlab

arm

# https://hub.docker.com/r/zsoltm/gitlab-armhf/

export GITLAB_ROOT_PASSWORD=xxxxx
# eigentlich
docker run -d --name gitlab-postgres -e POSTGRES_USER=git -e POSTGRES_PASSWORD=somepass zsoltm/postgresql-armhf
# das geht auch nicht
docker run -it -d --name gitlab-postgres2 -e POSTGRES_USER=git -e POSTGRES_PASSWORD=somepass zsoltm/postgresql-armhf --rm postgres sh -c 'exec psql -h 127.0.0.1 -p 5432 -U git'

docker run -it -d --name gitlab-postgres --entrypoint /bin/bash -e POSTGRES_USER=git -e POSTGRES_PASSWORD=somepass zsoltm/postgresql-armhf

docker run -d --name gitlab-redis -v `pwd`:/data zsoltm/redis-armhf
docker run -it -p 80:80 -p 23:22 --link=gitlab-redis:redis --link=gitlab-postgres:postgres\
 -v /home/docker/git-data:/home/git/data -e GITLAB_HOST=gitlab.kluge-pferde.de -e GITLAB_EMAIL_FROM=gitlab@kluge-pferde.de\
 -e SMTP_HOST=smtp.gmail.com -e SMTP_PASSWORD=somepassword zsoltm/gitlab-armhf

Traefik on ARM

docker pull nsteinmetz/traefik-arm
docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml nsteinmetz/traefik-arm

On Hold