Różnice

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

Odnośnik do tego porównania

pl:dydaktyka:sitw:2016:docker:lab1 [2017/10/24 09:01]
bstachura
pl:dydaktyka:sitw:2016:docker:lab1 [2019/06/27 15:50]
Linia 1: Linia 1:
-===== Docker - wprowadzenie ===== 
- 
-==== Ważne informacje ==== 
- 
-**//Nie wolno restartować maszyn//​**\\ 
-\\ 
-Tematy ćwiczeń napisane //​KURSYWĄ//​ są zrealizowane i proszę ich nie realizować. 
-==== Terminologia ==== 
- 
-**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.\\ 
-**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. 
- 
-==== Wymagania ==== 
- 
-   * Linux kernel w wersji nowszej niż 3.8 
-   * Aplikacja musi działąć a FOREGROUNDZIE,​ nie może być demonizowana (można uruchamiać aplikacje jako daemony za pomocą systemd, ale to nie jest przedmiotem laboratoriów) 
- 
-==== Instalacja ==== 
- 
-Instalacja za pomocą mamangera pakietów: 
-<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>​ 
-Włączanie usługi dockera wraz ze startem systemu: 
-<code bash> 
-systemctl enable docker 
-</​code>​ 
-Aby nie musieć korzystać z **sudo** za każdym razem warto dodać się też do grupy **docker** 
- 
-==== 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.\\ 
-Typowy **Dockerfile** dla aplikacji **nodejs** może wyglądać tak: 
- 
-<code bash> 
-FROM node:0.10 
-MAINTAINER Jan Kowalski <​jkowalski@fajnymail.com>​ 
-LABEL "​ocena"​="​5 gwiazdek"​ "​klasa"​="​pierwsza"​ 
-USER root 
-ENV AP /data/app 
-ENV SCPATH /​etc/​supervisor/​conf.d 
-RUN apt -y update 
-RUN apt -y install supervisor 
-RUN mkdir -p /​var/​log/​supervisor 
-ADD .supervisor/​conf.d/​* $SCPATH 
-ADD *.js* $AP/ 
-WORKDIR $AP 
-RUN npm install 
-CMD ["​supervisord",​ "​-n"​] 
-</​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.\\ 
-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ą 
  
pl/dydaktyka/sitw/2016/docker/lab1.txt · ostatnio zmienione: 2019/06/27 15:50 (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