Docker - czas zastosować volumen nazwany w celu zachowania stanu bazy danych

Stronę tą wyświetlono już: 48 razy

Skoro omówiony został temat komunikacji pomiędzy kontenerami to czas najwyższy zrobić coś w temacie zachowywania zmian zachodzących w bazie danych. Ponieważ w tej chwili po dodaniu rekordów do bazy danych i usunięciu kontenera bazy danych MongoDb a następnie uruchomieniu nowej instancji tejże bazy dane są tracone, co w moim osobistym odczuciu nie wróży nic dobrego. Dlatego teraz, gdy utworzony został nieco bardziej złożony przykład użycia kontenerów można rozważyć wykorzystanie volumen-u nazwanego do przechowywania stanu bazy danych i odzyskiwania go.

W tym niecnym celu warto zerknąć do dokumentacji mongodb.com/compatibility/docker, gdzie można przeczytać:

Any data created as part of the lifecycle of that container will be destroyed once the container is deleted. If you want to persist the data on your local machine, you can mount a volume using the -v argument.
docker run --name mongodb -d -v YOUR_LOCAL_DIR:/data/db mongo

Tak więc podczas tworzenia wystarczy podać nazwę lub ścieżkę bezwzględną do folderu, który będzie przechowywał stan bazy danych. Ja zadowolę się tym razem nazwą:

docker run -d --network net-wishes --name mongodb --rm -v mongo-wishes:/data/db mongo

W celu ułatwienia sobie życia ja zawsze tworzę pliki .sh, które używam do usuwania i uruchamiania. Tak więc np. w pliku run.sh mam polecenia:

Listing 1
  1. docker run -d --network net-wishes --name mongodb --rm -v mongo-wishes:/data/db mongo
  2. docker run -p 8889:8888 --name node -v "${pwd}:/app" --network net-wishes --rm -d node-api:1.0

natomiast w stop.sh:

Listing 2
  1. docker container stop mongodb
  2. docker container stop node

Nieco później pokażę konfigurację uruchamiania kontenerów w znacznie bardziej przyjazny sposób co spowoduje, że powyższe pliki nie będą już potrzebne.

Teraz należy przetestować, czy zadziałało dodając kilka rekordów Postman-em a następnie usuwając kontenery i stawiając je na nowo.

Załączniki:

Server przygotowany do komunikacji przez sieć kontenera z kontenerem bazy danych MongoDb o nazwie mongodb

Komentarze