Wpis z mikrobloga

Kiedy warto dockeryzowac aplikacje?


@quwer: w sumie zawsze chyba ze robimy hello worlda

W czym to pomaga?


@quwer: tak jak wyzej, do tego no wchodzisz w nowy projekt, odpalasz compose up i masz wszystko postawione, od nginxa, redisa, db, apke itd

przy deployach apki bardzo latwo skalowac czy na aws ecs, czy na k8s

#!$%@? sie cos na produkcji pomimo testow itd, robisz docker run xx/xxxx:2.1.37 i masz dzialajaca lokalnie
@quwer: Przede wszystkim zapewnia że apka ma poinstalowane wszelkie toole i środowiska w systemie operacyjnym które potrzebuje, do tego zapewnia niezmienne środowisko uruchomieniowe - co jest bardzo cenne. Jak już raz przetestujesz że twoja apka działa z wersją Javy 12 i zainstalowanym Pythonem 3.6.2 i toolami x, y i z w ustalonych wersjach to taki obraz możesz odpalić na dowolnej maszynie i mieć pewność, że zadziała (a jeśli nie zadziała to
@quwer: nie instalujesz mysql postgres mssql redisa rabbitmq activemq mongodb nginx i nie syfisz sobie kompa tylko masz to w kontenerach i używasz kiedyś trzeba, w dodatku łatwo spiąć potem networki i mieć pewność ze wszystko jest na swoim miejscu i sie widzi
@Myzreal:

Jak już raz przetestujesz że twoja apka działa z wersją Javy 12 i zainstalowanym Pythonem 3.6.2 i toolami x, y i z w ustalonych wersjach to taki obraz możesz odpalić na dowolnej maszynie i mieć pewność, że zadziała


To jest problem ułomnego modelu wykonywania aplikacji w Javie i Pythonie które są zależne od interpretera i braku stabilnego API w owych ekosystemach. W językach natywnie kompilowanych problem nie istnieje - kompilujesz,
@Krolik No spoko, już idę powiedzieć wszystkim że trzeba przepisać system na C++. Nie jestem pewien co odpowiedzieć na pytania typu "kto to będzie pisał?/utrzymywał?" ale ważne że się skompiluje. Oczywiście trzeba będzie kompilować pod targetowaną architekturę i rozwiązywać problemy z tym związane, więc w sumie zastępujemy jeden problem innym, nie wspominając już o restartowaniu apki ze 2 razy dziennie bo nieuniknione memory leaki. Wszelkie otwarte wrota dla hakcerów wynikające z ułomności
@Krolik: To jest problem ułomnego modelu wykonywania aplikacji w Javie i Pythonie które są zależne od interpretera i braku stabilnego API w owych ekosystemach. W językach natywnie kompilowanych problem nie istnieje - kompilujesz, linkujesz statycznie, dostajesz binarkę i odpalasz praktycznie na wszystkim byle miało zgodną architekturę i nie było starsze niż to na co budowałeś. Co więcej, te samą binarke zwykle odpalisz za 10 lat na tym samym systemie, bo ABI
@devopsiarz: Tylko że jest różnica czy obraz dockera ma rozmiar 1GB czy 10 MB. Tak, oczywiście, aplikacje natywne też są dockeryzowane, ale jest kolosalna różnica między wrzuceniem kilku różnych małych binarnych apek do jednego kontenera a wrzuceniem każdej apki do osobnego kontenera, z osobnym runtimem i pakietem bibliotek zajmującym setki MB. Tak, mamy aplikacje które działają na Python 2.x i takie które działają na Python 3.x i podobnie jest z Java.
Btw, docker oczywiście jest świetnym narzędziem jak chcemy np testować aplikacje z różnymi systemami baz danych czy różnymi skomplikowanymi aplikacjami współpracującymi. Wtedy masz lokalne, powtarzalne środowisko i możesz zainstalować wiele wersji tego samego softu obok siebie i sobie nie przeszkadzają.
@Krolik: Tylko że jest różnica czy obraz dockera ma rozmiar 1GB czy 10 MB


W obecnych chmurach, gdzie zwykle te prywatne repozytoria siedzą, to jest żadna różnica. Piszę o firmach, dla których nie ma różnicy czy dostaną rachunek na 30 czy 300 USD. Poza tym, nie wiem czy nawet alpine z muslem ma nawet te 10 MB, a on wprowadza dodatkowy niedeterminizm w aplikacjach w Go i Rust (sprawdzone), więc odradzałbym