Docker – Wprowadzenie do konteneryzacji (cz. 5)

Persistencja danych z użyciem Bind Mounts (Dev Mode)

W poprzednim wpisie poznaliśmy named volumes, które pozwalają przechowywać dane aplikacji niezależnie od kontenera. Teraz przyjrzymy się innej technice – bind mounts – szczególnie przydatnej podczas pracy deweloperskiej.


Czym są Bind Mounts?

Bind mount to sposób, w jaki możemy podłączyć katalog z naszego hosta (komputera) bezpośrednio do kontenera Dockera. Dzięki temu kontener ma dostęp do bieżących plików źródłowych i reaguje natychmiast na ich zmiany – bez konieczności ponownego budowania obrazu.


1. Przejście do katalogu aplikacji

Otwórz terminal i przejdź do katalogu, w którym znajduje się Twoja aplikacja:

cd /path/to/getting-started/app


2. Uruchomienie kontenera w trybie deweloperskim

Wykonaj polecenie:

docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:18-alpine \
sh -c "yarn install && yarn run dev"

Co oznaczają parametry?

  • -w /app – ustawia katalog roboczy kontenera na /app.
  • -v "$(pwd):/app" – tworzy bind mount, który łączy bieżący katalog hosta ($(pwd)) z katalogiem /app w kontenerze.
  • node:18-alpine – lekki obraz Node.js, na którym uruchamiamy aplikację.
  • yarn install && yarn run dev – instalacja zależności i start w trybie developerskim.

3. Podgląd logów kontenera

Aby zobaczyć logi aplikacji w czasie rzeczywistym:

docker logs -f <container-id>

<container-id> uzyskasz poleceniem:

docker ps


4. Wprowadzenie zmian w kodzie

Otwórz plik:

src/static/js/app.js

Na linii 109 zmień:

{Submitting ? 'Adding...' : 'Add item'}

na:

{Submitting ? 'Adding...' : 'Add'}


5. Podgląd zmian w przeglądarce

Dzięki bind mountowi zmiana w kodzie zostanie automatycznie odzwierciedlona w aplikacji – wystarczy odświeżyć stronę w przeglądarce na http://localhost:3000.

Docker – Wprowadzenie do konteneryzacji (cz. 3)

Publikacja obrazu w Docker Hub i uruchamianie na zewnętrznej instancji

W poprzednich częściach serii nauczyliśmy się:

  • jak stworzyć aplikację i uruchomić ją w kontenerze Dockera,
  • jak aktualizować kod i ponownie budować obraz.

Teraz pójdziemy krok dalej – opublikujemy nasz obraz w Docker Hub, aby można go było uruchomić na dowolnym komputerze lub w chmurze.

1. Tworzenie repozytorium w Docker Hub

  1. Zaloguj się na Docker Hub.
  2. Kliknij Create Repository.
  3. Podaj nazwę (np. getting-started) i ustaw repozytorium jako Public, aby inni mogli je pobrać.

2. Pushowanie obrazu do Docker Hub

a) Próba pushowania

Jeśli spróbujesz:

docker push docker/getting-started

prawdopodobnie zobaczysz błąd:

denied: requested access to the resource is denied

Dlaczego? Bo taki obraz lokalnie nie istnieje pod tą nazwą. Musimy go przygotować.


b) Logowanie do Docker Hub

Najpierw zaloguj się w terminalu:

docker login -u YOUR-USER-NAME

Podaj swoje hasło do Docker Hub.


c) Tagowanie obrazu

Musimy nadać obrazowi właściwą nazwę w formacie:

YOUR-USER-NAME/repository-name

W naszym przypadku:

docker tag getting-started YOUR-USER-NAME/getting-started

Teraz mamy lokalny obraz o nowej nazwie, zgodnej z repozytorium w Docker Hub.


d) Pushowanie obrazu

Wystarczy teraz wykonać:

docker push YOUR-USER-NAME/getting-started

Jeśli wszystko pójdzie dobrze, obraz zostanie przesłany i będzie dostępny w Twoim repozytorium.

3. Uruchamianie obrazu na nowej instancji

Spróbujmy teraz uruchomić naszą aplikację w zewnętrznym środowisku – np. w Play with Docker.

a) Otwórz Play with Docker

Zaloguj się przy użyciu swojego konta Docker Hub.

b) Utwórz instancję

Kliknij +ADD NEW INSTANCE, aby uruchomić nową maszynę z Dockerem.

c) Uruchom aplikację

W terminalu instancji wpisz:

docker run -dp 3000:3000 YOUR-USER-NAME/getting-started

Docker pobierze Twój obraz z Docker Hub i uruchomi aplikację.

d) Otwórz port

Kliknij przycisk Open Port, wpisz 3000 i potwierdź.
Twoja aplikacja powinna się otworzyć w nowej zakładce 🎉

Docker – Wprowadzenie do konteneryzacji

W dzisiejszym świecie tworzenia aplikacji coraz częściej spotykamy się z pojęciem konteneryzacji. Dzięki niej możemy łatwo pakować aplikacje wraz z całym środowiskiem uruchomieniowym, co upraszcza wdrażanie i eliminuje problem „u mnie działa”. Najpopularniejszym narzędziem do konteneryzacji jest Docker.

W tym wpisie pokażę Ci, jak można  w obrazie kontenerowym zbudować aplikację i uruchomić ją lokalnie.

I. Tworzenie aplikacji w kontenerze

1. Stworzenie aplikacji

Na początek potrzebujemy aplikacji. Będzie to aplikacja napisana w Node.js. i jest to przykładowa lista rzeczy do zrobienia:

Przykład zaciągnięty z: https://www.docker.com/101-tutorial/

2. Budowanie obrazu aplikacji

Aby uruchomić aplikację w kontenerze, musimy stworzyć Dockerfile – plik, który opisuje, jak zbudować obraz naszej aplikacji.

a) Tworzenie pliku Dockerfile

Utwórz plik Dockerfile w katalogu głównym projektu i dodaj do niego następującą treść:

FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

Opis poszczególnych poleceń:

  • FROM node:18-alpine – bazujemy na oficjalnym obrazie Node.js.

  • WORKDIR /app – ustawiamy katalog roboczy.

  • COPY . . – kopiujemy wszystkie pliki do kontenera.

  • RUN yarn install --production – instalujemy zależności.

  • CMD ["node", "src/index.js"] – komenda uruchamiająca aplikację.

b) Budowanie obrazu

Otwórz terminal w katalogu z projektem i uruchom:

docker build -t getting-started .

 

To polecenie zbuduje obraz kontenerowy i nazwie go getting-started.

3. Start kontenera aplikacji

Gdy obraz jest już gotowy, możemy uruchomić kontener:

docker run -dp 3000:3000 getting-started

 

  • -d – uruchamia kontener w tle (detached mode),

  • -p 3000:3000 – mapuje port lokalny 3000 na port 3000 w kontenerze.

Teraz wystarczy wejść w przeglądarkę i otworzyć:

http://localhost:3000

Powinieneś zobaczyć pustą listę rzeczy do zrobienia.  🎉