2015-04-28 23 views
7

Jeśli uruchomię silnik Docker i ten sam kontener w zestawie różnych dystrybucji systemu Linux, czy kontener będzie działał w taki sam sposób? Pytam, ponieważ w wielu przypadkach aplikacje zależą od określonej dystrybucji Linuksa dla niektórych zasobów, takich jak czcionki. Jeśli moja aplikacja uruchomiona w kontenerze Docker zależy od czcionki używanej w systemie Ubuntu (i może istnieć wiele innych zależności), jak to się dzieje? Czy będę musiał zainstalować czcionkę wewnątrz kontenera, czy będę musiał uruchomić system Ubuntu wewnątrz kontenera z uruchomioną aplikacją, czy też aplikacja używa czcionek z podstawowego systemu operacyjnego obsługującego kontener?Izolacja kontenera dokera, czy dba o podstawowy system operacyjny Linux?

+0

W jaki sposób używane są czcionki? Na przykład. Twój program korzysta z nich poprzez X lub HTML/CSS w przeglądarce lub w inny sposób? – Bryan

Odpowiedz

8

Wszelkie brakujące zasoby należy zainstalować w obrazie Docker (który może rozpoczynać się od obrazu z ubuntu).
Nie należy polegać na hoście zależności.

Chodzi o to, aby odtworzyć środowisko za każdym razem, gdy kontener jest uruchamiany z obrazu.

Pojemnik nie widzą zasobów hosta (oprócz zamontowanych woluminów), ponieważ posiada silnik Docker między pojemnikiem a przyjmującym, w celu skonfigurowania cgroups i namespaces kontrolować które zasoby pojemnik można zobaczyć i dostępu.

Docker

The "fedora" image referenced in jboss/base jest base image:

images

W terminologii Docker, tylko do odczytu warstwy nazywa się obraz. Obraz nigdy się nie zmienia.

Ponieważ Docker używa unijnego systemu plików, procesy uważają, że cały system plików jest podłączony do odczytu i zapisu Ale wszystkie zmiany przechodzą na najwyższą warstwę do zapisu, a pod spodem oryginalny plik w obrazie tylko do odczytu pozostaje niezmieniony.
Ponieważ zdjęcia nie ulegają zmianie, obrazy nie mają stanu.

Patrz "What is the relationship between the docker host OS and the container base image OS?":

Jedyna relacja pomiędzy OS gospodarza i pojemnikiem jest jądro.

ponieważ jądro nadal jest jądrem hosta, nie będziesz mieć żadnego konkretnego modułu jądra/łatek dostarczonego przez dystrybucję.

+0

Zgadza się, jedyną rzeczą, którą proces Docker powinien współdzielić z hostem, jest jądro. Cała reszta powinna znajdować się w samym obrazie kontenera (lub dobrze zdefiniowanej usłudze zewnętrznej, takiej jak serwer bazy danych). – Thilo

+0

Dzięki.Czy silnik dokera ma domyślny linux, czy też zawsze definiujesz go w swoim pliku dokowanym? Widzę, że np. Jboss Wildfly używa "podstawowego" obrazu, który rozpoczyna się od pobrania Fedory. – user1340582

+1

@ user1340582 brak mechanizmu dokowania jest zainstalowany na hoście Linux, dlatego mówi się, że host powinien mieć jądro 3.10+ (w celu zapewnienia lxc, cgroups i innych funkcji, na których bazuje Docker) – VonC

0

Co trzeba uważać jest

  • zależność jądra
  • i pewną kontrolę obowiązkowe dostępu (SELinux, AppArmor) konfiguracje, które mają rozkład zależny i może mieć wpływ na to jak Twój Działają pojemniki Docker.
Powiązane problemy