opened image

Dockerfile: Išsamus vadovas pradedantiesiems ir profesionalams

​​​​​​​

 

 

Docker — tai galingas įrankis konteinerių kūrimui, diegimui ir valdymui, tapęs de facto standartu programinės įrangos kūrimo pramonėje. Vienas iš pagrindinių Docker elementų yra Dockerfile — tekstinis failas, kuriame yra instrukcijos, kaip sukurti Docker vaizdą. Supratimas apie Dockerfile ir gebėjimas jį teisingai naudoti — tai pagrindas efektyviam Docker naudojimui.

 

Kas yra Dockerfile?
 

Dockerfile — tai scenarijus, kuriame yra komandų ir instrukcijų rinkinys, skirtas Docker-įvaizdžio kūrimui. Docker-įvaizdis, savo ruožtu, yra nekintamas šablonas, kuriame yra viskas, kas reikalinga konteinerio paleidimui: operacinė sistema, bibliotekos, priklausomybės ir pati programa.

 

 

Pagrindinės Dockerfile instrukcijos
 

 

Pirmiausia pažvelkime į pagrindines instrukcijas, naudojamas Dockerfile:

 

FROM: Ši instrukcija nustato bazinį vaizdą, ant kurio bus kuriamas naujas vaizdas. Pavyzdžiui, FROM ubuntu:20.04 nurodo, kad bazinis vaizdas bus Ubuntu 20.04.

RUN: Naudojama komandų vykdymui konteineryje. Paprastai naudojama paketų diegimui ir kitoms operacijoms, reikalingoms aplinkai paruošti.

CMD: Nustato komandą, kuri bus vykdoma paleidžiant konteinerį. Skirtingai nuo RUN, ši komanda nevykdoma kuriant vaizdą, o tik paleidžiant konteinerį.

ENTRYPOINT: Leidžia nustatyti komandą, kuri visada bus vykdoma paleidžiant konteinerį. Gali būti perrašyta paleidžiant konteinerį naudojant komandų eilutės parametrus.

COPY ir ADD: Šios instrukcijos naudojamos failų ir katalogų kopijavimui iš vietinės failų sistemos į vaizdo failų sistemą. COPY atlieka paprastą kopijavimą, o ADD gali papildomai išarchyvuoti failus ir atsisiųsti juos per URL.

ENV: Nustato aplinkos kintamuosius konteineryje.

EXPOSE: Nurodo, kurie prievadai bus atidaryti konteineryje išoriniam prieigai.

VOLUME: Sukuria montavimo tašką darbui su nuolatiniu saugojimu.

WORKDIR: Nustato darbo katalogą visoms vėlesnėms instrukcijoms.

 

 

Dockerfile pavyzdys

 

Paimkime paprastą Dockerfile pavyzdį Node.js programai:

 

# Nustatome bazinį vaizdą
FROM node:14

# Nustatome darbo katalogą
WORKDIR /app

# Kopijuojame package.json ir package-lock.json
COPY package*.json ./

# Nustatome priklausomybes
RUN npm install

# Kopijuojame programos šaltinio kodą
COPY . .

# Nustatome prievadą
EXPOSE 3000

# Nustatome komandą programos paleidimui
CMD ["npm", "start"]

 

 

 


Išsamus Dockerfile analizavimas:

​​​​​​​

FROM node:14 — Nurodo, kad baziniu vaizdu bus oficialus Node.js vaizdas versijos 14. Tai reiškia, kad mūsų vaizde bus įtrauktos visos reikalingos Node.js priklausomybės.

WORKDIR /app — Nustato darbo katalogą /app, į kurį bus kopijuojami failai ir vykdomos komandos.

COPY package.json ./* — Kopijuoja failus package.json ir package-lock.json į konteinerio darbo katalogą. Šie failai turi informaciją apie programos priklausomybes.

RUN npm install — Vykdo priklausomybių, nurodytų package.json, diegimą.

COPY . . — Kopijuoja visus failus ir katalogus iš dabartinio katalogo (kur yra Dockerfile) į konteinerio darbo katalogą.

EXPOSE 3000 — Nurodo, kad konteineris klausys prievado 3000.

CMD ["node", "app.js"] — Nustato komandą programos paleidimui. Šiuo atveju tai yra app.js failo paleidimas naudojant Node.js.


 

Sukurkite failą app.js su šiuo turiniu, arba naudokite savo:


 

// 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}`);
});

 


Sukurkite failą package.json su šiuo turiniu:

 

{
  "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"
  }
}

 

 

 

Dockerfile naudojimas

 

Dabar, kai išnagrinėjome pagrindines instrukcijas ir peržiūrėjome Dockerfile pavyzdį, pereikime prie praktinio naudojimo. Norint sukurti Docker vaizdą ir paleisti konteinerį, reikia įvykdyti kelias komandas terminale.

 

Įsitikinkite, kad failai app.js, package.json ir Dockerfile yra toje pačioje direktorijoje. Tada sukurkite vaizdą.

 

Vaizdo kūrimas:

 

docker build -t my-node-app .

 

Čia -t my-node-app nustato vaizdo pavadinimą, o . nurodo, kad Dockerfile yra dabartinėje direktorijoje.

 

 

Konteinerio paleidimas:

 

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

 

Komanda docker run paleidžia konteinerį, remiantis sukurtu vaizdu. Parametras -p 3000:3000 nurodo, kad prievadas 3000 šeimininko mašinoje bus nukreiptas į prievadą 3000 konteineryje. Jūsų serveris turėtų sėkmingai paleisti, ir jūs galėsite prie jo prisijungti, atidarydami naršyklėje http://localhost:3000. Kur pamatysite paprastą pasveikinimą "Hello, World!".

 

 

 

​​​​​​​

 

Išvada

 

Dockerfile — tai galingas įrankis automatizuoti ir standartizuoti Docker-įvaizdžių kūrimo procesą. Supratimas apie pagrindines instrukcijas ir principus, kaip dirbti su Dockerfile , leidžia kūrėjams efektyviai valdyti aplinkas ir diegti programas konteineriuose. Svarbu prisiminti, kad Dockerfile turėtų būti optimizuotas ir turėti tik būtinas komandas, kad sumažintų vaizdo dydį ir padidintų konteinerių našumą.