diff --git a/docker/README.md b/docker/README.md index 01cccfe..bf81a58 100644 --- a/docker/README.md +++ b/docker/README.md @@ -6,25 +6,21 @@ include_toc: true Installation: See separate page [Docker Installation](docker-install.md) + + ## Summary Docker simplifies the development and deployment of applications by providing a lightweight, portable, and consistent containerized environment. It bridges the gap between development and production, enabling developers to focus on building applications without worrying about environment-specific issues. The applications run consistently across different computing environments, whether on a developer's laptop, a test server, or in production. + + ## Advantages of Docker - __Portability:__ Containers ensure applications behave the same regardless of the environment (development, testing, production). + - __Efficiency:__ Containers use shared OS resources, making them faster and less resource-intensive compared to VMs. + - __Scalability:__ Docker enables rapid scaling of applications by spinning up multiple container instances as needed. + - __Isolation:__ Each container runs independently, preventing conflicts between applications. -Efficiency: - -Containers use shared OS resources, making them faster and less resource-intensive compared to VMs. - -Scalability: - -Docker enables rapid scaling of applications by spinning up multiple container instances as needed. - -Isolation: - -Each container runs independently, preventing conflicts between applications. ## Key Concepts of Docker @@ -75,6 +71,7 @@ Docker provides volumes for persistent storage, ensuring data remains even if a Tools like Docker Compose and Kubernetes are used to manage and scale multiple containers in production environments. + ## Workflow example 1. Write a Dockerfile to package the application. @@ -82,23 +79,29 @@ Tools like Docker Compose and Kubernetes are used to manage and scale multiple c 3. Run the image as a container using docker run. 4. Use Docker Compose to manage multiple containers for a complete application (e.g., web server + database). ---- -## Docker Image + +# Docker Image Docker images are the building blocks for containers. An image is a static snapshot of an environment that contains all necessary dependencies for an application. Images are created using a `Dockerfile` and can be stored and shared via a Docker registry like Docker Hub. -### Dockerfile + + +## Dockerfile `Dockerifle` ist eine einfache Textdatei, mit der man eigene Images bauen kann. Sie basieren immer auf einem bestehenden base Image (z.B. nginx:latest). Mit `docker build` wird das image erstellt, bevor man es mit `docker run` starten kann. -### Building Image + + +## Building Image Im Ordner wo das Dockerfile liegt, ausführen: `docker build -t node-app:1.0 .`, wobei `node-app` ein x-beliebiger Name ist für das image, und anschl. die Version. Dann starten mit `docker run -d -p 80:3000 node-app:1.0` wenn man es auf Port 80 von aussen laufen lassen will. Dockerfile Doku unter https://docs.docker.com/reference/builder + + ## Docker Hub hier gibt es vorgefertigte Images. @@ -109,156 +112,21 @@ $ docker pull etc. ``` ---- -## Docker Container +## Commands -Ein Container ist ein Image, welches gerade ausgeführt wird. Wenn ein Image mit `docker run nginx` ausgeführt wird, spricht man von einem Container. Es ist vergleichbar mit einem Prozess. Container wird auf Basis eines Ausgangs-Images gestartet. - -## Docker Volumes - -There are three volume types: - -1. Docker volumes which are stored and handled internally by docker (c.f. docker config to choose where they are actually stored). - -``` -version: '3.9' -services: - caddy: - image: caddy:2.6.2 - volumes: - - caddy_data:/data -volumes: - caddy_data -``` - -2. Bind mounts which are direct access to the host file system from a container - -``` -version: '3.9' -services: - caddy: - image: caddy:2.6.2 - volumes: - - /opt/docuteam/ssl/certifcate.pem:/cert.pem:ro - -3. Bind mounts of remote share which are defined through docker volumes -version: '3.9' -services: - fedora: - image: docker.cloudsmith.io/docuteam/docker/fcrepo:6.2.0 - volumes: - - fedora_data:/fcrepo_home -volumes: - fedora_data: - driver_opts: - type: cifs - device: //remote-hostname.com/path/to/share/fedora - o: addr=remote-hostname.com,username=user,password=mysuperpassword,nodev,noexec,nosuid,vers=2.1,uid=1000,gid=1000 -``` - ---- - -# Docker Befehle - -## Anzeigen aller Container - -``` -sudo docker ps -a -``` - -Nur laufende: - -``` -sudo docker ps -``` - -## Anzeigen aller Images +### Anzeigen aller Images ``` sudo docker images ``` -## Ausgabe eines Containers anzeigen -``` -docker logs -``` +# Docker Container -## Docker logs +Ein Container ist ein Image, welches gerade ausgeführt wird. Wenn ein Image mit `docker run nginx` ausgeführt wird, spricht man von einem Container. Es ist vergleichbar mit einem Prozess. Container wird auf Basis eines Ausgangs-Images gestartet. -``` -journalctl -xu docker.service -``` -## Container starten - -``` -docker run --name Test_run ubuntu:20.04 -``` - -## Container stoppen / neu starten - -``` -docker stop -docker restart -``` - -## Befehl in Docker Container ausführen - -Z.B. MySQL, wobei `wordpress-baumfreunde_db_1` der Container-Name ist, den man mit `docker ps` herausfindet. - -``` -sudo docker exec -it wordpress-baumfreunde_db_1 mysql -uroot -p -``` - -## Import DB in docker container - -``` -sudo docker exec -i wp_db mysql -h 172.17.0.1 -P 3306 --protocol=tcp -uroot -p wp_baum < /var/www/wordpress-from-docker/wp_baum.sql -``` - -## Backup DB in docker container - -``` -docker exec -it wordpress-baumfreunde_db_1 mysqldump --add-drop-table -uroot -pXXX wp_baum > /home/roru/wordpress-baumfreunde/wp_baum_backup.sql -``` - -## Bash in container - -``` -sudo docker exec –it /bin/bash - -# Alpine -sudo docker exec –it /bin/sh - -# als root -docker exec -u root -it /bin/bash -``` - -## Copying files/folders - -### Copy file from host to docker - -``` -sudo docker cp "file.txt" c30c199ec89c:/home/actions -``` - -### Copy folder from docker to host - -``` -sudo docker cp "c30c199ec89c:/home/actions/conf /home/rogrut -``` - -## IP des Containers auslesen - -``` -docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name -``` - -## Container entfernen - -Zum Container entfernen: `docker stop Test_run` und `docker rm Test_run`. ## Daten Teilen @@ -293,6 +161,8 @@ $ exit Die Datei ist jetzt im Datencontainer unter `/data/db`. Der Datencontainer muss gar nicht gestartet werden um ihn zu verwenden. + + ## Container verlinken ### Ports verbinden @@ -347,7 +217,103 @@ $ docker run -it -P --link mongodb:mongo ubuntu:20.04 /bin/bash ``` -## Docker compose + +## Commands + +### Anzeigen aller Container + +``` +sudo docker ps -a +``` + +Nur laufende: + +``` +sudo docker ps +``` + +### Ausgabe eines Containers anzeigen + +``` +docker logs +``` + +Docker Logs generell: + +``` +journalctl -xu docker.service +``` + +### Container starten + +``` +docker run --name Test_run ubuntu:20.04 +``` + +### Container stoppen / neu starten + +``` +docker stop +docker restart +``` + +### Befehl in Docker Container ausführen + +Z.B. MySQL, wobei `wordpress-baumfreunde_db_1` der Container-Name ist, den man mit `docker ps` herausfindet. + +``` +sudo docker exec -it wordpress-baumfreunde_db_1 mysql -uroot -p +``` + +### Import DB in docker container + +``` +sudo docker exec -i wp_db mysql -h 172.17.0.1 -P 3306 --protocol=tcp -uroot -p wp_baum < /var/www/wordpress-from-docker/wp_baum.sql +``` + +### Backup DB in docker container + +``` +docker exec -it wordpress-baumfreunde_db_1 mysqldump --add-drop-table -uroot -pXXX wp_baum > /home/roru/wordpress-baumfreunde/wp_baum_backup.sql +``` + +### Bash in container + +``` +sudo docker exec –it /bin/bash + +# Alpine +sudo docker exec –it /bin/sh + +# als root +docker exec -u root -it /bin/bash +``` + +### Copy file from host to docker container + +``` +sudo docker cp "file.txt" c30c199ec89c:/home/actions +``` + +### Copy folder from docker container to host + +``` +sudo docker cp "c30c199ec89c:/home/actions/conf /home/rogrut +``` + +### Get IP of docker container + +``` +docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name +``` + +### Remove docker container + +`docker stop Test_run` und `docker rm Test_run`. + + + +# Docker compose - __Purpose:__ Defines and manages multi-container Docker applications. - __Usage:__ Orchestrates multiple services (containers), networks, and volumes for an application. @@ -359,7 +325,9 @@ $ docker run -it -P --link mongodb:mongo ubuntu:20.04 /bin/bash `docker-compose.yml` is the file which includes all nescessary information. It can include multiple services like web (built from a Dockerfile) and db (pulled from Docker Hub). -### Image Location + + +## Image Location ``` services: @@ -367,25 +335,25 @@ services: image: 'jc21/nginx-proxy-manager:latest' ``` -#### Docker Hub: +### Docker Hub: By default, Docker pulls images from Docker Hub, the default public registry for Docker images. In the example `image: 'jc21/nginx-proxy-manager:latest'` Docker will search for the image jc21/nginx-proxy-manager on Docker Hub and pull the latest tag (or version). -#### Other Registries: +### Other Registries: If the image is hosted on a different container registry (e.g., Amazon Elastic Container Registry, Google Container Registry, or a private registry), you must provide the full registry URL as a prefix, like e.g. `image: 'myregistry.example.com/myimage:latest'`. Docker will pull the image from myregistry.example.com. -#### local cache +### local cache Before attempting to download the image, Docker checks if the image already exists locally. If found, it uses the local copy. -#### Authentication +### Authentication If the registry requires authentication, you must log in using `docker login ` or configure credentials in the Docker Compose file. -#### Local Image +### Local Image Don't use `image`, but `build`. @@ -423,18 +391,64 @@ services: image: redis:latest ``` -### Commands -#### Start + +## Docker Volumes + +There are three volume types: + +1. Docker volumes which are stored and handled internally by docker (c.f. docker config to choose where they are actually stored). + +``` +version: '3.9' +services: + caddy: + image: caddy:2.6.2 + volumes: + - caddy_data:/data +volumes: + caddy_data +``` + +2. Bind mounts which are direct access to the host file system from a container + +``` +version: '3.9' +services: + caddy: + image: caddy:2.6.2 + volumes: + - /opt/docuteam/ssl/certifcate.pem:/cert.pem:ro + +3. Bind mounts of remote share which are defined through docker volumes +version: '3.9' +services: + fedora: + image: docker.cloudsmith.io/docuteam/docker/fcrepo:6.2.0 + volumes: + - fedora_data:/fcrepo_home +volumes: + fedora_data: + driver_opts: + type: cifs + device: //remote-hostname.com/path/to/share/fedora + o: addr=remote-hostname.com,username=user,password=mysuperpassword,nodev,noexec,nosuid,vers=2.1,uid=1000,gid=1000 +``` + + + +## Commands + +### Start Ins Verzeichnis gehen wo docker-compose.yml liegt, und dann `docker-compose start -d`. Mit `-d` wird es im Hintergrund ausgeführt. -#### Stop +### Stop - The `docker-compose stop` command will stop your containers, but it won’t remove them. - The `docker-compose down` command will stop your containers, but it also removes the stopped containers as well as any networks that were created. - You can take down 1 step further and add the `-v` flag to remove all volumes too. This is great for doing a full blown reset on your environment by running `docker-compose down -v`. -#### Events +### Events `docker compose events` \ No newline at end of file