This commit is contained in:
Paweł Skórzewski 2024-03-27 08:15:55 +01:00
parent 12bc89369a
commit dbd04404f1

View File

@ -8,14 +8,8 @@
} }
}, },
"source": [ "source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 4. <i>Konteneryzacja</i> [laboratoria]</h2> \n", "<h2> 4. <i>Konteneryzacja</i> [laboratoria]</h2> "
"<h3> Tomasz Ziętkiewicz (2022)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
] ]
}, },
{ {
@ -43,15 +37,11 @@
"## 1. Konteneryzacja\n", "## 1. Konteneryzacja\n",
"- Konteneryzacja to metoda tworzenia lekkich, odizolowanych środowisk uruchomieniowych\n", "- Konteneryzacja to metoda tworzenia lekkich, odizolowanych środowisk uruchomieniowych\n",
"- Różnica między konteneryzacją a maszynami wirtualnymi:\n", "- Różnica między konteneryzacją a maszynami wirtualnymi:\n",
" - Wirtualizacja na poziomie systemu operacyjnego a nie sprzętu\n", " - Wirtualizacja na poziomie systemu operacyjnego, a nie sprzętu\n",
" - Konteneryzacja jest lżejsza: kontener używa tego samego jądra (kernel) co system hosta - mniejszy narzut\n", " - Konteneryzacja jest lżejsza: kontener używa tego samego jądra (*kernel*) co system hosta - mniejszy narzut\n",
" - Konteneryzacja zapewnia gorszy stopień izolacji od hosta\n", " - Konteneryzacja zapewnia gorszy stopień izolacji od hosta\n",
" - Dzięki dostępnym narzędziom i infrastrukturze kontenery są łatwiejsze w utrzymywaniu i bardziej przenośne\n", " - Dzięki dostępnym narzędziom i infrastrukturze kontenery są łatwiejsze w utrzymywaniu i bardziej przenośne\n",
"- Ułatwiają:\n", "- Kontenery ułatwiają rozwój, uruchamianie i dostarczanie aplikacji."
" - rozwój,\n",
" - uruchamianie\n",
" - i dostarczanie\n",
"aplikacji."
] ]
}, },
{ {
@ -80,10 +70,9 @@
"source": [ "source": [
"## 1.1 Docker\n", "## 1.1 Docker\n",
"- Najpopularniejszy obecnie system konteneryzacji\n", "- Najpopularniejszy obecnie system konteneryzacji\n",
"- Działa w m.in. na systemach Linux, Windows i Max OS\n", "- Działa w m.in. na systemach Linux, Windows i Mac OS\n",
"- Udostępnia narzędzia i serwisy ułatwiające korzystanie, zarządzanie i dzielenie się kontenerami\n", "- Udostępnia narzędzia i serwisy ułatwiające korzystanie, zarządzanie i dzielenie się kontenerami\n",
"- Docker umożliwia stworzenie paczki zawierającej sam program jak i środowisko, w którym ma być on uruchomiony\n", "- Docker umożliwia stworzenie paczki zawierającej sam program jak i środowisko, w którym ma być on uruchomiony\n",
" \n",
"- Dokumentacja: https://docs.docker.com/get-started/\n", "- Dokumentacja: https://docs.docker.com/get-started/\n",
"</br><img style=\"height: 50px;\" src=\"img/environments/docker.png\"/>" "</br><img style=\"height: 50px;\" src=\"img/environments/docker.png\"/>"
] ]
@ -113,10 +102,10 @@
}, },
"source": [ "source": [
"## 1.2 Jak zacząć?\n", "## 1.2 Jak zacząć?\n",
" - Na komputerach w laboratoriach: https://laboratoria.wmi.amu.edu.pl/en/issues/docker/\n", " - Na komputerach w laboratoriach: https://laboratoria.wmi.amu.edu.pl/problemy/docker\n",
" - Lokalnie: [instalacja](https://docs.docker.com/engine/install/)\n", " - Lokalnie: [instalacja](https://docs.docker.com/engine/install/)\n",
" - Możliwa zarówno pod Linux, Windows i MacOS.\n", " - Możliwa zarówno pod Linux, Windows i MacOS.\n",
" - Kontenery Linuxowe można uruchamiać również pod Windowsem (za pomocą Docker Desktop lub WSL 2 (Windows Subsystem for Linux). Pod spodem oba używają maszyny wirtualnej (Hyper-V) z Linuxem, w której uruchamiane są kontenery [link](https://www.docker.com/blog/docker-hearts-wsl-2/)" " - Kontenery linuxowe można uruchamiać również pod Windowsem - za pomocą Docker Desktop lub WSL 2 (Windows Subsystem for Linux). Pod spodem oba używają maszyny wirtualnej (Hyper-V) z Linuxem, w której uruchamiane są kontenery ([tak to działa w teorii](https://www.docker.com/blog/docker-hearts-wsl-2), a [tak to można uruchomić](https://dev.to/bowmanjd/install-docker-on-windows-wsl-without-docker-desktop-34m9))"
] ]
}, },
{ {
@ -131,7 +120,7 @@
"- ```docker help [polecenie]``` - wyświetla listę dostępnych poleceń dockera lub opis podanego polecenia. Rozbudowana dokumentacja poleceń: https://docs.docker.com/engine/reference/commandline/docker/\n", "- ```docker help [polecenie]``` - wyświetla listę dostępnych poleceń dockera lub opis podanego polecenia. Rozbudowana dokumentacja poleceń: https://docs.docker.com/engine/reference/commandline/docker/\n",
"- ```docker run``` - uruchamia istniejący obraz tworząc kontener. Przykładowe wywołania:\n", "- ```docker run``` - uruchamia istniejący obraz tworząc kontener. Przykładowe wywołania:\n",
" - ```docker run -i -t ubuntu```<br>\n", " - ```docker run -i -t ubuntu```<br>\n",
" Uruchamia kontener z obrazu \"ubuntu\", allokuje terminal (`-t`) i ustawia tryb \"interaktywny\" (`-i`), dzięki czemu dostajemy terminal \"wenątrz\" kontenera i możemy wywoływać w nim polecenia\n", " Uruchamia kontener z obrazu \"ubuntu\", alokuje terminal (`-t`) i ustawia tryb \"interaktywny\" (`-i`), dzięki czemu dostajemy terminal \"wenątrz\" kontenera i możemy wywoływać w nim polecenia\n",
"\n", "\n",
" - ```docker run -p 8080:8080 jenkins/jenkins:lts```<br>\n", " - ```docker run -p 8080:8080 jenkins/jenkins:lts```<br>\n",
" Uruchomi kontener z Jenkinsem, w wersji \"LTS\". Jeśli obraz Jenkins nie był wcześniej zbudowany/pobrany na lokalną maszynę, automatycznie zostanie pobrany z [Docker Hub](https://hub.docker.com/r/jenkins/jenkins).\n", " Uruchomi kontener z Jenkinsem, w wersji \"LTS\". Jeśli obraz Jenkins nie był wcześniej zbudowany/pobrany na lokalną maszynę, automatycznie zostanie pobrany z [Docker Hub](https://hub.docker.com/r/jenkins/jenkins).\n",
@ -165,7 +154,7 @@
"- ```docker start CONTAINER_ID``` - uruchamia ponownie kontener\n", "- ```docker start CONTAINER_ID``` - uruchamia ponownie kontener\n",
"- ```docker system df``` - pokazuje miejsce zajęte przez obrazy, kontenery i woluminy\n", "- ```docker system df``` - pokazuje miejsce zajęte przez obrazy, kontenery i woluminy\n",
"- ```docker system prune``` - usuwa nieużywane obrazy i kontenery, zazwyczaj zwalniając sporo miejsca na dysku\n", "- ```docker system prune``` - usuwa nieużywane obrazy i kontenery, zazwyczaj zwalniając sporo miejsca na dysku\n",
"- ```docker exec``` - " "- ```docker exec``` - uruchamia polecenie wewnątrz działającego kontenera"
] ]
}, },
{ {
@ -181,7 +170,7 @@
" - Poprzez `docker exec` - wywołanie polecenia w działającym kontenerze\n", " - Poprzez `docker exec` - wywołanie polecenia w działającym kontenerze\n",
" - Poprzez port zmapowany przez flagę `-p` (np. REST API albo interfejs w przegląrce)\n", " - Poprzez port zmapowany przez flagę `-p` (np. REST API albo interfejs w przegląrce)\n",
" - Przez system plików: \n", " - Przez system plików: \n",
" - bind mount: podmontowanie katalogów hosta w kontenerze poprzez flagę `-v` [dokumentacja](https://docs.docker.com/engine/reference/commandline/run/#mount-volume--v---read-only)\n", " - bind mount: podmontowanie katalogów hosta w kontenerze poprzez flagę `-v`; dokumentacja [tu](https://docs.docker.com/reference/cli/docker/container/run/#mount) i [tam](https://docs.docker.com/reference/cli/docker/container/run/#read-only)\n",
" - volumes: https://docs.docker.com/storage/volumes/" " - volumes: https://docs.docker.com/storage/volumes/"
] ]
}, },
@ -194,7 +183,7 @@
}, },
"source": [ "source": [
"# Zadanie 1 [na zajęciach]\n", "# Zadanie 1 [na zajęciach]\n",
"1. Zainstaluj Docker (lub skorzystaj z https://laboratoria.wmi.amu.edu.pl/en/issues/docker/)\n", "1. Zainstaluj Docker (lub skorzystaj z https://laboratoria.wmi.amu.edu.pl/problemy/docker)\n",
"2. Uruchom obraz `ubuntu` w trybie interaktywnym z terminalem (`docker run -ti ubuntu`)\n", "2. Uruchom obraz `ubuntu` w trybie interaktywnym z terminalem (`docker run -ti ubuntu`)\n",
"\n", "\n",
"Poniższe punkty wywołujemy wewnątrz kontenera (w otwartym właśnie terminalu):\n", "Poniższe punkty wywołujemy wewnątrz kontenera (w otwartym właśnie terminalu):\n",
@ -204,7 +193,7 @@
"5. Jaki jest bieżący katalog? (polecenie `pwd`)\n", "5. Jaki jest bieżący katalog? (polecenie `pwd`)\n",
"5. Jaki procesor jest widoczny w środku kontenera? Czy jest to procesor Twojej maszyny? (`lscpu`)\n", "5. Jaki procesor jest widoczny w środku kontenera? Czy jest to procesor Twojej maszyny? (`lscpu`)\n",
"6. Ile wolnego miejsca na dysku jest widoczne wewnątrz kontenera (`df -h`)? Czy jest to zgodne z tym, co pokazuje maszyna hosta?\n", "6. Ile wolnego miejsca na dysku jest widoczne wewnątrz kontenera (`df -h`)? Czy jest to zgodne z tym, co pokazuje maszyna hosta?\n",
"7. Sprawdź ile dostępnej pamięci RAM widać w konenerze (`free -h`). Czy zgadza się to z wynikiem na maszynie hosta?\n", "7. Sprawdź, ile dostępnej pamięci RAM widać w konenerze (`free -h`). Czy zgadza się to z wynikiem na maszynie hosta?\n",
"8. Spróbuj uruchomić jedno z popularnych narzędzi Linuksowych, dostępnych na maszynie hosta (np. `vim`, `less`, `htop`). Czy udało się je uruchomić?\n", "8. Spróbuj uruchomić jedno z popularnych narzędzi Linuksowych, dostępnych na maszynie hosta (np. `vim`, `less`, `htop`). Czy udało się je uruchomić?\n",
"9. Zainstaluj w kontenerze jedno z brakujących narzędzi, np: `apt update; apt install htop`\n", "9. Zainstaluj w kontenerze jedno z brakujących narzędzi, np: `apt update; apt install htop`\n",
"10. Uruchom następujące polecenie: <br>\n", "10. Uruchom następujące polecenie: <br>\n",
@ -233,11 +222,10 @@
"## 1.4 Dockerfile\n", "## 1.4 Dockerfile\n",
"\n", "\n",
" - Dokumentacja: https://docs.docker.com/engine/reference/builder/\n", " - Dokumentacja: https://docs.docker.com/engine/reference/builder/\n",
"\n",
" - Dockerfile składa się z serii poleceń.\n", " - Dockerfile składa się z serii poleceń.\n",
" - Polecenia dockera są pisane WIELKIMI LITERAMI\n", " - Polecenia dockera są pisane WIELKIMI LITERAMI.\n",
" - Wywołanie każdego polecenia tworzy nową warstwę (*layer*)\n", " - Wywołanie każdego polecenia tworzy nową warstwę (*layer*).\n",
" - Jeśli zbudowaliśmy obraz a potem zmieniliśmy jedno z poleceń / dodaliśmy nowe, to przebudowane zostaną tylko warstwy od zmienionej w dół (osczędność czasu i zasobów)" " - Jeśli zbudowaliśmy obraz, a potem zmieniliśmy jedno z poleceń lub dodaliśmy nowe, to przebudowane zostaną tylko warstwy od zmienionej w dół (oszczędność czasu i zasobów)."
] ]
}, },
{ {
@ -250,7 +238,7 @@
"source": [ "source": [
"### Przykładowy Dockerfile:\n", "### Przykładowy Dockerfile:\n",
"```Dockerfile\n", "```Dockerfile\n",
"# Nasz obraz będzie dzidziczył z obrazu Ubuntu w wersji latest\n", "# Nasz obraz będzie dziedziczył z obrazu Ubuntu w wersji latest\n",
"FROM ubuntu:latest\n", "FROM ubuntu:latest\n",
"\n", "\n",
"# Instalujemy niezbędne zależności. Zwróć uwagę na flagę \"-y\" (assume yes)\n", "# Instalujemy niezbędne zależności. Zwróć uwagę na flagę \"-y\" (assume yes)\n",