Po pierwsze, chociaż Docker jest czasem postrzegany i używany jako system pakowania ad hoc , w rzeczywistości rozwiązuje on zupełnie inny problem: Docker polega na uruchamianiu programów. System Docker pozwala opisywać usługi, które można dowolnie skalować i kontrolować roje kontenerów. Pakiety Debiana służą do instalowania programów i są w stanie obsłużyć zależności między wersjami oprogramowania. Doker z pewnością nie kwalifikuje się jako system pakowania zstępującego: każdy „pakiet” może mieć tylko jedną zależność, system nie ma opcji „kompilacji rekurencyjnej” i nie obsługuje złożonych ograniczeń wersji!
Możliwą odpowiedzią byłoby, że jeśli chcesz napisać pakiet Debian dla swojej aplikacji, możesz także użyć Dockera do wdrożenia aplikacji. Można to osiągnąć za pomocą skryptu konfiguracyjnego, apt_setup.sh
który wyglądałby
apt-key add - <<EOF
-----BEGIN PGP PUBLIC KEY BLOCK-----
<YOUR RELEASE OFFICER PGP KEY GOES HERE>
EOF
cat >> /etc/apt/sources.list <<EOF
deb https://my.organisation.org/repo debian-jessie main
apt-get update -y
apt-get upgrade -y
EOF
i a Dockerfile
wzdłuż linii
ADD apt_setup.sh /root
RUN sh -ex /root/apt_setup.sh && rm /root/apt_setup.sh
RUN apt-get install -y my-node-js-package
(W twojej konkretnej sytuacji apt_setup.sh
byłoby to bardziej skomplikowane, dodając repozytoria nodesource i niektóre pakiety pomocnicze, takie jak apt-transport-https .)
Dlatego naprawdę możliwe jest jednoczesne korzystanie z pakietów Debiana i Dockera , jednak…
Moje przeczucie […] mówi mi, że gdyby pakiety deb były dobrze dopasowane, byłoby to bardziej powszechne
Jest to prawidłowy problem, który prowadzi nas do pytania, dlaczego Docker jest popularny jako system pakowania ad hoc , podczas gdy nie jest nim przeznaczony. (Patrz wyżej.)
„Oficjalny” system pakowania z danej dystrybucji to tylko jedna z wielu możliwości zainstalowania oprogramowania w niektórych środowiskach komputerowych. Istnieje wiele innych dostępnych źródeł, takich jak specyficzne dla społeczności menedżery pakietów, takie jak npm lub opam, drzewa portów, takie jak pkgsrc i zwykła dystrybucja kodu źródłowego. Z tej perspektywy łatwo jest zrozumieć sukces Dockera jako systemu pakowania ad hoc :
Specyfikacje Dockera są bardzo zbliżone do skryptu powłoki i niezależnie od źródła, z którego pochodzi, instalujemy oprogramowanie za pomocą powłoki.
Docker ma „wbudowaną” (płatną) usługę do hostowania produkowanych przez siebie artefaktów, Docker Hub .
Jaka jest siła pakietów Debiana nad obrazami Docker jako systemem pakietów? Ścisła kontrola nad zależnościami podczas instalacji. (Istnieje również możliwość uaktualnienia i obniżenia wersji, ale nie ma praktycznego znaczenia, jeśli wdrażamy wzorzec niezmiennego serwera ). Prowadzi to do
Wniosek
Jeśli masz tylko jeden produkt wdrożony w jednej wersji (co jest typowe dla SaaS), twoje potrzeby zarządzania wersjami są bardzo proste, a używanie Dockera jako menedżera pakietów ad hoc nie powinno mieć żadnych poważnych wad. Gdy tylko pracujesz z kilkoma wersjami jednego produktu lub kilku produktów, złożoność problemu ograniczeń wersji, którą musisz rozwiązać, wzrasta i potrzebujesz odpowiedniego narzędzia do tego, którym mogą być pakiety Debiana lub jakiś system zarządzania konfiguracją, jeśli jesteś mieszanie oprogramowania z różnych źródeł.