ZALOGUJ
    opened image

    ​​​​​​​

     

     

    Docker — to potężne narzędzie do tworzenia, wdrażania i zarządzania kontenerami, które stało się de facto standardem w branży rozwoju oprogramowania. Jednym z kluczowych elementów Docker jest Dockerfile — plik tekstowy zawierający instrukcje do tworzenia obrazu Docker. Zrozumienie Dockerfile i umiejętność jego prawidłowego użycia — to podstawa efektywnego korzystania z Docker.

     

    Co to jest Dockerfile?
     

    Dockerfile — to skrypt, który zawiera zestaw poleceń i instrukcji do tworzenia obrazu Docker. Obraz Docker, z kolei, jest niezmiennym szablonem, który zawiera wszystko, co potrzebne do uruchomienia kontenera: system operacyjny, biblioteki, zależności i samo aplikację.

     

     

    Podstawowe instrukcje Dockerfile
     

     

    Na początek przyjrzyjmy się podstawowym instrukcjom, które są używane w Dockerfile:

     

    FROM: Ta instrukcja określa bazowy obraz, na podstawie którego będzie tworzony nowy obraz. Na przykład, FROM ubuntu:20.04 wskazuje, że bazowym obrazem będzie Ubuntu 20.04.

    RUN: Używana do wykonywania poleceń w kontenerze. Zwykle używana do instalacji pakietów i wykonywania innych operacji niezbędnych do przygotowania środowiska.

    CMD: Określa polecenie, które zostanie wykonane przy uruchomieniu kontenera. W przeciwieństwie do RUN, to polecenie nie jest wykonywane podczas budowy obrazu, a tylko przy uruchomieniu kontenera.

    ENTRYPOINT: Pozwala określić polecenie, które zawsze będzie wykonywane przy uruchomieniu kontenera. Może być nadpisane podczas uruchamiania kontenera za pomocą parametrów wiersza poleceń.

    COPY i ADD: Te instrukcje są używane do kopiowania plików i katalogów z lokalnego systemu plików do systemu plików obrazu. COPY wykonuje proste kopiowanie, a ADD może dodatkowo rozpakować pliki i pobierać je z URL.

    ENV: Ustawia zmienne środowiskowe wewnątrz kontenera.

    EXPOSE: Wskazuje, które porty będą otwarte w kontenerze dla zewnętrznego dostępu.

    VOLUME: Tworzy punkt montowania do pracy z trwałym magazynem.

    WORKDIR: Ustawia katalog roboczy dla wszystkich kolejnych instrukcji.

     

     

    Przykład Dockerfile

     

    Rozważmy prosty przykład Dockerfile dla aplikacji Node.js:

     

    # Ustawiamy bazowy obraz
    FROM node:14
    
    # Ustawiamy katalog roboczy
    WORKDIR /app
    
    # Kopiujemy package.json i package-lock.json
    COPY package*.json ./
    
    # Instalujemy zależności
    RUN npm install
    
    # Kopiujemy kod źródłowy aplikacji
    COPY . .
    
    # Ustawiamy port
    EXPOSE 3000
    
    # Określamy polecenie do uruchomienia aplikacji
    CMD ["npm", "start"]
    

     

     

     


    Szczegółowa analiza Dockerfile:

    ​​​​​​​

    FROM node:14 — Wskazuje, że bazowym obrazem będzie oficjalny obraz Node.js w wersji 14. Oznacza to, że do naszego obrazu zostaną dołączone wszystkie niezbędne zależności do działania Node.js .

    WORKDIR /app — Ustawia katalog roboczy /app, do którego będą kopiowane pliki i wykonywane polecenia.

    COPY package.json ./* — Kopiuje pliki package.json i package-lock.json do katalogu roboczego kontenera. Pliki te zawierają informacje o zależnościach aplikacji.

    RUN npm install — Wykonuje instalację zależności określonych w package.json.

    COPY . . — Kopiuje wszystkie pliki i foldery z bieżącego katalogu (gdzie znajduje się Dockerfile) do katalogu roboczego kontenera.

    EXPOSE 3000 — Wskazuje, że kontener będzie nasłuchiwał na porcie 3000.

    CMD ["node", "app.js"] — Określa polecenie do uruchomienia aplikacji. W tym przypadku jest to uruchomienie pliku app.js za pomocą Node.js.


     

    Utwórz plik app.js z następującą zawartością, lub użyj własnego:


     

    // app.js
    
    const express = require('express');
    const app = express();
    const port = 3000;
    
    app.get('/', (req, res) => {
      res.send('Hello, World!');
    });
    
    app.listen(port, () => {
      console.log(`Server is running on http://localhost:${port}`);
    });

     


    Utwórz plik package.json z następującą zawartością:

     

    {
      "name": "my-node-app",
      "version": "1.0.0",
      "description": "A simple Node.js app with Express",
      "main": "app.js",
      "scripts": {
        "start": "node app.js"
      },
      "dependencies": {
        "express": "^4.17.1"
      }
    }

     

     

     

    Użycie Dockerfile

     

    Teraz, gdy omówiliśmy podstawowe instrukcje i przyjrzeliśmy się przykładowi Dockerfile, przejdźmy do praktycznego użycia. Aby stworzyć obraz Docker i uruchomić kontener, należy wykonać kilka poleceń w terminalu.

     

    Upewnij się, że pliki app.js, package.json i Dockerfile znajdują się w tym samym katalogu. Następnie stwórz obraz.

     

    Tworzenie obrazu:

     

    docker build -t my-node-app .

     

    Tutaj -t my-node-app ustawia nazwę obrazu, a . wskazuje, że Dockerfile znajduje się w bieżącym katalogu.

     

     

    Uruchamianie kontenera:

     

    docker run -p 3000:3000 my-node-app

     

    Polecenie docker run uruchamia kontener na podstawie stworzonego obrazu. Parametr -p 3000:3000 wskazuje, że port 3000 na maszynie hosta będzie przekierowany na port 3000 w kontenerze. Twój serwer powinien się pomyślnie uruchomić, a Ty będziesz mógł uzyskać do niego dostęp, otwierając w przeglądarce http://localhost:3000. Gdzie zobaczysz banalne powitanie "Hello, World!".

     

     

     

    ​​​​​​​

     

    Podsumowanie

     

    Dockerfile — to potężne narzędzie do automatyzacji i standaryzacji procesu tworzenia obrazów Docker. Zrozumienie podstawowych instrukcji i zasad pracy z Dockerfile pozwala programistom efektywnie zarządzać środowiskami i wdrażać aplikacje w kontenerach. Ważne jest, aby pamiętać, że Dockerfile powinien być zoptymalizowany i zawierać tylko niezbędne polecenia, aby zminimalizować rozmiar obrazu i zwiększyć wydajność kontenerów.