Snippets
1. Podstawy
1.1. Hello World w świecie Dockera
-
docker run hello-world
docker
- komenda uruchamiająca klienta dockerowegorun
- komenda dla klienta dockerowego oznaczająca uruchomienie kontenerahello-world
nazwa obrazu, z którego ma być stworzony kontener
-
A teraz bardziej interaktywnie:
docker run -it busybox sh
Wykonaj jakieś polecenia, np.cat /etc/resolv.conf
. Z kontenera możesz wyjść wpisując komendęexit
. -
W końcu przejdźmy na ciemną stronę mocy:
docker run -d busybox sh -c "while true; do echo hello world; sleep 1; done"
- Sprawdźmy co się dzieje komendą
docker ps
. Jeżeli chcesz zobaczyć wszystkie kontenery, a nie tylko działające, użyj opcji-a
. - Podejrzyj standardowe wyjście z kontenera po wydaniu polecenia
docker logs <id_kontenera/nazwa_kontenera>
. - Zatrzymaj kontener komendą
docker stop <id_kontenera/nazwa_kontenera>
i sprawdź odpowiednią komendą, czy na pewno już nie działa.
- Sprawdźmy co się dzieje komendą
1.2. Znajdźmy "winowajcę"
- W głównym repozytorium dockera znajdź obraz
whalesay
(docker/whalesay
). - Przeczytaj opis obrazu i wykonaj przykładową komendę uruchomieniową zawartą w opisie.
- Następnie spróbuj podać własne słowo w dymku. Czy można podać więcej słów?
1.3. Jakie mamy teraz pobrane obrazy?
W celu odpowiedzi na to pytanie wykonaj polecenie docker images
. Ile widzisz obrazów?
1.4. Weźmy sprawy w swoje ręce
-
Stwórz plik
Dockerfile
z następującą zawartością# Obrazem bazowym niech będzie gadający wieloryb FROM docker/whalesay # Instalujemy program fortune RUN apt-get -y update && apt-get install -y fortunes # Podczas uruchomienia kontenera złota myśl z fortune zostanie wypowiedziana przez wieloryba CMD /usr/games/fortune -a | cowsay
-
Zbuduj nowy obraz komendą
docker build -t fortune-whale .
- Sprawdź, czy nowy obraz istnieje na liście obrazów komendą... no właśnie - jaką?
- Uruchom ten obraz w nowym konterze (znowu sam musisz pogłówkować). Spróbuj to zrobić kilkukrotnie. Czy za każdym razem dostajesz to samo? Dlaczego tak się dzieje?
1.5. Zaczyna się robić poważnie
- Stwórz swoje konto w głównym repozytorium dockera.
- Kliknij
Create repository
w celu utworzenia nowego repozytorium na obrazy i nazwijfortune-whale
(albo jakkolwiek inaczej). Wprowadź opis. - Wyświetl listę swoich obrazów i znajdź ID dopiero co stworzonego obrazu.
- Oznacz ten obraz jako
<nazwa_użytkownika>/<nazwa_repozytorium>
wydjąc komendędocker tag <id_obrazu> <nazwa_użytkownika>/<nazwa_repozytorium>
. - Sprawdź, czy na liście obrazów widnieje twoja nowa nazwa
<nazwa_użytkownika>/<nazwa_repozytorium>
. - Zaloguj się do swojego konta poleceniem
docker login --username=<nazwa_użytkownika> --email=<adres_email>
. W razie problemów sprawdź zgłoszenie. - Wypchnij swój nowy obraz do repozytorium wydając komendę
docker push <nazwa_użytkownika>/<nazwa_repozytorium>
- Obejrzyj obraz na swoim profilu w głównym repozytorium dockera.
- Usuń swój obraz z lokalnego dysku poleceniem
docker rmi <id_obrazu>
. Jeżeli dostaniesz komunikat o niemożliwości skasowania obrazu ze względu na istniejące kontenery, które z niego korzystają, to możesz najpierw skasować te kontenery, albo użyć opcji-f
, która pozwala na wymuszenie skasowania obrazu. - Sprawdź ponownie listę obrazów i czy rzeczywiście nie widznieje już na niej dopiero co stworzony obraz.
- Pobierz obraz z repozytorium za pomocą komendy
docker pull <nazwa_użytkownika>/<nazwa_repozytorium>
. - Prawda, że proste?
2. Rozwinięcie skrzydeł
2.1 Aplikacja
- Stwórz katalog
hello
i wejdź do niego. -
Stwórz plik
app.py
z następującą zawartościąimport os from flask import Flask app = Flask(__name__) @app.route('/') def hello(): provider = str(os.environ.get('PROVIDER', 'world')) return 'Hello '+provider+'!' if __name__ == '__main__': # Nasluchuj na porcie PORT jezeli zdefiniowano, inaczej na 5000. port = int(os.environ.get('PORT', 5000)) app.run(host='0.0.0.0', port=port, debug=True)
-
Stwórz plik źródłowy obrazu z zawartością
FROM python:2.7 MAINTAINER Alojzy Kleks <kleks@bajka.org> RUN pip install flask ADD ./app.py /webapp/ WORKDIR /webapp EXPOSE 5000 CMD ["python", "app.py"]
-
Zbuduj obraz i nazwij go
hello
.
2.2. Sieć
- Uruchom obraz w tle z opcją
-p 5000
. - Wyświetl działające kontenery. Co widzisz w kolumnie
PORTS
? - Aktualnie przypisany port możesz też odczytać używając komendy
docker port <id_kontenera/nazwa_kontenera> 5000
. - Uruchom komendę
docker logs -f <id_kontenera/nazwa_kontenera>
i wejdź na adreshttp://localhost:<aktualnie_przypisany_port>
. - Możesz wymusić własne mapowanie portu za pomocą opcji
-p
, np.docker run -d -p 8080:5000 hello
podmontuje aplikację na lokalnym porcie 8080.
2.3. Zarządzanie
- Przekaż zmienną
PROVIDER
do kontenera za pomocą komendydocker run -d -p 8080:5000 -e "PROVIDER=Kleks" hello
i zobacz tekst na stronie. - Zobacz szczegóły kontenera komendą
docker inspect <id_kontenera/nazwa_kontnera>
. - Kontener możesz zatrzymać podkomendą
stop
i ponownie uruchomić podkomendąstart
. - Kasowanie kontenera odbywa się przy pomocy podkomendy
rm
.
2.4. Wolumeny
- Zamontuj wolumen z opcją
-v
:docker run -d -p 8080:5000 -v /webapp hello
. - Wykorzystując komendę
docker inspect
zobacz, gdzie fizycznie leży ten wolumen. - Podmontuj lokalny katalog jako
/webapp
w kontenerze. W tym celu sprawdź położenie bieżącego katalogu komendąpwd
i zapamiętaj pełną ścieżkę. Potem uruchom kontener komendądocker run -d -p 8080:5000 -v <pełna_ścieżka_do_bieżącego_katalogu>:/webapp hello
. - Zmień wyświetlany tekst w pliku
app.py
, zatrzymaj i ponownie uruchom kontener. Zobacz zmiany na stronie. Dlaczego tak się dzieje?
3. Kompozycja
3.1. Aplikacja
- Stwórz katalog
counter
i wejdź do niego. -
Stwórz plik
app.py
z następującą zawartościąfrom flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): redis.incr('hits') return 'Siemka! Strona zostala wyswietlona %s razy.' % redis.get('hits') if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
-
Stwórz plik
requirements.txt
z zawartościąflask redis
3.2. Obraz
-
Stwórz plik obrazu z zawartością
FROM python:2.7 ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD python app.py
-
Zbuduj obraz i nazwij go
web
.
3.3. Serwisy
- Stwórz plik
docker-compose.yml
z zawartościąweb: build: . ports: - "5000:5000" volumes: - .:/code links: - redis redis: image: redis
3.4. Do dzieła!
- Uruchom aplikację poleceniem
docker-compose up
. - Wejdź na adres
http://localhost:5000/
. - Odśwież stronę.
- Wciśnij
Ctrl-C
. - Uruchom aplikację poleceniem
docker-compose up -d
. - Podejrzyj uruchomione kontenery poleceniem
docker-compose ps
. - Podejrzyj zmienne środowiskowe w kontenerze
web
poleceniemdocker-compose run web env
. - Zatrzymaj aplikację poleceniem
docker-compose stop
.
3.5. Czas na zabawę
- Zmodyfikuj plik
app.py
. - Uruchom aplikację.
- Czy obraz był ponownie budowany? Czy zmiany zostały odzwierciedlone? Jak to się stało?
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.