Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:sitw:2016:docker:lab1 [2017/10/14 22:50]
bstachura
pl:dydaktyka:sitw:2016:docker:lab1 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ===== Docker - wprowadzenie ===== ===== Docker - wprowadzenie =====
 +
 +==== Ważne informacje ====
 +
 +**//Nie wolno restartować maszyn//​**\\
 +\\
 +Tematy ćwiczeń napisane //​KURSYWĄ//​ są zrealizowane i proszę ich nie realizować.
 ==== Terminologia ==== ==== Terminologia ====
  
 **Klient dockera** - polecenie docker używane do kontrolowania środowiska dockera oraz komunikacji ze zdalnymi serwerami dockera.\\ **Klient dockera** - polecenie docker używane do kontrolowania środowiska dockera oraz komunikacji ze zdalnymi serwerami dockera.\\
-*Serwer dockera* - polecenie docker uruchomione w trybie daemona. Zamienia serwer linuksowy w serwer dokera na którym można uruchamiać,​ budować i wyłączać kontenery za pomocą zdalnego klienta.\\ +**Serwer dockera** - polecenie docker uruchomione w trybie daemona. Zamienia serwer linuksowy w serwer dokera na którym można uruchamiać,​ budować i wyłączać kontenery za pomocą zdalnego klienta.\\ 
-*Obrazy dockera* - obrazy zawierające jedną lub więcej abstrakcyjnych warstw filesystemu oraz istotne metadane reprezentujące wszystkie pliki niezbędne do uruchomienia aplikacji w kontenerze. Pojedynczy obraz może być kopiowany na inne hosty. Obraz z reguły posiada nazwę i tag, tag jest używany głównie do identyfikacji wydania obrazu.\\ +**Obrazy dockera** - obrazy zawierające jedną lub więcej abstrakcyjnych warstw filesystemu oraz istotne metadane reprezentujące wszystkie pliki niezbędne do uruchomienia aplikacji w kontenerze. Pojedynczy obraz może być kopiowany na inne hosty. Obraz z reguły posiada nazwę i tag, tag jest używany głównie do identyfikacji wydania obrazu.\\ 
-*Kontener dockera* - jest to linuksowy kontener zainicjowany z konkretnego obrazu. Konkretny kontener może istnieć tylko raz, jednak można łatwo stworzyć wiele kontenerów z tego samego obrazu.+**Kontener dockera** - jest to linuksowy kontener zainicjowany z konkretnego obrazu. Konkretny kontener może istnieć tylko raz, jednak można łatwo stworzyć wiele kontenerów z tego samego obrazu.
  
 ==== Wymagania ==== ==== Wymagania ====
Linia 15: Linia 21:
  
 Instalacja za pomocą mamangera pakietów: Instalacja za pomocą mamangera pakietów:
-<code bash> +<code bash>apt-get install ​apt-transport-https ca-certificates curl iptables</​code>​ 
-apt install docker.io +następnie:​ 
-</​code>​+<code bash>​curl -sSL https://​get.docker.com/ | sh</​code>​
 Włączanie usługi dockera wraz ze startem systemu: Włączanie usługi dockera wraz ze startem systemu:
 <code bash> <code bash>
 systemctl enable docker systemctl enable docker
 </​code>​ </​code>​
-Aby nie musieć korzystać z *sudo* za każdym razem warto dodać się też do grupy *docker*+Aby nie musieć korzystać z **sudo** za każdym razem warto dodać się też do grupy **docker**
  
 ==== Dockerfile ==== ==== Dockerfile ====
-Aby zbudować obraz niezbędny jest poprawny *Dockerfile*,​ który opisuje każdą z warstw abstrakcji oraz metadane, które znajdą się w wyjściowym obrazie.\\ +Aby zbudować obraz niezbędny jest poprawny ​**Dockerfile**, który opisuje każdą z warstw abstrakcji oraz metadane, które znajdą się w wyjściowym obrazie.\\ 
-Typowy *Dockerfile* dla aplikacji *nodejs* może wyglądać tak:+Typowy ​**Dockerfile** dla aplikacji ​**nodejs** może wyglądać tak:
  
 <code bash> <code bash>
Linia 45: Linia 51:
 </​code>​ </​code>​
 Każda z linii nakłada na obraz kolejną warstwę abstrakcji, dobrą praktyką jest zaczynać od najniższego poziomu jako od systemu, gdyż w przypadku zmian, np ścieżki w zmiennej AP, budowa nowego obrazu rozpocznie się od zmienionej linii, wszystkie wcześniejsze zostaną pominięte, co zaoszczędzi czasu przy budowaniu.\\ Każda z linii nakłada na obraz kolejną warstwę abstrakcji, dobrą praktyką jest zaczynać od najniższego poziomu jako od systemu, gdyż w przypadku zmian, np ścieżki w zmiennej AP, budowa nowego obrazu rozpocznie się od zmienionej linii, wszystkie wcześniejsze zostaną pominięte, co zaoszczędzi czasu przy budowaniu.\\
-Poniżej wyjaśnię anatomię pliku *Dockerfile* na powyższym przykładzie.\\+Poniżej wyjaśnię anatomię pliku **Dockerfile** na powyższym przykładzie.\\ 
 + 
 +   * **FROM node:0.10** - oznacza, że nasz obraz będzie budowany na podstawie obrazu node w wersji 0.10.X, by zablokować do konkretnej wersji trzeba ją uściślić,​ np.: node:​0.10.33. 
 +   * **MAINTAINER Jan Kowalski <​jkowalski@fajnymail.com>​** - pozwala dodać kontakt do autora, propaguje autora również w metadanych wszystkich tworzonych obrazów. 
 +   * **LABEL "​ocena"​="​5 gwiazdek"​ "​klasa"​="​pierwsza"​** - ta funkcjonalność istnieje od dockera 1.6, pozwala dodawać metadane w formie klucz=wartość,​ można na ich podstawie potem wyszukiwać i identyfikować kontenery 
 +   * **USER root** - domyślnie docker uruchamia wszystkie procesy w kontenerze jako root, za pomocą USER można to zmienić (ze względóœ bezpieczeństwa nie polecam produkcyjnie uruchamiać konteneróœ z procesami roota, przypominam,​ że pomimo izolacji, nadal korzystamy z jądra gospodarza) 
 +   * **ENV AP /data/app** - zmienna, które mogą być użyte podczas budowy obrazu 
 +   * **ENV SCPATH /​etc/​supervisor/​conf.d** - zmienna, które mogą być użyte podczas budowy obrazu 
 +   * **RUN apt -y update** ​ - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności. 
 +   * **RUN apt -y install supervisor** - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności. 
 +   * **RUN mkdir -p /​var/​log/​supervisor** - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności. 
 +   * **ADD .supervisor/​conf.d/​* $SCPATH\\ 
 +ADD *.js* $AP/** - ADD kopiuje pliki z lokalnego systemu do obrazu 
 +   * **WORKDIR $AP\\ 
 +RUN npm install** - WORKDIR zmienia aktualny katalog w jakim pracuje podczas budowania obrazu dla kolejnych instrukcji 
 +   * **CMD ["​supervisord",​ "​-n"​]** - CMD definiuje polecenie uruchamiane razem  kontenerem (właściwą aplikację) 
 + 
 +Każda kolejna linia Dockerfile i każdy krok tworzy nową warstwę, która zależy od poprzedniej! 
 + 
 +====Budowanie obrazu==== 
 +Obrazy dockera budujemy za pomocą polecenia uruchamianego w katalogu z **Dockerfile**:​ 
 +<code bash> 
 +docker build -t example/​docker-node-hello:​latest . 
 +</​code>​ 
 +====Przykład==== 
 + 
 +==== Ćwiczenia do wykonania na localhost ==== 
 + 
 +   * //Zrób update systemu//  
 +<code bash>apt update && apt upgrade</​code>​ 
 +   * //​Zainstaluj docker-engine//​ 
 +Obecnie 
 +<code bash>​apt-get install apt-transport-https ca-certificates curl iptables</​code>​ 
 +następnie:​ 
 +<code bash>​curl -sSL https://​get.docker.com/​ | sh</​code>​ 
 +Dawniej 
 +<code bash>apt install docker.io</​code>​ 
 +   * //Ustaw MTU na wartość 1454, aby tego dokonać należy dodać// 
 +<code bash>​--mtu=1454</​code>​  
 +//do obecnych//  
 +<code bash>​OPTIONS</​code>​ 
 +//w pliku//  
 +<code bash>/​etc/​default/​docker</​code>​ 
 +   * //Ustaw autostart usługi docker// 
 +<code bash>​systemctl enable docker</​code>​ 
 +   * //Uruchom usługę docker// 
 +<code bash>​systemctl start docker</​code>​ 
 +   * **Zweryfikuj instalację dockera przez uruchomienie kontenera hello-world** 
 +<code bash>​docker run hello_world</​code>​ 
 +   * //​Zrestartuj hosta gospodarza//​ 
 +   * //​Zweryfikuj status usługi docker przez uruchomienie kontenera hello-world jeszcze raz// 
 +   * //​Zweryfikuj wartość MTU na interfejsie **docker0**//​  
 +<code bash>ip address show dev docker0</​code>​ 
 + 
 +\\ 
 +\\ 
 +**Proszę odinstalować dockera na końcu laboratoriów** 
 + 
 +==== Treść laboratorium ==== 
 +\\ 
 +\\ 
 +**Dockerfile** proszę zakładać w katalogu domowym użytkownika **student** lub jego podkatalogach\\ 
 +\\ 
 +\\ 
 +**Ćwiczenia proszę wykonywać dalej na localhost**\\ 
 +\\ 
 +=== Ćwiczenie 1 === 
 + 
 +   * Przygotuj **Dockerfile**,​ który zainstaluje httpd na oficjalnym obrazie Centos 6 
 +   * Dodaj pole **maintainer** 
 +   * Zbuduj obraz z o nazwie **laborki** 
 +   * Uruchom kontener w trybie interaktywnym  
 +<code bash>-ti </​code>​ 
 +   * Uruchom konener w tle  
 +<code bash>​-d</​code>​ 
 +   * Sprawdź czy kontener jest uruchomiony  
 +<code bash>​docker ps</​code>​ 
 +   * Sprawdź czy w kontenerze **jest zainstalowany httpd** 
 +   * Sprawdź czy obraz ma około **261MB** 
 + 
 +=== Ćwiczenie 2 === 
 + 
 +   * Zmodyfikuj wcześniejszy **Dockerfile** tak, aby startował **httpd** (httpd ma być uruchomiony w **FOREGROUNDZIE,​ nie jako daemon!**) 
 +   * przebuduj obraz 
 +   * sprawdź czy kontener działa 
 +   * sprawdź czy httpd działa 
 + 
 +=== Ćwiczenie 3 === 
 + 
 +   * Przygotuj index.html z wiadomością powitalną 
 +   * Zmodyfikuj poprzedniego **Dockerfile** i dodaj plik index.html do obrazu w ścieżce: /​var/​www/​html/​index.html 
 +   * przebuduj obraz 
 +   * uruchom kontener z upublicznionym portem 80 
 +   * odwiedź stronę powitalną 
 + 
 +=== Ćwiczenie 4 === 
 + 
 +   * załóż konto na **docker.io** 
 +   * zaloguj się do docker.io  
 +<code bash>​docker login</​code>​ 
 +   * wyeksportuj  
 +<code bash>​docker push</​code>​ 
 +obraz (musi nazywać się jak użytkownik,​ czyli jeśli konto to **jkowalski**,​ to obraz powinien nazywać się: **jkowalski/​nazwa_obrazu:​tag**) - jeśli trzeba, przebuduj obraz do poprawnej nazwy 
 +   * Ściągnij obraz grupy po lewej  
 +<code bash>​docker run -d nazwa_uzytkownika/​nazwa_obrazu</​code>​ 
 +   * uruchom kontener z tego obrazu 
 +   * odwiedź stronę powitalną 
 +=== Ćwiczenie 5 === 
 + 
 +   * Proszę stworzyć plik **dockerfile** opisujący maszynę partą o system Centos w wersji 7. System ten ma mieć dodanych 2 użytkowników systemowych **jan** oraz **kinga**, każdy z nich ma mieć ustawione hasło: **DockerLab** 
 +   * Użytkownicy dodane przez Państwa mają należeć do grup **users** oraz **sudo**. 
 +   * Proszę zainstalować sudo i zmodyfikować plik sudoers tak, aby sudo działało dla grupy sudo. 
 +   * Proszę zbudować i uruchomić obraz, zweryfikuj, że wszystko działa poprawnie oraz członkostwo użytkowników. 
 + 
 +=== Ćwiczenie 6 ===
  
-   ​* ​*FROM node:0.10* - oznacza, że nasz obraz będzie budowany na podstawie obrazu node w wersji 0.10.X, by zablokować do konkretnej wersji trzeba ją uściślić,​ np.: node:​0.10.33. +   ​* ​Proszę uruchomić kontener dockera zawierający **bazę MySQL** w wersji ​5.nazwą**mysql-container**, zostanie ona wykorzystana w późniejszych zadaniach.
-   * *MAINTAINER Jan Kowalski <​jkowalski@fajnymail.com>​- pozwala dodać kontakt do autora, propaguje autora również ​metadanych wszystkich tworzonych obrazów. +
-   * *LABEL "​ocena"​="​gwiazdek"​ "​klasa"​="​pierwsza"​* - ta funkcjonalność istnieje od dockera 1.6, pozwala dodawać metadane w formie klucz=wartość,​ można na ich podstawie potem wyszukiwać i identyfikować kontenery +
-   * *USER root* - domyślnie docker uruchamia wszystkie procesy w kontenerze jako root, za pomocą USER można to zmienić (ze względóœ bezpieczeństwa nie polecam produkcyjnie uruchamiać konteneróœ z procesami roota, przypominam,​ że pomimo izolacji, nadal korzystamy ​jądra gospodarza) +
-   * *ENV AP /​data/​app* ​zmienna, które mogą być użyte podczas budowy obrazu +
-   * *ENV SCPATH /​etc/​supervisor/​conf.d* - zmiennaktóre mogą być użyte podczas budowy obrazu +
-   * *RUN apt -y update* ​ - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności. +
-   * *RUN apt -y install supervisor* - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności. +
-   * *RUN mkdir -p /​var/​log/​supervisor* - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności. +
-   * *ADD .supervisor/​conf.d/​* $SCPATH\\ +
-ADD *.js* $AP/* - ADD kopiuje pliki z lokalnego systemu do obrazu +
-   * *WORKDIR $AP\\ +
-RUN npm install* - WORKDIR zmienia aktualny katalog w jakim pracuje podczas budowania obrazu dla kolejnych instrukcji +
-   * *CMD ["​supervisord",​ "​-n"​]* - CMD definiuje polecenie uruchamiane razem  kontenerem (właściwą aplikację)+
  
-Każda kolejna linia Dockerfile i każdy krok tworzy nową warstwę, któ©a zależy od poprzedniej!+=== Ćwiczenie 7 ===
  
-==Budowanie obrazu== +   * Proszę stworzyć i uruchomić kontener w którym zainstalują i uruchomią Państwo forum oparte o skrypt **flarum** (http://​flarum.org/​ zainstalowany ​za pomocą ​**composera**),​ jako bazę proszę wykorzystać kontener **mysql-container**. System dowolny.  
-Obrazy dockera budujemy ​za pomocą ​polecenia uruchamianego w katalogu z Dockerfile:​ +   * Proszę przekierować port 8080 na port 80 kontenera z flarum.
-'''​docker build -t example/​docker-node-hello:​latest ​.'''​+
  
-=LABY=+=== Ćwiczenie 8 ===
  
-==lab 1 (Instalacja i przygotowanie dockera)== +   Proszę uruchomić kontener z wordpressem ​(zmapować port 8081), jako  bazę wykorzystać kontener ​**mysql-container**
-Zrób update systemu (apt update && apt upgrade) +
-* Zainstaluj docker-engine (apt install docker.io) +
-* Ustaw MTU na wartość 1454 (dodać --mtu=1454 do obecnych OPTIONS w pliku /​etc/​default/​docker) +
-Ustaw autostart usługi docker (systemctl enable docker) +
-Uruchom usługę docker (systemctl start docker) +
-* Zweryfikuj instalację dockera przez uruchomienie kontenera hello-world (docker run hello world) +
-Zrestartuj hosta gospodarza +
-Zweryfikuj status usługi docker przez uruchomienie kontenera hello-world jeszcze raz +
-* Zweryfikuj wartość MTU na interfejsie docker0 (ip address show dev docker0)+
pl/dydaktyka/sitw/2016/docker/lab1.1508014218.txt.gz · ostatnio zmienione: 2019/06/27 15:55 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0