curl -fsSL https://get.docker.com -o get-docker.sh sudo sh ./get-docker.sh
Falls kein curl installiert: apt install curl
Wenn man nicht mit dem Nutzer Root arbeitet, sollte man den aktuellen Benutzer berechtigen:
sudo usermod -aG docker $USER
Falls gleich ohne sudo
gearbeitet werden soll Rechner neu starten!
docker ps
docker ps -a
docker stop <Containername>
(den Namen findet man mit docker ps heraus
)docker rm <Containername>
Der Container aus dem Image nginx fährt mit folgendem Befehl hoch:
docker run -p 80:80 nginx
Die eigene IP-Adresse erhält man mit ip a
Legt euch am besten einen eigenen Ordner für das Docker-Projekt an, um Ordnung zu halten. Die Datei docker-compose.yml enthält die Definition der Container.
Bearbeitet wird die Datei mit:
nano docker-compose.yml
Datei muss so genannt werden und können viele eingerückte Container enthalten.
Die Inhalte findet ihr unten in diesem GitHub-Gist. Den Texteditor Nano beendet man mit: Strg+X
, dann Y
Die Compose-Zusammenstellung hochfahren:
docker compose up -d
Will man die Container updaten, lädt man die neuen Images mit
docker compose pull
Das ist definitiv Geschmachssache und hängt von der Umgebung ab. Wenn man mehr als ein Projekt (zum Beispiel einen Blog und ein Pihole) auf einem Server betreibt, sollte man für jedes einen Ordner anlegen und darin eine Docker-Compose-Datei ablegen. Die nützlichen Helfer wie Portainer und Watchtower kommen zusammen in eine weitere Datei. Dann kann man mit docker compose down
gezielt Teile der Umgebung herunterfahren.
Quelle: https://gist.github.com/jamct/2e6c03f60319423bc4bc6c23fc0aa359
spiral@intrepid:~$ ls Bilder Desktop Dokumente Downloads get-docker.sh indisoftSchulungsmaterial Musik Öffentlich pt 'Untitled Folder' Videos Vorlagen spiral@intrepid:~$ sudo sh ./get-docker.sh # Executing docker install script, commit: 6d51e2cd8c04b38e1c2237820245f4fc262aca6c + sh -c apt-get -qq update >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get -y -qq install ca-certificates curl >/dev/null + sh -c install -m 0755 -d /etc/apt/keyrings + sh -c curl -fsSL "https://download.docker.com/linux/debian/gpg" -o /etc/apt/keyrings/docker.asc + sh -c chmod a+r /etc/apt/keyrings/docker.asc + sh -c echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable" > /etc/apt/sources.list.d/docker.list + sh -c apt-get -qq update >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null + sh -c docker version Client: Docker Engine - Community Version: 27.3.1 API version: 1.47 Go version: go1.22.7 Git commit: ce12230 Built: Fri Sep 20 11:41:11 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 27.3.1 API version: 1.47 (minimum version 1.24) Go version: go1.22.7 Git commit: 41ca978 Built: Fri Sep 20 11:41:11 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.7.22 GitCommit: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c runc: Version: 1.1.14 GitCommit: v1.1.14-0-g2c9f560 docker-init: Version: 0.19.0 GitCommit: de40ad0 ================================================================================ To run Docker as a non-privileged user, consider setting up the Docker daemon in rootless mode for your user: dockerd-rootless-setuptool.sh install Visit https://docs.docker.com/go/rootless/ to learn about rootless mode. To run the Docker daemon as a fully privileged service, but granting non-root users access, refer to https://docs.docker.com/go/daemon-access/ WARNING: Access to the remote API on a privileged Docker daemon is equivalent to root access on the host. Refer to the 'Docker daemon attack surface' documentation for details: https://docs.docker.com/go/attack-surface/ ================================================================================
Um die images in ein gemeinsames Netzwerk über eine yml Datei zu bekommen
mein-netzwerk
in die docker-compose.yml einfügen und folgende Befehle ausführen.
services: portainer: image: portainer/portainer-ce ports: - 9000:9000 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./portainer_data:/data restart: always networks: - mein-netzwerk webapps: image: nginx ports: - 80:80 networks: - mein-netzwerk networks: mein-netzwerk: driver: overlay
docker swarm init
docker stack deploy -c docker-compose.yml mein-stack
Es starten alle Container
spiral@intrepid:~/dockerdateien$ docker run --name webapps -p 80:80 nginx /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2024/10/22 13:54:05 [notice] 1#1: using the "epoll" event method 2024/10/22 13:54:05 [notice] 1#1: nginx/1.27.2 2024/10/22 13:54:05 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 2024/10/22 13:54:05 [notice] 1#1: OS: Linux 6.5.0-0.deb12.1-amd64 2024/10/22 13:54:05 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2024/10/22 13:54:05 [notice] 1#1: start worker processes 2024/10/22 13:54:05 [notice] 1#1: start worker process 29 2024/10/22 13:54:05 [notice] 1#1: start worker process 30 2024/10/22 13:54:05 [notice] 1#1: start worker process 31 2024/10/22 13:54:05 [notice] 1#1: start worker process 32 172.17.0.1 - - [22/Oct/2024:13:54:29 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" "-" 2024/10/22 13:54:57 [notice] 1#1: signal 3 (SIGQUIT) received, shutting down 2024/10/22 13:54:57 [notice] 29#29: gracefully shutting down 2024/10/22 13:54:57 [notice] 29#29: exiting 2024/10/22 13:54:57 [notice] 29#29: exit 2024/10/22 13:54:57 [notice] 30#30: gracefully shutting down 2024/10/22 13:54:57 [notice] 30#30: exiting 2024/10/22 13:54:57 [notice] 30#30: exit 2024/10/22 13:54:57 [notice] 31#31: gracefully shutting down 2024/10/22 13:54:57 [notice] 31#31: exiting 2024/10/22 13:54:57 [notice] 31#31: exit 2024/10/22 13:54:57 [notice] 32#32: gracefully shutting down 2024/10/22 13:54:57 [notice] 32#32: exiting 2024/10/22 13:54:57 [notice] 32#32: exit 2024/10/22 13:54:57 [notice] 1#1: signal 17 (SIGCHLD) received from 30 2024/10/22 13:54:57 [notice] 1#1: worker process 30 exited with code 0 2024/10/22 13:54:57 [notice] 1#1: signal 29 (SIGIO) received 2024/10/22 13:54:57 [notice] 1#1: signal 17 (SIGCHLD) received from 31 2024/10/22 13:54:57 [notice] 1#1: worker process 31 exited with code 0 2024/10/22 13:54:57 [notice] 1#1: signal 29 (SIGIO) received 2024/10/22 13:54:57 [notice] 1#1: signal 17 (SIGCHLD) received from 29 2024/10/22 13:54:57 [notice] 1#1: worker process 29 exited with code 0 2024/10/22 13:54:57 [notice] 1#1: signal 29 (SIGIO) received 2024/10/22 13:54:57 [notice] 1#1: signal 17 (SIGCHLD) received from 32 2024/10/22 13:54:57 [notice] 1#1: worker process 32 exited with code 0 2024/10/22 13:54:57 [notice] 1#1: exit spiral@intrepid:~/dockerdateien$ spiral@intrepid:~/dockerdateien$ spiral@intrepid:~/dockerdateien$ docker swarm init Swarm initialized: current node (c98u1abmo00c49gnilr50j2dq) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-49t76nd6xhv8786fpsdfajlqrri3ew1ws1gsb709y0x0pyai5p-dwyo3e3o830xz6a4ofvt4l1y3 192.168.142.242:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. spiral@intrepid:~/dockerdateien$ docker stack deploy -c docker-compose.yml mein-stack Ignoring unsupported options: restart Since --detach=false was not specified, tasks will be created in the background. In a future release, --detach=false will become the default. Creating network mein-stack_mein-netzwerk Creating service mein-stack_portainer Creating service mein-stack_webapps spiral@intrepid:~/dockerdateien$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f123b82e0ea1 nginx:latest "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 80/tcp mein-stack_webapps.1.qpil0h7b6of7s5df2z8ff1bwf a8dc78fc7d49 portainer/portainer-ce:latest "/portainer" 3 minutes ago Up 3 minutes 8000/tcp, 9000/tcp, 9443/tcp mein-stack_portainer.1.wg8fqp6f26ggtyi2l8kr12wcw
<nowiki> … </nowik i>