Skip to content

Instantly share code, notes, and snippets.

@psct
Last active October 26, 2019 05:15
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save psct/bbb859d1767a8b990a6e27951859513e to your computer and use it in GitHub Desktop.
Save psct/bbb859d1767a8b990a6e27951859513e to your computer and use it in GitHub Desktop.
#!/bin/sh
exit 0
# Die Befehle aus einem Praxis-Artikel zu Docker aus
# c’t 2017, Heft 15, S. 110
# in Form eines Shell-Skripts der Lesbarkeit halber
# FIX: Weist auf Fehler in den Befehlszeilen im Artikel hin.
# Die Datei /etc/apt/sources.list ergänzen um:
deb https://download.docker.com/linux/debian stretch stable
## Docker einrichten:
apt-get install apt-transport-https
apt-get install curl
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
apt-get update
apt-get install docker-ce
## Funktionstest
docker run hello-world
# Folgende Befehle vereinfachen die Nutzung
# der anschließenden Befehlszeilen aus dem Artikel
export MYDOMAIN=example.com
export MYUSER=joeuser
export LETSENCRYPT_EMAIL=$MYUSER@$MYDOMAIN
# Die eigentlichen Befehle aus dem Artikel sind ergänzt
# um die zuvor gesetzten Umgebungsvariablen.
# Erste Gehversuche mit gitweb:
docker search gitweb
docker pull fraoustin/gitweb
docker run -d --name gitweb fraoustin/gitweb
docker exec gitweb addauth test test
docker exec gitweb addrepos test
docker inspect gitweb | more
# Zugriff im Browser mit SOCKS-Proxy auf meist 172.17.0.2 sollte gelingen.
# Aufräumen - Volume-Reste anzeigen und wegräumen:
docker volume ls --filter dangling=true
docker volume prune
# Neuer Start jetzt mit benannten Volumes und der Datei
# für die Zugangsdaten der Benutzer (htpasswd), die mit
# dem ersten Befehl angelegt wird:
mkdir -p /usr/local/share/docker; touch /usr/local/share/docker/.gitweb_htpasswd
docker run -d --name gitweb -v gitwebrepos:/var/lib/git -v /usr/local/share/docker/.gitweb_htpasswd:/etc/nginx/.htpasswd fraoustin/gitweb
docker exec -it gitweb /bin/sh
# Vorbereitung für den Betrieb hinter dem nginx_proxy-Container,
# Enrichten eines User Defined Network:
docker network create extern
docker network disconnect docker0 gitweb
docker network connect extern gitweb
# Vor den nächsten Schritten muss gitweb weggeworfen sein (FIX: der Artikel
# ist da unpräzise und spricht nur von Beenden):
docker stop gitweb
docker rm gitweb
## Proxy starten:
docker run -d --name nginxproxy --network=extern -v /var/run/docker.sock:/tmp/docker.sock:ro -p 80:80 -p 443:443 -v nginxproxy_certs:/etc/nginx/certs:ro -v nginxproxy_vhosts:/etc/nginx/vhost.d -v nginxproxy_html:/usr/share/nginx/html --label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true jwilder/nginx-proxy
# FIX: Der Artikel enthält vor dem ersten "-v" leider einen Bindestrich zu viel, also --v statt -v.
## Jetzt gitweb gegen den Proxy starten:
docker run -d --name gitweb --network=extern -v gitwebrepos:/var/lib/git -v /usr/local/share/docker/gitweb_htpasswd:/etc/nginx/.htpasswd -e "VIRTUAL_HOST=gitweb.$MYDOMAIN" fraoustin/gitweb
# FIX: Im Artikel fehlt das schließende Anführungszeichen hinter -e "VIRTUAL_HOST ...".
## Jetzt den Zertifikatsbeschaffer:
docker run -d --name nginxproxy_comp -v /var/run/docker.sock:/var/run/docker.sock:ro -v nginxproxy_certs:/etc/nginx/certs:rw --volumes-from nginxproxy -e "ACME_CA_URI=https://acme-staging.api.letsencrypt.org/directoryletsencrypt" jrcs/letsencrypt-nginx-proxy-companion
# FIX: Das erste "Volume" bzw. der Socket muss mit /var/run/docker.sock und nicht /tmp/docker.sock im Container verbunden werden.
# (Die Option "-e "ACME_CA_URI=https://acme-staging.api.letsencrypt.org/directory"" empfiehlt
# sich für Testinstallationen und spuckt Testzertifikate statt regulärer aus, mehr dazu hier:
# https://letsencrypt.org/docs/staging-environment/ - so bekommt man keine Probleme mit dem Zertifikatslimit von fünf pro Woche).
docker run -d --name gitweb --network=extern -v gitwebrepos:/var/lib/git -v /usr/local/share/docker/gitweb_htpasswd:/etc/nginx/.htpasswd -e "VIRTUAL_HOST=gitweb.$MYDOMAIN" -e "LETSENCRYPT_HOST=gitweb.$MYDOMAIN" -e "LETSENCRYPT_EMAIL=$MYUSER@$MYDOMAIN" fraoustin/gitweb
# FIX: Auch hier fehlte am Ende der ersten Umgebungsvariable das schließende Anführungszheichen."
## Blog, Datenbank starten:
docker run -d --name blogsql --network=extern -v blogsql:/var/lib/mysql -e "MYSQL_ROOT_PASSWORD=test" mysql:5.7
## Eigtl. Blog-Software:
docker run -d --name blog --network=extern -v blogdata:/var/www/html -e "LETSENCRYPT_HOST=blog.$MYDOMAIN" -e "LETSENCRYPT_EMAIL=$MYUSER@$MYDOMAIN" volkerwiegand/serendipity
## ftp-Server mit veröffentlichten! Ports:
docker run -d --name ftp -p 21:21 -p 4559-4564:4559-4564 -v vsftpddata:/srv -v vsftpdetc:/etc/vsftpd panubo/vsftpd
## "Update-Container" - mit zuvor erwähnter Restart-Option:
docker run -d --restart=unless-stopped --name watchtower -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower
@xelacon
Copy link

xelacon commented Jul 31, 2017

@ Hr. Siering, das nennen Sie Subtile Fehler? Nicht einmal hier haben Sie es getestet oder?

@GITchristoph
Copy link

GITchristoph commented Sep 10, 2017

Hi und vielen Dank für den Artikel.

Was ist denn wenn nach Eingabe von 172.17.0.2 (Die Adresse, die man nach Eingabe von "docker inspect gitweb | more" angezeigt bekommt) im Browser einfach nichts passiert? Nur ein "Failed to open Page" nach einiger Zeit.

In dem Ct Artikel steht "Sie können diese Adresse (<172.17.0.2>) direkt im Browser auf dem host eintippen..."

Ich probiere Docker auf einem Macbook. Hat das vielleicht einen Einfluss?

LG, Chris

@GITchristoph
Copy link

Auf dem Mac macht man das Dockerimage so unter localhost erreichbar:

docker run -p 80:80 -d --name gitweb fraoustin/gitweb

Die docker0 network brudge wird auf dem Mac so nicht erstellt.

Vielleicht hilft es ja auch mal jemand anderem.

LG, Chris

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment