Docker — tas ir jaudīgs rīks konteineru izveidei, izvietošanai un pārvaldībai, kas kļuvis par de facto standartu programmatūras izstrādes nozarē. Viens no galvenajiem Docker elementiem ir Dockerfile — teksta fails, kas satur instrukcijas Docker attēla izveidei. Izpratne par Dockerfile un spēja to pareizi izmantot — tas ir pamats efektīvai Docker izmantošanai.
Kas ir Dockerfile?
Dockerfile — tas ir skripts, kas satur komandu un instrukciju kopumu Docker-attēla izveidei. Docker-attēls, savukārt, ir nemainīgs paraugs, kas ietver visu nepieciešamo konteineru palaišanai: operētājsistēmu, bibliotēkas, atkarības un pašu lietojumprogrammu.
Galvenās Dockerfile instrukcijas
Vispirms aplūkosim galvenās instrukcijas, kas tiek izmantotas Dockerfile:
FROM: Šī instrukcija nosaka bāzes attēlu, uz kura tiks veidots jauns attēls. Piemēram, FROM ubuntu:20.04 norāda, ka bāzes attēls būs Ubuntu 20.04.
RUN: Tiek izmantots, lai izpildītu komandas konteinerā. Parasti tiek izmantots pakotņu instalēšanai un citu operāciju veikšanai, kas nepieciešamas vides sagatavošanai.
CMD: Nosaka komandu, kas tiks izpildīta, palaižot konteineru. Atšķirībā no RUN, šī komanda netiek izpildīta attēla izveides laikā, bet tikai konteineru palaišanas laikā.
ENTRYPOINT: Ļauj norādīt komandu, kas vienmēr tiks izpildīta, palaižot konteineru. To var pārrakstīt, palaižot konteineru ar komandrindas parametriem.
COPY un ADD: Šīs instrukcijas tiek izmantotas, lai kopētu failus un direktorijas no lokālās failu sistēmas uz attēla failu sistēmu. COPY veic vienkāršu kopēšanu, bet ADD var papildus izpakot failus un lejupielādēt tos pa URL.
ENV: Iestata vides mainīgos konteinerā.
EXPOSE: Norāda, kuri porti tiks atvērti konteinerā ārējai piekļuvei.
VOLUME: Izveido montēšanas punktu darbam ar pastāvīgu krātuvi.
WORKDIR: Nosaka darba direktoriju visām turpmākajām instrukcijām.
Dockerfile piemērs
Aplūkosim vienkāršu Dockerfile piemēru Node.js lietojumprogrammai:
# Norādām bāzes attēlu
FROM node:14
# Iestata darba direktoriju
WORKDIR /app
# Kopējam package.json un package-lock.json
COPY package*.json ./
# Iestata atkarības
RUN npm install
# Kopējam lietojumprogrammas avota kodu
COPY . .
# Norādām portu
EXPOSE 3000
# Nosakām komandu lietojumprogrammas palaišanai
CMD ["npm", "start"]
Detalizēta Dockerfile analīze:
FROM node:14 — Norāda, ka bāzes attēls būs oficiālais Node.js attēls versijā 14. Tas nozīmē, ka mūsu attēlā tiks iekļautas visas nepieciešamās Node.js atkarības.
WORKDIR /app — Iestata darba direktoriju /app, kur tiks kopēti faili un izpildītas komandas.
COPY package.json ./* — Kopē failus package.json un package-lock.json darba direktorijā konteinerā. Šie faili satur informāciju par lietojumprogrammas atkarībām.
RUN npm install — Veic atkarību instalēšanu, kas norādītas package.json.
COPY . . — Kopē visus failus un mapes no pašreizējās direktorijas (kur atrodas Dockerfile) darba direktorijā konteinerā.
EXPOSE 3000 — Norāda, ka konteineram būs jāuzklausa ports 3000.
CMD ["node", "app.js"] — Nosaka komandu lietojumprogrammas palaišanai. Šajā gadījumā tas ir faila app.js palaišana, izmantojot Node.js.
Izveidojiet failu app.js ar sekojošo saturu, vai izmantojiet savu:
// 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}`);
});
Izveidojiet failu package.json ar sekojošo saturu:
{
"name": "my-node-app",
"version": "1.0.0",
"description": "Vienkārša Node.js lietojumprogramma ar Express",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
Dockerfile izmantošana
Tagad, kad esam izpētījuši galvenās instrukcijas un aplūkojuši Dockerfile piemēru, pāriesim pie praktiskās izmantošanas. Lai izveidotu Docker attēlu un palaistu konteineru, nepieciešams izpildīt dažas komandas terminālī.
Pārliecinieties, ka faili app.js, package.json un Dockerfile atrodas vienā direktorijā. Pēc tam izveidojiet attēlu.
Attēla izveide:
docker build -t my-node-app .
Šeit -t my-node-app nosaka attēla nosaukumu, bet . norāda, ka Dockerfile atrodas pašreizējā direktorijā.
Konteinera palaišana:
docker run -p 3000:3000 my-node-app
Komanda docker run palaiž konteineru, pamatojoties uz izveidoto attēlu. Parametrs -p 3000:3000 norāda, ka ports 3000 uz viesmašīnas tiks novirzīts uz portu 3000 konteinerā. Jūsu serverim vajadzētu veiksmīgi palaist, un jūs varēsiet piekļūt tam, atverot pārlūkā http://localhost:3000. Kur redzēsiet vienkāršu sveicienu "Hello, World!".
Secinājums
Dockerfile — tas ir jaudīgs rīks, lai automatizētu un standartizētu Docker-attēlu izveides procesu. Izpratne par galvenajām instrukcijām un principiem darbā ar Dockerfile ļauj izstrādātājiem efektīvi pārvaldīt vides un izvietot lietojumprogrammas konteineros. Ir svarīgi atcerēties, ka Dockerfile jābūt optimizētam un jāietver tikai nepieciešamās komandas, lai samazinātu attēla izmēru un uzlabotu konteineru veiktspēju.