update
This commit is contained in:
parent
0a7972a6d7
commit
53d63af068
344
docker/README.md
344
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</code>
|
||||
|
||||
3. Bind mounts of remote share which are defined through docker volumes
|
||||
<code>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 id>
|
||||
```
|
||||
# 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 <container-name> /bin/bash
|
||||
|
||||
# Alpine
|
||||
sudo docker exec –it <container-name> /bin/sh
|
||||
|
||||
# als root
|
||||
docker exec -u root -it <container-name> /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 id>
|
||||
```
|
||||
|
||||
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 <container-name> /bin/bash
|
||||
|
||||
# Alpine
|
||||
sudo docker exec –it <container-name> /bin/sh
|
||||
|
||||
# als root
|
||||
docker exec -u root -it <container-name> /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 <registry_url>` 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</code>
|
||||
|
||||
3. Bind mounts of remote share which are defined through docker volumes
|
||||
<code>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`
|
||||
Loading…
Reference in New Issue
Block a user