Yeni başlayanlar üçün docker: Docker nədir və necə Docker Containers yaratmaq olar

Son bir neçə ildə proqramlaşdırma dünyasındakı son inkişaflarla əlaqəli olsaydınız, Docker və Docker konteynerlərinin ətrafındakı yüksək səs-küyə diqqət yetirərdiniz. Dokerin bu populyarlığı səbəbsiz deyil. Docker-in tətbiqi, inkişaf etdiricilərin tətbiqetmə inkişafına yanaşma tərzini çox dəyişdi.

Belə bir inqilabçı texnologiya proqramlaşdırma dünyasına dəyəndə kim geridə qalmaq istəyir? Beləliklə, bu gün Docker-in tətbiqetmə inkişafı üçün necə istifadə ediləcəyini öyrənməyiniz üçün yeni bir dərs seriyasına başlayırıq. Docker üçün mütləq bir başlanğıcsınızsa, bu dərslik seriyası başlamaq üçün doğru yerdir.

Təlimat seriyamızın ilk məqaləsində Docker-in tam olaraq nə olduğunu və inkişaf etdiricilərin Docker-i niyə bu qədər sevdiyini anlamağa çalışırıq. Docker'ın əsas anlayışları ilə tanış olmaq üçün sadə bir Node.js tətbiqetməsini də tətbiq edəcəyik.


Niyə daha gözləyəsən? Başlayaq!



Docker nədir

Docker, tətbiqetmə yaratmaq üçün istifadə edilən bir vasitədir; tətbiqləri yaratmaq, yerləşdirmək və konteynerlər vasitəsilə işlətməkdir.


Bir konteynerlə, bütün kitabxanalar və bir tətbiqi çalıştırmak üçün lazım olan digər asılılıqlar, yerləşdirmə üçün tək bir paket olaraq doludur.

Tətbiqi qablaşdırmağın əsas məqsədi onları eyni sistemdə işləyən digər tətbiqlərdən təcrid etməkdir. Bu yanaşma tətbiqetmələrin bir-birinin işinə müdaxilə etməməsini təmin edir və tətbiqin saxlanmasını xeyli asanlaşdırır.

Eyni sistemdə işləyən konteynerlər icra zamanı bir-birindən təcrid olunsa da, eyni OS nüvəsini bölüşürlər. Beləliklə, konteynerlər tətbiq icrası, virtual maşınları təcrid etmək üçün alternativ seçimlə müqayisədə daha yüngüldür.

Windows əməliyyat sisteminizdə işləyən konteyner tətbiqetmənin mühitin dəyişməsinə baxmayaraq başqa bir istifadəçinin Windows maşınında problemsiz işləməsi təmin edilir.


Konteynerlər Docker-dən əvvəl çoxdan istifadə olunmasına baxmayaraq, geliştirici icmasında Docker-in tətbiqi konteynerlərdən istifadə edərək populyarlaşdı. Tətbiqi dokerləşdirərkən istifadə olunan iki komponent var: DockerfileDocker şəkli . Gəlin nə olduqlarını öyrənək.

Dockerfile

Dockerfile, doker şəkli yaratmaq üçün lazım olan bir sıra əmrləri ehtiva edən bir mətn sənədidir. Dockerfile, əsas əməliyyat sistemi, dil, fayl yeri və digər şeylər arasında şəbəkə portları haqqında məlumat ehtiva edir.

Docker şəkli

Docker's build əmrini yerinə dockerfile yerləşdirdiyinizdə, dockerfile əsaslanan bir docker image yaradılır. Son docker konteynerini yaratmaq üçün şablon rolunu oynayırlar. Yarandıqdan sonra doker şəkillər statikdir. Docker görüntüsünü istifadə edərək docker konteynerini yaratmaq üçün Docker’ın run əmrini səsləndirə bilərsiniz.



Bir Node.js Tətbiqi Dockerizing

Bu təlimatda bir Node.js tətbiqetməsini dockerize edəcəyik. Docker konteynerini işə salmaq üçün addım-addım yanaşma izləyəcəyik.


1 - Node.js tətbiqini yaradın 2 - Dockerfile yaradın 3 - Docker şəklini yaradın 4 - Tətbiq konteynerini yaradın

Tətbiqimizi dockerizasiya etməyə başlamazdan əvvəl sisteminizdə Docker və Node.js quraşdırıldığından əmin olmalısınız.

  • Docker'ı sisteminizə yükləyin - Docker'ı bu təlimatda necə quracağımı izah etməyəcəyəm, ancaq Docker sənədlərini izləyə və Windows və ya Ubuntu masaüstünüzə Docker quraşdıra bilərsiniz.
  • Node.js-i rəsmi veb saytdan yükləyin və quraşdırın

Node.js tətbiqi yaradın

Komanda sətrindən yeni layihə qovluğuna gedin və tətbiqin asılılıqları haqqında məlumatı və ssenarini başlatmaq üçün pack.json faylını yaratmaq üçün aşağıdakı əmri işə salın.

npm init -y


Daha sonra, bu əmri əmr sətrində çalıştıraraq tətbiqinizi bir asılılıq olaraq Express qurun və əlavə edin. Tətbiqi yaratmaq üçün Express istifadə edəcəyik.

npm install express --save

Bu ifadəni package.json -ə bir asılılıq olaraq əlavə edəcəkdir fayl.

İndi Express köməyi ilə bir Node tətbiqi yarada bilərik.


app.js Adlı bir sənəd yaradın layihə qovluğunda və aşağıdakı kodu fayla əlavə edin.

const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(3000, () => {
console.log('Node server has started running') })

Yuxarıda göstərilən kod 3000 nömrəli portda daxil olan istəkləri dinləyən bir Node server yaradır. Node serverini başlamaq üçün bu əmri əmr sətrində işə sala bilərsiniz.

node app.js

İndi brauzerinizə gedin və URL-yə əməl edin http://localhost:3000 və mətni görəcəksiniz Hello World! səhifədə.

Layihəmiz üçün sadə bir Node tətbiqi yaratdıq. İndi doker faylını yaratmağa keçək.

Dockerfile yaradın

Dockerfile, Docker mühiti ilə birlikdə Node tətbiqimizi qurmaq və çalıştırmaq üçün lazım olan məlumatları təqdim edirik.

Bu, tətbiqdə istifadə olunan dilin və onun versiyasının göstərilməsini, layihə qovluğumuzun iş qovluğu olaraq təyin edilməsini, iş qovluğundakı bütün sənədlərin kopyalanmasını, şəbəkə portunun qurulmasını və tətbiqin giriş nöqtəsi olan sənədin müəyyən edilməsini əhatə edir. Daha mürəkkəb tətbiqetmələrdə ətraf mühit dəyişənlərini və verilənlər bazası URL-sini dokerfildə də təyin etməlisiniz.

FROM node:latest WORKDIR /dockerTutorial COPY . . RUN npm install EXPOSE 3000 ENTRYPOINT ['node', 'app.js']
  • GERİ əmri, tətbiqimizi Docker Hub-dan müəyyən bir əməliyyat sistemi üzərində işlətmək üçün bir OS görüntüsünü alır. Docker Hub, yerli mühitə çəkə biləcəyimiz docker şəkillərinin bir deposudur. Node.js. yükləyən Ubuntu əsaslı bir şəkil alırıq. Düyün versiyası olaraq 'son' istifadə edərək, ən son Node versiyasını quraşdırmış bir görüntü çəkir.
  • İşçi əmri tətbiqin iş qovluğunu təyin edir.
  • Kopyala əmr cari qovluqdakı sənədləri (əmr sətrində) əvvəlki addımda qurulmuş iş qovluğuna kopyalayır. Kopyalamaq üçün bir fayl adı təyin edə bilərsiniz və ya cari qovluqdakı bütün faylları iş qovluğuna kopyalamaq üçün cüt nöqtələrdən istifadə edə bilərsiniz.
  • İŞLƏYİN əmri, tətbiqi qurmaq üçün lazım olan bütün asılılıqları quraşdırır. Buraya package.json -də göstərilən bütün asılılıqlar daxildir fayl.
  • İfşa edin əmri Docker konteynerindən xarici dünyaya bir port açır. Bu liman Docker konteynerinə göndərdiyimiz bütün tələbləri qəbul edir. Port, Docker konteynerinin içindəki Düyün tətbiqetməmizin istəkləri dinləmək üçün istifadə etdiyi port olduğundan, xüsusi olaraq 3000 olaraq təyin edilmişdir.
  • GİRİŞ tətbiqetməyə necə başlayacağını təyin edir. Docker tətbiqi başlamaq üçün tək bir əmrə verdiyimiz massivə qoşulur. Bu vəziyyətdə, node app.js.

Docker Şəkilinin yaradılması

Docker faylından Docker görüntüsünü yaratmaq üçün aşağıdakı əmrdən istifadə edin.

docker build -t docker-tutorial .

Docker-tutorial Docker şəklinin adıdır. Nöqtə, hazırda komanda xəttində olduğumuz layihə qovluğuna fayl yolunu göstərir.

OS görüntüsü. İlə göstərilmişdirsə GERİ əmr, düyün: son , bu anda cihazınızda deyil, yuxarıdakı əmri işə saldıqda Docker Hub-dan çəkiləcək.

Təsvir çəkildikdən sonra dokfildəki hər əmr bir-bir yerinə yetiriləcəkdir.

İcazənin sonunda mesajı görürsənsə uğurla inşa edilmişdir , tətbiqin doker şəkli uğurla quruldu. Yerli şəkil anbarında quraşdırılmış doker şəklini görmək üçün bu əmri işə salın.

docker images

Çıxış belə görünür

Konteynerin yaradılması

İndi Docker konteynerimizi yaratmaq üçün qurulmuş şəkildən istifadə edə bilərik. Konteyner yaratmaq üçün docker run əmrindən istifadə edin.

docker run -p 8080:3000 docker-tutorial

Burada 8080 və 3000 rəqəmləri qabın xarici və daxili hissəsini göstərir. Xarici port, 8080, brauzerimiz vasitəsilə tətbiqi bağlamaq üçün istifadə etdiyimiz portdur. Daxili port, 3000, tətbiqimizin gələn istəkləri dinlədiyi portdur. Docker konteyner verilmiş xarici portu daxili porta uyğunlaşdırır.

URL ziyarət edin http://localhost:8080 brauzerdə və səhifəni Hello World! ilə əldə edib-etmədiyinə bax http://localhost:3000 ziyarət edərkən aldığınız mesaj əvvəl. Varsa, Docker konteyneriniz işlək vəziyyətdədir.

Bu əmri cihazınızdakı bütün işləyən Docker qablarına baxmaq üçün istifadə edə bilərsiniz.

docker ps

Komanda sizə belə bir nəticə verəcəkdir. Çalışan konteynerin CONTAINER_ID və NAME adını tapa bilərik.

Tətbiqinizə Ətraf Dəyişənləri əlavə edin

Dockerfile-də daha çox təlimat tələb etdiyini, ətraf mühit dəyişkənləri olan bir tətbiqetmədən necə bəhs etdiyimi xatırlayırsınız? Ətraf dəyişənlərin dəyəri çalışdıqları mühitlə birlikdə dəyişir.

Server işləyərkən Node tətbiqimizin dinlədiyi portu necə açıq şəkildə qeyd etdiyimizə diqqət yetirin. Bu yanaşma əyilməz və səhvlərə meyllidir. Tətbiqimizi Node server üçün 3000 portunu açmayan bir mühitdə çalıştırdığımız təqdirdə tətbiqimiz fəaliyyətini dayandırır.

Ən uyğun tətbiq, port nömrəsini tətbiqdən çıxarmaqdır. Bunun əvəzinə, port nömrəsinin yerinə bir dəyişən adı istifadə edirik və işləyən mühitdə bu dəyişən üçün bir dəyər təyin edirik. Bizim vəziyyətimizdə, işləyən mühit Docker konteyneridir. Beləliklə, port nömrəsini mühit dəyişən kimi dockerfile əlavə etməliyik.

Gəlin görək bunu necə edə bilərik.

Əvvəlcə ətraf mühit dəyişənini dəyəri ilə dockerfile əlavə edin. Bunu yerinə yetirmək üçün dockerfile yeni bir əmr əlavə etməliyik.

FROM node:latest WORKDIR /dockerTutorial COPY . . ENV PORT=3000 RUN npm install EXPOSE $PORT ENTRYPOINT ['node', 'app.js']

Dəyişən ad və dəyər atamasının ardından ENV əmrindən istifadə edərək, sənədimizə yeni bir mühit dəyişən əlavə edə bilərik. Port nömrəsini açıq şəkildə qeyd etməmək üçün EXPOSE 3000 əmrinin necə dəyişdirildiyini fərq etdinizmi? Bunun əvəzinə, dəqiq port nömrəsini almaq üçün yaradılan PORT dəyişəninə istinad edilir. Bu yanaşma ilə, port nömrəsini dəyişdirməliyiksə, kodumuzda yalnız bir yer dəyişdirməliyik, bu da tətbiqimizin saxlanmasını asanlaşdırır.

İndi dockerfile dəyişdirdik, növbəti addım app.js-i yaradılan mühit dəyişəninə müraciət etmək üçün dəyişdirir. Bunun üçün dinləmə metodunun daxilində istifadə olunan 3000 port nömrəsini process.env.PORT ilə əvəz edirik.

const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(process.env.PORT, () => {
console.log('Node server has started running') })

Tətbiq sənədlərimizdə və doker sənədimizdə dəyişiklik etdiyimiz üçün yeni bir qab üçün yeni bir şəkil yaratmalıyıq. Ancaq əvvəlcə buna nail olmaq üçün hazırda işləyən Docker konteynerini dayandırmalıyıq.

Konteyneri dayandırmaq üçün docker stop əmrindən istifadə edə bilərik.

docker stop f10

Bu əmrdə istifadə olunan f10 dəyəri konteynerin şəxsiyyətinin ilk üç rəqəmidir.

Çalışan konteynerin dayandırılması üçün əmri, docker kill istifadə edə bilərik.

docker kill f10

Docker kill və docker stop arasındakı fərq, docker stopun qaynaqları istifadə edərək vəziyyəti xilas edərək konteynerin daha zərif şəkildə dayandırılmasıdır. lakin docker kill, lazımi şəkildə sərbəst buraxmadan və ya dövlətə qənaət etmədən konteynerini daha kəskin şəkildə dayandırır. Bir istehsal mühitində çalışan bir konteyner üçün konteynerin dayandırılması üçün docker stop istifadə etmək daha yaxşı seçimdir.

Çalışan bir konteynerin dayandıqdan sonra, aşağıdakı əmrdən istifadə edərək konteynerin qalıqlarını ana mühitdən təmizlədiyinizə əmin olun.

Konteynerin Daemon rejimində işlədilməsi

Konteynerin dayandırılması üçün yuxarıdakı əmrləri işə saldığınızda, konteyner yaratdığımız terminal nişanının, konteyner öldürmədikcə daha çox əmr işlədilməsi üçün istifadə edilə bilməyəcəyini görərsiniz. Bunun üçün yeni əmrləri işə salmaq üçün ayrı bir nişanı istifadə edərək həll yolu tapa bilərik.

Ancaq daha yaxşı bir yanaşma var. Konteynerini demon rejimində işlədə bilərik. Demon rejimi ilə konteyner, nəticələri göstərmək üçün cari nişanı istifadə etmədən arxa planda işləyir.

Daemon rejimində bir konteynerə başlamaq üçün docker run əmrinə əlavə bir -d bayrağı əlavə etməlisiniz.

docker run -d -p 8080:3000 docker-tutorial

Konteynerin interaktiv rejimdə işlədilməsi

İnteraktiv rejimdə bir konteyner çalıştırmak üçün qab artıq işləməli olmalıdır. İnteraktiv rejimdə olduqda, konteynerə fayl əlavə etmək və ya silmək üçün əmrləri işə sala, faylların siyahısını verə və ya istifadə etdiyimiz digər bash əmrlərini işə sala bilərsiniz.

Konteynerin interaktiv rejimdə işlədilməsi üçün aşağıdakı əmrdən istifadə edin.

docker exec -it e37 bash

Burada e37 konteyner kimliyidir. Baş əmrlərindən istifadə edərək interaktiv rejimdə oynayın.



Nəticə

Docker tutorial seriyamızın ilk dərsində sadə Node.js tətbiqi üçün Docker konteynerinin yaradılmasını öyrəndiniz. Ancaq Docker və konteynerlərlə edə biləcəyiniz daha çox şey var. Növbəti dərslərimizdə verilənlər bazaları, cildlərlə necə işləyəcəyimizi və mikroservislərlə qurulmuş bir tətbiqin istifadə etdiyi çoxsaylı qablarla necə işləməyimizi görəcəyik.