{"id":24082465,"url":"https://github.com/dkmaker/docker-kursus","last_synced_at":"2026-01-29T09:40:01.043Z","repository":{"id":101024337,"uuid":"393310112","full_name":"dkmaker/docker-kursus","owner":"dkmaker","description":null,"archived":false,"fork":false,"pushed_at":"2021-08-11T15:04:41.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-13T18:49:00.921Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dkmaker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-06T08:26:18.000Z","updated_at":"2021-08-11T15:04:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"372806c0-a642-4db7-84cc-c56a48e7daab","html_url":"https://github.com/dkmaker/docker-kursus","commit_stats":null,"previous_names":["dkmaker/docker-kursus"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dkmaker/docker-kursus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkmaker%2Fdocker-kursus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkmaker%2Fdocker-kursus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkmaker%2Fdocker-kursus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkmaker%2Fdocker-kursus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dkmaker","download_url":"https://codeload.github.com/dkmaker/docker-kursus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkmaker%2Fdocker-kursus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28874130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T07:35:32.468Z","status":"ssl_error","status_checked_at":"2026-01-29T07:33:31.463Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-09T23:46:57.352Z","updated_at":"2026-01-29T09:40:01.019Z","avatar_url":"https://github.com/dkmaker.png","language":"Dockerfile","readme":"# Mini Docker Kursus\nHvad er en Container?\n\nLidt som i gamle dage med chroot hvor en process tror den har rod i en anden mappe, forskellen er bare at Docker er på kerne niveau og bruger cgroups (lang forklaring - der ikke kommer her)\n\nSe docker som en \"orkerstrerings motor\" ikke som en \"app\" der køre, men en samling af værktøjer og et API til dette.\n\nDen primære driver er den Overlay Driver docker har udviklet hvor man kan \"merge\" lag i en container\n\n![1-etcher-3.png](https://github.com/zenturacp/docker-kursus/raw/main/images/docker_image_explained.png)\n\n## Fordele ved Docker\n* Kode og Applikation hænger sammen - det er det største Win\n* Mindre komponenter (Mikroservices) - Alpine Linux (5mb Linux)\n* Du kan køre med minimal applikationer = sikkerhed, for der er færre komponenter du skal vedligeholde\n* Du kan automatisere CI/CD - Dev / Test / Pre Prod / Prod - alt lavet med samme installation\n* Du kan skalere med f.eks. Kubernetes\n\n## Hvordan kan man få Docker\n* Som lokal installation på en Linux\n* Via Docker Desktop (Deres udviklings værktøj)\n\n## Installation\nFra din favorit Linux installation køre du følgende\n\n```\ncurl https://get.docker.com | sudo bash\n```\n\nDin bruger skal være medlem af Docker gruppen for at kunne bruge docker\n\n```\nsudo usermod -a -G docker om\n```\n\nFor at installere Docker Compose kør følgende kommando\n```\nsudo curl -L \"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose\nsudo chmod +x /usr/local/bin/docker-compose\n```\n\nAlternativ kan man installere docker compose via pip (F.eks. på RaspBerry) dette kræver Python er installeret på maskinen\n\n```\nsudo pip install docker-compose\n```\n\n## Køre Hello World\n```\ndocker run --rm hello-world\n```\n\n## Docker forklaret\n\nDocker består af flere komponenter\n\n### Container\n\nMetadata + et Write Layer\n\n### Image\n\nRead Only filer som kan bruges startes via en Container\n\n### Volume\n\nEt virtuel filsystem som kan bruges i container til at gemme data\n\nDu kan også \"mappe\" en mappe / fil ind i en container istedet for at bruge volumes\n\n### Netværk\n\nHvordan skal man kunne tilgå sin container - [Online Dokumentation](https://docs.docker.com/network/)\n\n* Bridge\n  * Default mode, din container vil få en IP på et lukket netværk, og du skal definere hvad porte der skal ind til container\n* Host\n  * Din Container kommer direkte på din Host (PC dvs. ikke isoleret og alle porte i Container vil være tilgængelige)\n* Overlay\n  * Ikke omfattet her men bruges hvis du har flere docker servere i et Cluster\n* Service Discovery\n  * Docker sørger for at alle containers har et DNS navn på de netværk som bliver oprettet, dvs. på Docker bruger man aldrig IP adresser\n\n## Eksemple på en applikation (Den trivielle måde)\n\nI dette eksempel laver vi et WordPress site med MySQL\n\nFørst laver vi et Netværk (Dette skal vi gøre for containere kan snakke sammen)\n```\ndocker network create backend\n```\n\nLave en MariaDB Container på din maskine\n\n```\ndocker run \\\n    --name mariadb-server \\\n    --network backend \\\n    -e MARIADB_ROOT_PASSWORD=OrangeMakers2021 \\\n    --detach \\\n    mariadb\n```\n\nNu skal vi lave en Database, WordPress User til WordPress, samt en Admin bruger til senere brug\n\nFor at få adgang til SQL Serveren kan man inde fra containeren mariadb køre mariadb (Klienten) dette gøres med følgende kommando\n\n```\ndocker exec -it mariadb-server mariadb -p\n```\n\nOvenstående kommando vil køre filen mariadb i containeren der hedder mariadb-server, med parametret -p efter (Spørg for password), -it siger blot at du skal kunne sende keyboard strokes til den og den først skal stoppe når filen lukker igen\n\n```sql\nCREATE DATABASE wpdb;\nCREATE USER 'wpuser'@'%' IDENTIFIED BY 'OrangeMakers2021';\nGRANT ALL ON wpdb.* to 'wpuser'@'%' IDENTIFIED BY 'OrangeMakers2021' WITH GRANT OPTION;\nCREATE USER 'admin'@'%' IDENTIFIED BY 'OrangeMakers2021';\nGRANT ALL PRIVILEGES ON *.* to 'admin'@'%' IDENTIFIED BY 'OrangeMakers2021' WITH GRANT OPTION;\nFLUSH PRIVILEGES;\nEXIT;\n```\n\nLav en WordPress Container på din maskine\n\n```\ndocker run \\\n    --name wordpress \\\n    --network backend \\\n    --detach \\\n    -e WORDPRESS_DB_HOST=mariadb-server \\\n    -e WORDPRESS_DB_USER=wpuser \\\n    -e WORDPRESS_DB_PASSWORD=OrangeMakers2021 \\\n    -e WORDPRESS_DB_NAME=wpdb \\\n    -p 80:80 \\\n    wordpress\n```\n\nFor at administrere vores MariaDB er det rart med PHP MyAdmin installeret dette kan gøres på følgende måde\n\n```\ndocker run \\\n    --name myadmin \\\n    --network backend \\\n    -e PMA_HOST=mariadb-server \\\n    -p 8080:80 \\\n    phpmyadmin\n```\n\n## Samme eksempel som ovenfor men nu med Docker-Compose\n\nDocker Compose er en \"deklarativ\" måde at sætte dit docker miljø op på, docker compose kigger på din template og sørger for det er som der står i templaten. dvs. man kan køre denne igen og igen og rette ting i den som så vil kunne lægges på.\n\n```yaml\nversion: \"3\"\nservices:\n\n  mariadb-server:\n    image: mariadb:latest\n    container_name: mariadb-server\n    restart: always\n    networks:\n      - backend\n    environment:\n      - MYSQL_ROOT_PASSWORD=OrangeMakers2021\n\n  wordpress:\n    image: wordpress:latest\n    container_name: wordpress\n    restart: always\n    networks:\n      - backend\n    ports:\n      - \"80:80\"\n    environment:\n      - WORDPRESS_DB_HOST=mariadb-server\n      - WORDPRESS_DB_USER=wpuser\n      - WORDPRESS_DB_PASSWORD=OrangeMakers2021\n      - WORDPRESS_DB_NAME=wpdb\n\n  myadmin:\n    image: phpmyadmin:latest\n    container_name: myadmin\n    restart: always\n    networks:\n      - backend\n    ports:\n      - \"8080:80\"\n    environment:\n      - PMA_HOST=mariadb-server\n    depends_on:\n      - \"mariadb-server\"\n\nnetworks:\n  backend:\n```\n\n## Docker Hub\nHvad er docker Hub?\n\n## Bygge Docker image\nEt Docker image består af en Dockerfile som er en fil der bestemmer hvordan din docker skal bygges. jeg har lavet et eksemple her\n\nDette er blot en Webserver baseret på NGINX med en Index fil\n\nHer et absolut minimum [eksempel](https://github.com/zenturacp/docker-kursus/tree/main/buildwebserver-static)\n\n```dockerfile\nFROM nginx:latest\n\nCOPY index.html /usr/share/nginx/html/\nCOPY phpinfo.php /usr/share/nginx/html/\n```\n\nHvis man skal bruge PHP findes der en PHP Container fra PHP selv\n\n```dockerfile\nFROM nginx:latest\n\nCOPY index.html /usr/share/nginx/html/\nCOPY phpinfo.php /usr/share/nginx/html/\n```\n\n## Cheat Sheet\n* Start Container\n  * docker run container-navn\n* Stop Container\n  * docker stop container-navn\n* List kørende containere\n  * docker ps\n* List alle også stoppede containere\n  * docker ps -a\n* Se logs fra Container\n  * docker logs container-navn\n* Gå ind i Container\n  * docker exec -it container-navn (bash eller sh)\n\n## Maskiner til kursus\n\n| Hostname | IP adresse    | Username | Password         |\n| -------- | ------------- | -------- | ---------------- |\n| DOCKER1  | 20.101.95.199 | om       | OrangeMakers2021 |\n| DOCKER2  | 13.80.171.197 | om       | OrangeMakers2021 |\n| DOCKER3  | 13.80.171.208 | om       | OrangeMakers2021 |\n| DOCKER4  | 13.80.171.248 | om       | OrangeMakers2021 |\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkmaker%2Fdocker-kursus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdkmaker%2Fdocker-kursus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkmaker%2Fdocker-kursus/lists"}