2013-07-29 11 views
10

Jeśli mój program zależy od pewnej funkcji biblioteki jądra, a ta funkcja z kolei ma łańcuch zależności, w jaki sposób okno dokowane pozostaje małe i przenośne bez wykonywania migawki wszystkich biblioteki jądra (i zarządzanie problemami zależności na poziomie funkcji, a nie biblioteki)? Innymi słowy, w jaki sposób izoluje się od zmian w bibliotekach Kernela z jednej wersji na drugą i czy robi to w bibliotece lub funkcji?W jaki sposób Docker dopuszcza przenośne pojemniki, jeśli biblioteki Kernela zmieniają się

Co się stanie, jeśli moja aplikacja ma stos oprogramowania, na przykład jedna funkcja jest kompatybilna z przyszłą wersją biblioteki A jądra, podczas gdy druga funkcja korzystająca z biblioteki A jądra nie jest już kompatybilna. Innymi słowy:

funkcyjnych 1 & 2 zarówno zależą i pracować z funkcji w jądrze Lib wersja 1.0

Funkcja 1 współpracuje z Lib wersja 1.1 Funkcja 2 zrywa z Lib Wersja 1.1 (funkcja 2 nadal potrzebuje Lib A version 1.0)

Nie wiem zbyt wiele o Dockerze, więc jest to pytanie dla początkujących.

Odpowiedz

15

Nie ma czegoś takiego jak "biblioteka jądra". Najbliższe miejsca warte co opisujesz to:

  • libc, który jest częścią obrazu pojemnika, a tym samym nie zmienia się.

  • Jądro Linux ABI, które w większości jest stałe. Chociaż niektóre zmiany są czasami wprowadzane do jądra ABI, robi się to tak rzadko, jak to możliwe - programiści jądra robią wszystko, co możliwe, aby zachować kompatybilność wsteczną. Tam, gdzie wprowadzane są zmiany, najczęściej są to komponenty, które nie są odpowiednie dla aplikacji działających w kontenerze (np. Wyjście audio/wideo, dynamiczne zarządzanie urządzeniem itp.).

+0

libc i jądro Linuksa są bardzo ze sobą powiązane. Jądro, na którym pracujesz, zostało skompilowane z określoną biblioteką libc. Twoja biblioteka libc została skompilowana do obsługi tylko jądra nad określoną wersją. Jeśli zaktualizujesz jeden bez drugiego, możesz być w świecie bólu. – Eloff

+2

Wierzę, że OP oznaczał wywołania systemowe obsługiwane przez różne wersje jądra. Są one silnie skorelowane z libc. Czy kontenery w jakiś sposób oszukują i używają libc systemu podstawowego? Czy mógłbyś wpaść w kłopoty, gdyby jakieś oprogramowanie próbowało bezpośrednio wywołać syscall nie obsługiwany w jądrze podstawowym? – Otheus

Powiązane problemy