docker

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
docker [21/09/2024 - 10:07] – [Begrifflichkeiten] thommie4docker [11/03/2025 - 21:25] (aktuell) freifunk_netzwissen.de
Zeile 11: Zeile 11:
 Docker Daten-Ablage auf btrfs Partition verlagern Docker Daten-Ablage auf btrfs Partition verlagern
  
 +root@docker3:/etc/docker/daemon.json
 <code> <code>
- 
-root@docker3:/etc/docker# less daemon.json 
- 
 { {
    "storage-driver": "btrfs",    "storage-driver": "btrfs",
    "data-root":  "/mnt/data/docker"    "data-root":  "/mnt/data/docker"
 } }
 +</code>
 +
 +===== Docker Build =====
 +
 +https://stackify.com/docker-build-a-beginners-guide-to-building-docker-images/
 +
 +Der Build geht immer von einem Dockerfile aus: https://docs.docker.com/reference/dockerfile/ und erzeugt ein Image
 +
 +<code>
 +# Use official Alpine release
 +FROM alpine:3.19.3 as build
 +
 +# Maintainer
 +LABEL maintainer="Thomas Rother <thomas.rother@devoteam.com>"
 +LABEL version="1.2"
 +LABEL description="radsec proxy server for remote RADIUS operation with TLS security"
 +
 +ENV RADSECVERSION 1.11.0
 +ENV RADSECURL https://github.com/radsecproxy/radsecproxy/releases/download/${RADSECVERSION}/
 +ENV RADSECFILENAME radsecproxy-${RADSECVERSION}.tar.gz
 +
 +# Change working dir
 +WORKDIR /root
 +
 +# Update apk
 +RUN apk update
 +
 +# Install buildtools
 +RUN apk add --no-cache make g++ openssl-dev nettle-dev musl-dev
 +
 +# Create output dir
 +RUN mkdir output
 +
 +# Download radsecproxy source files
 +RUN wget ${RADSECURL}${RADSECFILENAME}
 +
 +# Untar radsecproxy
 +RUN tar xf ${RADSECFILENAME} --strip-components=1
 +
 +# Configure
 +RUN ./configure --prefix=/root/output --sysconfdir=/etc
 +
 +# Make and install to output dir
 +RUN make && make install
 +
 +# Create radsecproxy container
 +FROM alpine:3.19.3
 +
 +# Update apk
 +RUN apk update
 +
 +# Install openssl, ca-certificates, nettle and tini
 +RUN apk add --no-cache openssl ca-certificates bash nettle tini
 +
 +# Copy from 'build' stage
 +COPY --from=build /root/output/ /
 +# COPY --from=build /root/radsecproxy.conf-example /etc/radsecproxy/radsecproxy.conf
 +
 +# create config directory and add certs
 +RUN mkdir /etc/radsecproxy/
 +COPY radsecproxy/ /etc/radsecproxy/
 +COPY certs/       /etc/radsecproxy/
 +
 +# Copy start.sh
 +COPY start.sh /root/start.sh
 +
 +# Make start.sh executeable
 +RUN chmod u+x /root/start.sh
 +
 +# Create Radsecproxy logging
 +RUN mkdir /var/log/radsecproxy
 +
 +# Export volumes
 +VOLUME /var/log/radsecproxy
 +
 +# Make Radsecproxy's ports available
 +EXPOSE 2083
 +
 +# Set Tini entrypoint
 +# https://computingpost.medium.com/how-to-use-tini-init-system-in-docker-containers-69283d0099ed
 +ENTRYPOINT ["/sbin/tini", "--"]
 +
 +    # Start Radsecproxy
 +    CMD ["/root/start.sh"]
  
 +</code>
 +
 +Dockerfle Syntax check
 +
 +<code>
 +docker build --check .
 +</code>
 +
 +Der Build wird normalerweise gecacht, das kann man abschalten:
 +
 +<code>
 +docker --no-cache build .
 +</code>
 +
 +Docker build ohne cache, aber mit tag:
 +
 +<code>
 +docker build --no-cache -t thommie/freeradius01:v1 .
 +</code>
 +
 +Danach kann man das image in einen Registry schieben, z.B. die Docker Registry.
 +
 +<code>
 +docker login
 +</code>
 +
 +Neu mit Versionsnummer taggen
 +
 +<code>
 +docker tag thommie/radsecproxymb psammechinus/radsecproxymb:v1
 +</code>
 +
 +Und dann hochladen:
 +
 +<code>
 +thommie@odysseus4:~/Dokumente/docker/radsecproxy> docker push psammechinus/radsecproxymb:v1The push refers to repository [docker.io/psammechinus/radsecproxymb]
 +fef40b964b90: Pushed 
 +a0cb24bdb2c8: Pushed 
 +a105c78eaead: Pushed 
 +b10598bffc84: Pushed 
 +5e1cdb76f1d7: Pushed 
 +c903625bb716: Pushed 
 +8b191fa4fbcc: Pushed 
 +4b606c4525db: Pushed 
 +7e4e46af816c: Pushed 
 +b895814e9e64: Pushed 
 +v1: digest: sha256:64c0f5a9498a66bb5714efbda60263fd42886d3420b51ec89e3a0b56df08bba3 size: 2404
 +</code>
 +
 +<code>
 +thommie@odysseus3:~/git/gitea/dockerbuilds/myradius> docker build -f myradius.docker .
 +Sending build context to Docker daemon  5.632kB
 +Step 1/3 : FROM freeradius/freeradius-server:latest
 + ---> 0a093ead10b6
 +Step 2/3 : COPY raddb/ /etc/raddb/
 + ---> 096f00c66db0
 +Step 3/3 : EXPOSE 1812-1813/udp
 + ---> Running in 6d5f572b0a8b
 +Removing intermediate container 6d5f572b0a8b
 + ---> c6c0d41f944a
 +Successfully built c6c0d41f944a
 </code> </code>
  
Zeile 75: Zeile 218:
 </code> </code>
  
-=== Container aus heruntergeladenem Image erzeugen === +==== Container aus heruntergeladenem Image erzeugen ====
  
 ''docker create''  erzeugt den Container und startet ihn **nicht,**  ''docker run''  macht beides. ''docker create''  erzeugt den Container und startet ihn **nicht,**  ''docker run''  macht beides.
 +
 +
  
 Alle laufenden und gestoppten Container zeigen: Alle laufenden und gestoppten Container zeigen:
Zeile 156: Zeile 300:
  
 Achtung: wieder raus mit **CTRL-p CTRL-q. **Details siehe [[https://docs.docker.com/engine/reference/commandline/attach/|https://docs.docker.com/engine/reference/commandline/attach/]] Achtung: wieder raus mit **CTRL-p CTRL-q. **Details siehe [[https://docs.docker.com/engine/reference/commandline/attach/|https://docs.docker.com/engine/reference/commandline/attach/]]
- 
-===== Docker Build ===== 
- 
- 
-https://stackify.com/docker-build-a-beginners-guide-to-building-docker-images/ 
- 
-Geht immer von einem Dockerfile aus: https://docs.docker.com/reference/dockerfile/ 
- 
-<code> 
-# Use official Alpine release 
-FROM alpine:3.19.3 as build 
- 
-# Maintainer 
-LABEL maintainer="Thomas Rother <thomas.rother@devoteam.com>" 
-LABEL version="1.2" 
-LABEL description="radsec proxy server for remote RADIUS operation with TLS security" 
- 
-ENV RADSECVERSION 1.11.0 
-ENV RADSECURL https://github.com/radsecproxy/radsecproxy/releases/download/${RADSECVERSION}/ 
-ENV RADSECFILENAME radsecproxy-${RADSECVERSION}.tar.gz 
- 
-# Change working dir 
-WORKDIR /root 
- 
-# Update apk 
-RUN apk update 
- 
-# Install buildtools 
-RUN apk add --no-cache make g++ openssl-dev nettle-dev musl-dev 
- 
-# Create output dir 
-RUN mkdir output 
- 
-# Download radsecproxy source files 
-RUN wget ${RADSECURL}${RADSECFILENAME} 
- 
-# Untar radsecproxy 
-RUN tar xf ${RADSECFILENAME} --strip-components=1 
- 
-# Configure 
-RUN ./configure --prefix=/root/output --sysconfdir=/etc 
- 
-# Make and install to output dir 
-RUN make && make install 
- 
-# Create radsecproxy container 
-FROM alpine:3.19.3 
- 
-# Update apk 
-RUN apk update 
- 
-# Install openssl, ca-certificates, nettle and tini 
-RUN apk add --no-cache openssl ca-certificates bash nettle tini 
- 
-# Copy from 'build' stage 
-COPY --from=build /root/output/ / 
-# COPY --from=build /root/radsecproxy.conf-example /etc/radsecproxy/radsecproxy.conf 
- 
-# create config directory and add certs 
-RUN mkdir /etc/radsecproxy/ 
-COPY radsecproxy/ /etc/radsecproxy/ 
-COPY certs/       /etc/radsecproxy/ 
- 
-# Copy start.sh 
-COPY start.sh /root/start.sh 
- 
-# Make start.sh executeable 
-RUN chmod u+x /root/start.sh 
- 
-# Create Radsecproxy logging 
-RUN mkdir /var/log/radsecproxy 
- 
-# Export volumes 
-VOLUME /var/log/radsecproxy 
- 
-# Make Radsecproxy's ports available 
-EXPOSE 2083 
- 
-# Set Tini entrypoint 
-# https://computingpost.medium.com/how-to-use-tini-init-system-in-docker-containers-69283d0099ed 
-ENTRYPOINT ["/sbin/tini", "--"] 
- 
-    # Start Radsecproxy 
-    CMD ["/root/start.sh"] 
- 
-</code> 
- 
-Der Build wird normalerweise gecacht, das kann man abschalten: 
- 
-<code> 
-docker build . 
-</code> 
- 
-Dockerfle Syntax check 
- 
-<code> 
-docker build --check . 
-</code> 
- 
-Docker build mit tag: 
- 
-<code> 
-docker build . -t yourusername/example-node-app 
-</code> 
-<code> 
-thommie@odysseus3:~/git/gitea/dockerbuilds/myradius> docker build -f myradius.docker . 
-Sending build context to Docker daemon  5.632kB 
-Step 1/3 : FROM freeradius/freeradius-server:latest 
- ---> 0a093ead10b6 
-Step 2/3 : COPY raddb/ /etc/raddb/ 
- ---> 096f00c66db0 
-Step 3/3 : EXPOSE 1812-1813/udp 
- ---> Running in 6d5f572b0a8b 
-Removing intermediate container 6d5f572b0a8b 
- ---> c6c0d41f944a 
-Successfully built c6c0d41f944a 
- 
-</code> 
  
 ===== Docker Compose ===== ===== Docker Compose =====
Zeile 287: Zeile 313:
 <badge>Hinweis: Für Raspis wird das Binary für …-linux-armv7 benutzt (ARM Architektur)</badge> <badge>Hinweis: Für Raspis wird das Binary für …-linux-armv7 benutzt (ARM Architektur)</badge>
  
-===== compose yaml validieren =====+compose yaml validieren 
 <code> <code>
  
Zeile 294: Zeile 321:
 </code> </code>
  
-====== Update per docker compose ======+==== Update per docker compose ====
  
 Update der Images, die im compose file referenziert sind Update der Images, die im compose file referenziert sind
Zeile 300: Zeile 327:
 <code> <code>
 docker compose -f docker-compose-pro.yaml pull docker compose -f docker-compose-pro.yaml pull
- 
 </code> </code>
  
-Daraus die Container neu bauen und startenb+Daraus die Container neu bauen und starten
  
 <code> <code>
Zeile 309: Zeile 335:
  
 </code> </code>
 +
 +Bauen **ohne** caching und dann starten
  
 <code> <code>
-docker compose -f docker-compose-pro.yaml up --force-recreate --build -d +docker compose -f docker-compose-pro.yaml up --force-recreate --build
 </code> </code>
  
-Docker Compose startet die Container, aber nicht daemonisiert. Dazu -d hinzufügen:+Docker Compose startet Container nicht daemonisiert. Dafür -d hinzufügen:
  
 <code> <code>
-docker compose up -d +docker compose up --force-recreate --build -d
 </code> </code>
  
-Üblicherweise nimmt man dafür systemd.+Um Container als Daemon zu starten, nimmt man systemd.
  
 ===== Docker Netzwerke ===== ===== Docker Netzwerke =====
  
-Standardmässig werden drei Netze bridge, host, none angelegt. Alle anderen sind custom Networks, die z.Büber compose angelegt wurden:+Standardmässig werden drei Netze bridge, host, none angelegt. Alle anderen sind custom Networks, die z.Büber compose angelegt wurden:
  
 <code> <code>
Zeile 342: Zeile 368:
 Container werden an die bridge "docker0" auf dem Host gebunden, solange nicht beim docker create ein anderes Netzwerk gewählt wurde (''docker create –network=<NETWORK>''). Mit Container werden an die bridge "docker0" auf dem Host gebunden, solange nicht beim docker create ein anderes Netzwerk gewählt wurde (''docker create –network=<NETWORK>''). Mit
  
 +Dies zeigt den Zustand eines Docker networks
 <code> <code>
 docker network inspect bridge docker network inspect bridge
- 
 </code> </code>
  
-sieht man den Zustand eines Docker networks +==== Docker Custom networks ====
- +
-==== Custom networks ====+
  
 docker network create erzeugt ein eigenes Netzwerk: docker network create erzeugt ein eigenes Netzwerk:
Zeile 355: Zeile 379:
 <code> <code>
 docker network create –subnet 192.168.82.0/24 –driver bridge bridge2 docker network create –subnet 192.168.82.0/24 –driver bridge bridge2
- 
 </code> </code>
  
 +Danach anschauen
 <code> <code>
 locutus:/home/thommie # docker network inspect bridge2 [ { "Name": "bridge2", "Id": "9c353bcf0c2c6ccee0b821e1ff4d1740a074bdea94e93959c522d46a4e6fde8e", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.82.0/24" } ] }, "Internal": false, "Containers": {}, "Options": {}, "Labels": {} } ] locutus:/home/thommie # docker network inspect bridge2 [ { "Name": "bridge2", "Id": "9c353bcf0c2c6ccee0b821e1ff4d1740a074bdea94e93959c522d46a4e6fde8e", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.82.0/24" } ] }, "Internal": false, "Containers": {}, "Options": {}, "Labels": {} } ]
- 
 </code> </code>
  
Zeile 367: Zeile 390:
 <code> <code>
 docker attach container1 docker attach container1
- 
 </code> </code>
  
-sieht man das Netzwerk von innen+sieht man das Netzwerk aus Sicht des Containers
  
 ===== Docker logs ===== ===== Docker logs =====
Zeile 383: Zeile 405:
 ===== Docker volumes ===== ===== Docker volumes =====
  
-Volumes sind Verzeichnisse/Dtane, die vom lokalen Docker Host in den Container gemappt werden. Volumes werden vom Docker Dämon gemanagt, die Daten liegen innerhalb des vom Docker Dämon verwalteten Speicherbereichs.+Volumes sind Verzeichnisse/Dateien, die vom lokalen Docker Host in den Container gemappt werden. Volumes werden vom Docker Dämon gemanagt, Daten liegen innerhalb des vom Docker Dämon verwalteten Speicherbereichs.
  
 Doku: [[https://docs.docker.com/engine/admin/volumes/|https://docs.docker.com/engine/admin/volumes/]] Doku: [[https://docs.docker.com/engine/admin/volumes/|https://docs.docker.com/engine/admin/volumes/]]
  
 In compose: In compose:
 +
 <code> <code>
- 
 services: services:
   frontend:   frontend:
Zeile 398: Zeile 420:
   myapp:   myapp:
     external: true     external: true
- 
 </code> </code>
  
-Syntax: **[lokales volume Verzeichnis Host]:[Verzeichnis im Container]**+Allgemeine Syntax: **[lokales volume Verzeichnis Host]:[Verzeichnis im Container]**
  
-Immer relativ zum compose file gesehen!+Verzeichnisorte werden immer relativ zum Ort des compose file gesehen!
  
- +====== Portainer ======
- +
- +
-===== Portainer =====+
  
 <code> <code>
 docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
- 
 </code> </code>
  
  
  • docker.1726913255.txt.gz
  • Zuletzt geändert: 21/09/2024 - 10:07
  • von thommie4