Chmury obliczeniowe, devops, programowanie ...

... moje doświadczenia w poszukiwaniu rozwiązań - Marcin Frątczak

Docker, kilka wskazówek

Przy bawieniu się dockerem, testowaniu, wielokrotnym odpalaniu środowisk, zdarza się ze nic nie chce działać.

Czemu?

Odpalanie testowych środowisk powoduje ze ściągamy zcachowane warstwy, lub generujemy nowe. Ponowne generowanie, drobne zmiany itp powodują dwa problemy:

  • ilość miejsca na serwerze maleje
  • obraz środowiska, który chciałbyś odpalić od zera powinieneś usunąć i odpalić jeszcze raz

Gdy odpalamy dockera:

to zostają ściągnięte wszystkie warstwy (layers) potrzebne do zbudowania środowiska. Jeśli budujesz środowisko, to jest ono budowane lokalnie.

Normalnie możesz zatrzymać kontenery:

lub całkowicie je usunać:

Czym to się różni?

Jeśli tworzysz nowy kontener, dla jednego obrazu, prawdopodobnie posiada on skrypty inicjujące, które ustawiają wszystko co trzeba do jakiegoś systemu (np system do zarządzania zadaniami Redmine). Kontenery również zapisują dane wewnątrz siebie dane (jeśli nie wyprowadziłeś ich na zewnątrz).

Aby nie stracić tych ustawień, można zastosować STOP. (np wchodzisz w dany kontener i instalujesz coś ręcznie, i się bawisz poznając nowe rzeczy, dzięki stop tego nie stracisz)

Nie powinniśmy zapisywać jednak danych wewnątrz kontenera. Powinniśmy wyjść z założenia, że cokolwiek w nim jest, można usunąć i zresetować do stanu początkowego.

Dlatego jak nie bawię się, lub nie instaluje ręcznie bibliotek celem jakichś testów, to używam DOWN.

Jednym słowem usuwam kontener, i tworze go znowu.

 

Co gdy nie można usunąć obrazów i kontenerów?

Zdarza się, że w testach tak zamieszamy :) przy tworzeniu multum wersji, zmian itp (standard), że nie można wygenerować nic nowego, lub nie widać zmian.

Wtedy tutaj przychodzą do pomocy polecenia dockerowe.

Zatrzymywanie wszystkich kontenerów dockerowych

Usuwanie wszystkich kontenerów, również które są ukryte na pierwszy rzut oka

Usuwanie wszystkich obrazów dockerowych na serwerze (ściągnięte, lub wygenerowane przez nas)

Usuwanie reszty obrazów,  jeśli nie usuneło wszystkiego a jest na liście docker images

Zdarza się, że nie można usunąć obrazów, ponieważ pojawia się błąd:

Error response from daemon: conflict: unable to delete ba62b42dad38 (cannot be forced) – image has dependent child images

Musimy wtedy skorzystać z flagi Force. (mówimy oczywiście o serwerze developerskim, gdzie możemy wszystko usuwać i niczego się nie obawiać, że stracimy dane :) )

Sprawdzamy czy usuneliśmy wszystko możemy poleceniami

 

Aliasy – czyli jak ułatwić sobie pracę

Sam korzystam z aliasów, które można znaleźć tutaj https://github.com/tcnksm/docker-alias/blob/master/zshrc

Krótkie wyjaśnienie: https://kartar.net/2014/03/useful-docker-bash-functions-and-aliases/

Jednym słowem, używam głównie poleceń:

dstop – zatrzymanie WSZYSTKICH kontenerów

drm – usunięcie wszystkich kontenerów

dri – usunięcie wszystkich obrazów

dalias – spis wszystkich aliasów dockerowych

dex nazwa-kontenera bash – wejście w dany kontener

 

I to tyle :) 

Mogłem dać spis poleceń na usuwanie pojedynczych obrazów lub kontenerów, ale o tym wszędzie piszą :) więc na pewno umiesz to robić, lub znajdziesz rozwiązanie.

Na lokalnym komputerze, korzystam z wszystkich poleceń, usuwam wszystko itp. Na serwerach w internecie, trzeba wsiąść pod uwagę, że możesz posiadać limit transferu. Więc każdorazowe usuwanie obrazów, i zaciąganie ich, spowoduje jego zużywanie. Ja wtedy usuwam, konkretny obraz (jeśli trzeba)

W razie pytań, lub moich błędów, pisz !

 

 

Dodaj komentarz

Your email address will not be published.

*

© 2017 Marcin Frątczak

Theme by Anders NorenUp ↑

Google Analytics Alternative