opened image

Dockerfile: Pełny przewodnik dla początkujących i profesjonalistów

​​​​​​​

 

 

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.