Галоўная > Наш першы docker-кантэйнер

Наш першы docker-кантэйнер

docker

Докер ужо не першы дзень замацаваўся ў спіску абавязковых скілоў не толькі бэкэнд-распрацоўшчыкаў, але часам патрэбны і франтэнду. Таму, сення мы разгледзім, што такое docker, і як зрабіць свой першы кантэйнер.

Што такое docker і навошта ен патрэбны?

Docker - гэта адкрытая платформа для аўтаматызацыі разгортвання, рантайму і кіравання праграмамі ў кантэйнерах. Гэтая тэхналогія дазваляе запускаць праграмы ў ізаляваным сховішчы, вядомым як кантэйнер, што забяспечвае высокую паўтараемасць і перанасімасць паміж рознымі сістэмамі.

Так docker вырашае праблему перанасімасці выконваемага коду ў розныя асяроддзі. Так, напрыклад, для ўсталявання БД , незалежна ад аперацыйнай сістэмы на вашым камп'ютары, будзе дастаткова усталяваць docker, спампаваць патрэбны кантэйнер і запусціць яго. У выніку, працэсс усталявання, узнаўлення коду значна спрашчаецца. Больш падрабязна працэсс стварэння кантэйнераў разгледзім ніжэй, але перад гэтым вызначымся з тэрмінамі.

Гласарый

image (вобраз) - змяшчае ў сабе код, усе залежнасці, канфігурацыйныя файлы, бібліятэк, ўсе неабходнае для працы праграмы.

dockerFile - файл, на аснове якога ствараецца вобраз.

container (кантэйнер) - запушчаны экзэмпляр вобразу(image). Кантэйнер з'яўляецца аўтаномным асяроддзем, у якім запускаецца праграма з усімі яе залежнасцямі і асяроддзем для працы. Кантэйнеры лёгка запускаюцца, спыняюцца, клануюцца і выдаляюцца, што робіць іх гібкімі і масштабуемымі. Праз кантэйнеры вы можаце запусціць некалькі экзэмпляраў праграмы, якія будуць працаваць незалежна адзін ад аднаго.

DockerHub - рэсурс, на якім размешчаны асноўныя вобразы, на базе якіх мы можам ствараць нашыя.

1. Усталёўваем docker на камп'ютар.

Усталяваць докер не складана, але працэсс моцна залежыць ад вашай аперацыйнай сістэмы, таму зараз мы не будзем разглядаць гэта падрабязна. Інструкцыі па ўсталяванню знойдзіце тут. Таксама магу параіць усталяваць Docker Desktop, але ў нашым артыкуле мы будзем працаваць праз тэрмінал. (Пасля ўсталявання Docker Desktop, амаль заўседы docker дасяжны праз тэрмінал.)

2. Ствараем Dockerfile.

Для пачатку - створым файл index.js з наступным кодам:

const http = require('http');

const hostname = '0.0.0.0';
const port = 3001;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Гэта будзе код які будзе выконвацца ў нашым кантэйнеры.

Затым створым Dockerfile з настпупным кодам:

FROM node:18.15

WORKDIR /app


COPY ./index.js  .


EXPOSE 3001

CMD ["node", "index.js"]

Дзе FROM указвае на базе якога вобраза будзе створаны наш новы кантэйнер. У нашым выпадку гэта будзе вобраз з 18-й нодай.

Каманда WORKDIR - вызначае, ў якой дырэкторыі будуць выконвацца наступныя каманды. Напрыклад, пры вызначэнні WORKDIR /app у Dockerfile наступныя каманды будуць выконвацца ўнутры дырэкторыі /app у кантэйнеры

COPY - капіруе вызначаныя файлы ў кантэйнер.

EXPOSE - Вызначаем сеткавы порт які будзе выкарыстоўвацца. Гэтая дырэктыва проста дакументуе, якія парты будуць ужывацца праграмай ўнутры кантэйнера. Калі вы вызначаеце EXPOSE у Dockerfile, гэта не адчыняе аўтаматычна дадзены порт на хоставай машыне альбо звязвае яго з партамі ўнутры Docker-сеткі. (Далей разгледзім як гэта зрабіць)

CMD - Каманда, якая выконваецца пры запуску кантэйнера.

3. Ствараем вобраз.

Каб стварыць вобраз з атрыманага файла дастаткова выканаць каманду docker build -t hello . - дзе флаг -t - вызначае імя для будучага вобразу. (Выконваем каманду ў папцы, дзе знаходзяцца наш Dockerfile і index.js)

Калі ўсе пройдзе паспяхова - то вы пабачыце наступнае:

Sending build context to Docker daemon  3.072kB
Step 1/5 : FROM node:18.15
 ---> 9615572c45b7
Step 2/5 : WORKDIR /app
 ---> Using cache
 ---> 7b7d29f8f507
Step 3/5 : COPY ./index.js .
 ---> Using cache
 ---> fcd61fda1610
Step 4/5 : EXPOSE 3001
 ---> Using cache
 ---> 0a81a67e67ba
Step 5/5 : CMD ["node", "index.js"]
 ---> Using cache
 ---> 739f8defb55e
Successfully built 739f8defb55e
Successfully tagged hello:latest

Зараз, калі мы выканаем каманду docker images - то пабачым спіс даступных вобразаў. Адзін з іх будзе наш.

hello        latest    20753360e805   6 minutes ago    997MB

4. Запускаем кантэйнер.

Запуск кантэйнера разгледзім на прыкладзе наступнай каманды:

docker run -d -p 8080:3001 --name hello_container --rm hello

-d абазначае што кантэйнер будзе запушчаны ў фонавым рэжыме. Тобок калі вы зачыніце тэрмінал - кантэйнер працягне працаваць.

-p - пракідваем парты HOST_IP:CONTAINER_IP. То бок першы порт - порт нашага камп'ютара, другі - той які дасяжны ў кантэйнеры.

--name - імя кантэйнера

--rm - сцяг, які пазначае, што, пасля супынення кантэйнера, ен будзе выдалены (калі вы ў кантэйнеры захоўваеце неякія даныя, яны будуць згубленыя)

hello -імя вобраза з якога ствараем кантэйнер.

Магчымы і іншыя параметры. Нарыклад :

--restart unless-stopped у выпадку памылак ці падзення вобразу будзе яго перазапускаць.

Пасля выканання каманды, паглядзім спіс запушчаных кантэйнераў: docker ps. У спіску вы павінны ўбачыць запушчаны намі кантэйнер.

У выніку, калі мы пяройдзем у браўзэры на адрасу http://localhost:8080 , то ўбачым:

Hello World

5. Выдаленне кантэйнера і вобраза.

Каб супыніць кантэйнер, дастаткова набраць каманду

docker stop hello_container

(калі вы ўжывалі сцяг --rm - кантэйнер выдаліцца аўтаматычна).

docker rm hello_container - выдаліць кантэйнер.

docker image rm hello - выдаліць вобраз.

6.Заключэнне.

У сучаснасці разуменне працы і валоданне інструментамі, як docker, з'яўляецца абавязковай часткай працы распрацоўшчыкаў усіх узроўняў. Таму, спадзяюся што артыкул будзе для вас карысны.

P.S.

Калі ў вас засталіся пытанні на гэтую тэму - калі ласка, астаўляйце іх у каментарах.

Вялікі дзякуй тым хто дачытаў дасюль.

Admin, 2023-05-25
Каментары

    (Каб даслаць каментар залагуйцеся ў свой уліковы запіс)

    ;