Moje obrazy dokerów są zbudowane na serwerze Jenkins CI i są przekazywane do naszego prywatnego rejestru Docker. Moim celem jest zapewnienie środowiskom kompozytu dokującego, które zawsze rozpoczynają pierwotnie zbudowany stan obrazów.
Obecnie używam docker-compose 1.3.2, a także 1.4.0 na różnych komputerach, ale wcześniej używaliśmy również starszych wersji.
Zawsze korzystałem z docker-compose pull && docker-compose up -d
poleceń, aby pobrać świeże obrazy z rejestru i uruchomić je. Wierzę, że moje preferowane zachowanie działało zgodnie z oczekiwaniami do pewnego momentu, ale od tego czasu docker-compose up
zaczęło ponownie uruchamiać wcześniej zatrzymane pojemniki zamiast uruchamiać pierwotnie zbudowane obrazy za każdym razem.
Czy istnieje sposób na pozbycie się tego zachowania? Czy w ten sposób może być podłączony do pliku konfiguracyjnego docker-compose.yml, aby nie polegał na „nie zapominaniu” czegoś w wierszu poleceń przy każdym wywołaniu?
ps. Oprócz znalezienia sposobu na osiągnięcie mojego celu, chciałbym również dowiedzieć się nieco więcej o tle tego zachowania. Myślę, że podstawową ideą Dockera jest zbudowanie niezmiennej infrastruktury. Obecne zachowanie kompilowania dokerów wydaje się po prostu kolidować z tym podejściem ... czy brakuje mi tutaj niektórych punktów?
źródło
docker-compose run -d
nie istnieje? Chcesz powiedziećdocker-compose up -d
nie?docker-compose pull
zanimdocker-compose rm -f
możesz zaoszczędzić jeszcze więcej czasuJedynym rozwiązaniem, które działało dla mnie, było polecenie:
Spowoduje to automatyczne pobranie świeżego obrazu z repozytorium i nie będzie używać wersji pamięci podręcznej, która jest wstępnie zbudowana z parametrami, których wcześniej używałeś.
źródło
Według obecnej oficjalnej dokumentacji istnieje skrót, który zatrzymuje i usuwa kontenery, sieci, woluminy i obrazy utworzone przez up, jeśli są już zatrzymane lub częściowo usunięte itd., Zrobi to samo:
Następnie, jeśli masz nowe zmiany w swoich obrazach lub Dockerfiles, użyj:
Wreszcie:
docker-compose up
Jednym poleceniem:
docker-compose down && docker-compose build --no-cache && docker-compose up
źródło
docker-compose build --no-cache
jest potrzebny tylko wtedy, gdy w Dockerfiles nastąpią zmiany.docker-compose up
należy odbudować usługidocker-compose build
.Możesz przejść
--force-recreate
dodocker compose up
, który powinien użyć świeżych pojemników.Myślę, że powodem ponownego użycia pojemników jest zachowanie wszelkich zmian podczas projektowania. Zauważ, że Compose robi coś podobnego z woluminami, które będą również występować między odtwarzaniem kontenerów (odtworzony kontener zostanie dołączony do woluminów swojego poprzednika). Może to być pomocne, na przykład, jeśli używasz kontenera Redis jako pamięci podręcznej i nie chcesz stracić pamięci podręcznej za każdym razem, gdy dokonasz niewielkiej zmiany. W innych przypadkach jest to po prostu mylące.
Nie wierzę, że istnieje sposób na wymuszenie tego z pliku tworzenia.
Prawdopodobnie koliduje z niezmiennymi zasadami infrastruktury. Kontrargumentem jest prawdopodobnie to, że (jeszcze) nie używasz tworzenia wiadomości. Ponadto nie jestem pewien, czy zgadzam się, że niezmienna infra jest podstawową ideą Dockera, chociaż z pewnością jest to dobry przypadek użycia / zaletą sprzedaży.
źródło
--force-recreate
nie działa dla mnie ... Obraz nie jest wyświetlany, mimo że dostępna jest nowsza wersja ...LUB
źródło
Jeśli pojawi się coś nowego, zostanie odbudowany.
źródło