W niniejszym artykule przedstawiam mój sposób na pracę z Dockerem w taki sposób, aby zachować czystość komputera przy używaniu nowych technologii w celu nauki lub sporadycznym wykorzystaniu. Założenia, które sobie stawiam to "jak najmniej Dockera", czyli skupiam się na tym, aby wiedza potrzebna do jego wykorzystania nie przysłoniła tej wiedzy, którą chcemy posiąść. Przykłady zawierają użycie MongoDB, Node.js oraz ghost.
Czym jest Docker (dla tych, którzy nie wiedzą)
Docker to otwartoźródłowe darmowe oprogramowanie służące do pracy w kontenerach, a kontenery można porównać do bardzo lekkich maszyn wirtualnych. Ich zaletą w porównaniu do maszyn wirtualnych jest dużo większa lekkość, szybkość działania i czas potrzebny na uruchomienie. Wady natomiast to: mniejsza kontrola nad wirtualizowanym środowiskiem i mniejsze bezpieczeństwo (złośliwy kod ma większe szanse na ucieczkę z kontenera). Więcej na ten temat możesz poczytać, na przykład, tutaj: Docker dla programistów, co to jest?.
Skąd wziąć Dockera?
Dockerem można pobawić się zarówno w chmurze, jak i lokalnie. Jednak, gdy już postanowisz go używać do nauki/pracy stanowczo lepiej mieć go na komputerze.
W chmurze
Na początek chciałbym przedstawić Ci wersję chmurową. Znajdziesz ją pod adresem Play with Docker, gdzie trzeba się zalogować. Jeśli nie masz jeszcze konta, to jego założenie jest darmowe, tak samo, jak korzystanie z Docker’a.
UWAGA | Według mnie wersja ta jest wciąż niedojrzała i w ramach moich testów nie nadawał się do żadnej pracy. Przedstawiam ją tutaj ku potomności, bo mam nadzieję, że w końcu rozwiną tę usługę. |
Po lewej stronie możemy sobie tworzyć nowe, kolejne okna z Dockerem, natomiast u góry ekranu widzimy takie dane jak: • wewnętrzny adres IP (do komunikacji między kontenerami), • przycisk do otwierania portu (aby dostać się do poszczególnych usług), oraz adres SSH, który umożliwia nam wgranie plików lub połączenie się z Visual Studio Code.
Lokalnie
Dockera możemy zainstalować lokalnie, co sam uczyniłem. Pobierzesz go z tej strony: Docker install. Nie będę tutaj przedstawiał całego procesu przechodzenia przez kreator – nie ma tam nic nadzwyczajnego, czego nie można zmienić później. Na koniec procesu instalacji i po ponownym uruchomieniu warto sprawdzić, czy Docker działa za pomocą polecenia:
> docker help
Docker w konsoli
Na początek odrobina formalności. Czyli jak to wszystko uruchomić w konsoli – najbardziej podstawowym sposobem interakcji z Dockerem. Całe szczęście to będą tylko dwa polecenia.
Uruchamianie serwisów
Czyli, jak uruchomić oprogramowanie, które w rzeczywistości jest usługą/serwisem działającym w tle. Mowa tu, na przykład o MongoDb czy Microsoft SQL Server.
> docker run --name moje_mongo -p 27017:27017 -d mongo
- run
Powoduje wystartowanie kontenera. Jeśli nie ma obrazu kontenera na dysku, to zostanie on wpierw ściągnięty z publicznego repozytorium.
- --name moje_mongo
Ustawia przyjazną nazwę moje_mongo, która później ułatwia orientowanie się w kontenerach obecnych na naszym komputerze.
- -p 27017:27017
Określa jaki port ma zostać udostępniony – trochę tak, jakbyśmy otwierali port na firewallu. Dla uproszczenia polecam ustawianie na początku takich samych wartości w obu stronach znaku ':', co ułatwi rozpoczęcie pracy z Dockerem.
- -d
Mówi o tym, że uruchomiamy w trybie „odłączonym” (z ang. detatched), co pasuje do natury serwisów, które działają w tle.
- mongo
Określa jakiego obrazu chcemy użyć. W tym przypadku wybieramy MongoDB. Wszystkie dostępne publicznie obrazy możemy przeglądać tutaj: https://hub.docker.com/search?q=&type=image.
Uruchamiając powyższą komendę, możesz zobaczyć informację o ściąganiu kolejnych warstw (z ang. layers). Na końcu tego procesu ujrzysz długi ciąg znaków <1>:
> docker run --name moje_mongo -p 27017:27017 -d mongo
e7c364cf16898d636151d4b1be15caa5b726069c7fde2fa2cf241c4748ebd723 (1)
Jest on niczym innym jak całkowicie unikalnym identyfikatorem kontenera, który właśnie utworzyłeś. Wpisując w konsoli docker ps
możesz podejrzeć kontenery, które działają na twoim komputerze. Zalecam jednak wykorzystać do tego program Docker Dashboard, który wyświetli Ci to w przyjaznej formie oraz pozwoli na wykonanie kilku prostych operacji za pomocą aplikacji okienkowej.
I tak dla przykładu, gdybyśmy chcieli pobawić się platformą ghost (ciekawa usługa do obsługi bloga) wpisujemy:
> docker run -d --name some-ghost -p 2368:2368 ghost
Teraz w przeglądarce wystarczy wpisać https://localhost:2368 i powinniśmy zobaczyć naszą nową stronę internetową.
Uruchamianie obrazów interaktywnych
W ten sposób można działać, na przykład, ucząc się nowego języka programowania.
> docker run --name some-nodejs -p 3000:3000 -v "$(PWD):/mylocaldata" -it node bash
Wartości te zostały przedstawione powyżej, pokrótce je przypomnijmy:
- run
Uruchamia kontener,
- --name some-nodejs
Nadaje mu nazwę some-nodejs
- -p 3000:3000
-Otwiera port 3000 – przyda się do uruchomienia przykładowego kodu z dokumentacji (z rozdziału Getting started, czyli z ang. Rozpoczynanie pracy).
Nowością są:
- -v "$(PWD):/mylocaldata"
Powoduje, że katalog w którym, uruchomisz to polecenie, stanie się dostępny dla kontenera i będzie możliwa łatwa wymiana plików pomiędzy twoim komputerem a Dockerem. Udostępniony katalog będzie widoczny w kontenerze pod ścieżką
/mylocaldata
- -it node bash
Mówi nam, aby w trybie interaktywnym uruchomić obraz
node
z poleceniembash
(Node domyślnie uruchamia konsolowy programnode
).
Po uruchomieniu powyższego polecenia konsola przeniesie nas do bash
uruchomionego na platformie gdzie zainstalowany jest node.js
.
W tym momencie możemy utworzyć plik app.js
i wkleić do niego kod ze strony głównej Node. Niestety, aby uruchomić go bez problemu, należy dokonać dwóch modyfikacji
const http = require('http');
// const hostname = '127.0.0.1'; (1)
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, /*hostname,*/ () => { (2)
console.log(`Server running at http://${hostname}:${port}/`);
});
Zakomentowałem
hostname
i wyłączyłem jego użycie. Jest to niezbędne, ponieważ adres
127.0.0.1
zakłada łączenie się z tej samej maszyny. My jednak uruchamiamy nasz program w kontenerze, który jest widoczny jako osobna maszyna, dlatego nie możemy ograniczać się tylko do localhost. Pamiętaj, że powyższy plik możesz śmiało utworzyć pod Windowsem. Potem przechodzimy do naszego kontenera i wykonujemy polecenia:
> cd /localhost
> node app.js
Teraz przechodzimy w naszej przeglądarce pod adres https://localhost:3000 i widzimy naszą stronę. Modyfikacji w pliku możemy śmiało dokonywać wprost spod Windows, używając ulubionego edytora.
Co, jeśli potrzebujemy otworzyć inny port? Niestety w tym przypadku najprościej jest usunąć kontener i postawić go od nowa. Jednak jest proste rozwiązanie tego problemu – można to zrobić za pomocą Visual Studio Code, co zostanie przedstawione w następnej części.
Komentarze
Prześlij komentarz