Docker fun Awọn akobere: Kini Docker ati Bii o ṣe Ṣẹda Awọn apoti Docker

Ti o ba ti ni ifọwọkan pẹlu awọn idagbasoke tuntun ni agbaye siseto ni awọn ọdun diẹ sẹhin, iwọ yoo ti ṣe akiyesi ariwo ariwo nla ti o wa ni ayika awọn apoti Docker ati Docker. Gbajumọ olokiki ti docker kii ṣe laisi idi. Ifihan ti Docker ti yipada pupọ bi awọn olupilẹṣẹ ṣe sunmọ idagbasoke ohun elo.

Tani o fẹ fi silẹ nigbati iru imọ-ẹrọ iyipada ba kọlu aye siseto? Nitorinaa, loni, a n bẹrẹ jara ikẹkọ tuntun fun ọ lati kọ bi a ṣe le lo Docker fun idagbasoke ohun elo. Ti o ba jẹ alakobere pipe si Docker, jara ẹkọ yii jẹ aaye ti o tọ fun ọ lati bẹrẹ.

Ninu nkan akọkọ ti jara ikẹkọ wa, a n wa lati ni oye kini Docker jẹ gangan ati idi ti awọn olupilẹṣẹ fẹràn Docker pupọ. A yoo tun ṣe dockerizing ohun elo Node.js rọrun lati jẹ ki o mọ ọ pẹlu awọn imọran ipilẹ ti Docker.


Kilode ti o fi duro de? Jẹ ki a bẹrẹ!



Kini Docker

Docker jẹ ọpa ti a lo lati kọ awọn ohun elo; iyẹn ni lati ṣẹda, fi ranṣẹ, ati ṣiṣe awọn ohun elo nipasẹ awọn apoti.


Pẹlu apo eiyan kan, gbogbo awọn ile ikawe, ati awọn igbẹkẹle miiran ti o nilo lati ṣiṣẹ ohun elo kan, ni a ṣajọpọ bi ẹyọkan kan fun imuṣiṣẹ.

Ifojumọ akọkọ ti iko ohun elo jẹ isopọ wọn si awọn ohun elo miiran ti n ṣiṣẹ ni eto kanna. Ọna yii ṣe idaniloju awọn ohun elo ko ni dabaru pẹlu iṣiṣẹ ti ara ẹni ati jẹ ki itọju ohun elo rọrun pupọ.

Botilẹjẹpe awọn apoti ti n ṣiṣẹ ni eto kanna ni a ya sọtọ si ara wọn ni ipaniyan, wọn pin ekuro OS kanna. Nitorinaa, awọn apoti jẹ iwuwo fẹẹrẹ diẹ sii ni akawe si yiyan yiyan fun ipinya ipaniyan ohun elo, awọn ẹrọ foju.

Ohun elo ti o wa ni apoti ti o nṣiṣẹ lori Windows OS rẹ jẹ ẹri lati ṣiṣẹ laisi oro kan ninu ẹrọ Windows olumulo miiran pelu iyipada ayika.


Botilẹjẹpe awọn apoti ti pẹ ni lilo ṣaaju Docker, ifihan ti Docker gbajumọ nipa lilo awọn apoti ni agbegbe olugbe idagbasoke. Awọn paati meji lo wa ti a lo nigba docker ohun elo kan: Dockerfile ati Docker Aworan . Jẹ ki a wa ohun ti wọn jẹ.

Dockerfile

Dockerfile jẹ faili ọrọ ti o ni eto awọn ofin ti o nilo lati kọ aworan docker kan. Dockerfile ni alaye nipa OS ipilẹ, ede, ipo faili, ati awọn ibudo nẹtiwọọki laarin awọn ohun miiran.

Docker Aworan

Nigbati o ba ṣiṣẹ aṣẹ kọ Docker pẹlu dockerfile ni ibi, a ṣẹda aworan docker da lori dockerfile. Wọn ṣe bi awọn awoṣe lati ṣẹda apoti docker ikẹhin. Lọgan ti a ṣẹda, awọn aworan docker jẹ aimi. O le kepe aṣẹ ṣiṣe Docker lati ṣẹda apoti ohun elo docker nipa lilo aworan docker kan.



Dockerizing Ohun elo Node.js kan

Ninu ẹkọ yii, a yoo ṣe ohun elo Node.js dockerize. A yoo tẹle ọna igbesẹ nipa igbesẹ lati gba apoti Docker soke ati ṣiṣe.


1 - Ṣẹda ohun elo Node.js 2 - Ṣẹda dockerfile 3 - Kọ aworan docker 4 - Ṣẹda apoti ohun elo

Ṣaaju ki o to diwẹ sinu dockerizing ohun elo wa, o yẹ ki o rii daju pe a ti fi Docker ati Node.js sori ẹrọ rẹ

  • Fi Docker sori ẹrọ rẹ-Emi kii yoo bo bii a ṣe le fi Docker sii ninu ẹkọ yii, ṣugbọn o le tẹle awọn iwe Docker ki o fi Docker sori ẹrọ ori iboju Windows tabi Ubuntu rẹ.
  • Gbaa lati ayelujara ati Fi Node.js sii lati oju opo wẹẹbu osise

Ṣẹda Ohun elo Node.js

Lilọ kiri si ilana iṣẹ akanṣe tuntun lati laini aṣẹ ati ṣiṣe aṣẹ atẹle lati ṣẹda faili package.json eyiti o ni alaye lori awọn igbẹkẹle ohun elo naa ati bẹrẹ iwe afọwọkọ.

npm init -y


Lẹhinna, fi sori ẹrọ ati ṣafikun KIAKIA gẹgẹbi igbẹkẹle si ohun elo rẹ nipa ṣiṣe pipaṣẹ yii lori laini aṣẹ. A yoo lo Express lati ṣẹda ohun elo naa.

npm install express --save

Eyi yoo ṣafikun kiakia bi igbẹkẹle si wa package.json faili.

Bayi a le ṣẹda ohun elo Node pẹlu iranlọwọ ti KIAKIA.


Ṣẹda faili ti a npè ni app.js ninu ilana iṣẹ akanṣe ki o ṣafikun koodu atẹle si faili naa.

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') })

Koodu ti o wa loke ṣẹda olupin Node kan ti o tẹtisi awọn ibeere ti nwọle lori ibudo 3000. O le ṣiṣe aṣẹ yii lori laini aṣẹ lati bẹrẹ olupin Node.

node app.js

Bayi lọ si ẹrọ aṣawakiri rẹ ki o tẹle URL http://localhost:3000 ati pe iwọ yoo wo ọrọ Hello World! loju iwe.

A ti kọ ohun elo Node ti o rọrun fun iṣẹ akanṣe wa. Bayi jẹ ki a lọ siwaju si ṣiṣẹda faili dockerfile.

Ṣẹda Dockerfile

Ninu dockerfile, a pese alaye ti o nilo lati kọ ati ṣiṣe ohun elo Node wa pẹlu agbegbe Docker.

Eyi pẹlu sisọ ede ati ẹya rẹ ti o lo ninu ohun elo naa, ṣiṣeto ilana iṣẹ akanṣe wa bi ilana iṣẹ, didakọ gbogbo awọn faili inu ilana iṣẹ, ṣiṣeto ibudo nẹtiwọọki, ati ṣafihan iru faili wo ni aaye titẹsi si ohun elo naa. Ninu awọn ohun elo ti o nira sii, iwọ yoo ni lati ṣeto awọn oniyipada ayika ati URL ibi ipamọ data ninu dockerfile naa.

FROM node:latest WORKDIR /dockerTutorial COPY . . RUN npm install EXPOSE 3000 ENTRYPOINT ['node', 'app.js']
  • LATI aṣẹ gba aworan OS pada, lati ṣiṣe ohun elo wa lori OS kan pato, lati Docker Hub. Ibudo Docker jẹ ibi ipamọ ti awọn aworan docker ti a le fa si agbegbe agbegbe. A n gba aworan Ubuntu ti o ti fi sii Node.js. Lilo 'tuntun' bi ẹya Node ṣe fa aworan ti o ni ẹya Node tuntun ti a fi sii.
  • Iṣẹ aṣẹ ṣeto itọsọna iṣẹ ti ohun elo naa.
  • ẸKỌ paṣẹ awọn ẹda awọn ẹda lati itọsọna lọwọlọwọ (lori laini aṣẹ) si itọsọna iṣẹ ti a ṣeto ni igbesẹ ti tẹlẹ. O le sọ pato orukọ faili kan lati daakọ tabi lo awọn iduro meji ni kikun lati daakọ gbogbo awọn faili ninu itọsọna lọwọlọwọ si itọsọna iṣẹ.
  • RUN aṣẹ nfi gbogbo awọn igbẹkẹle ti o nilo lati kọ ohun elo sii. Eyi pẹlu gbogbo awọn igbẹkẹle ti a ṣalaye ninu package.json faili.
  • ṢEYA aṣẹ ṣii ibudo kan lati apoti Docker si aye ita. Ibudo yii gba gbogbo awọn ibeere ti a firanṣẹ si apoti Docker. Port ti ṣeto ni pataki si 3000 nitori pe o jẹ ibudo ohun elo Node wa ninu apoti Docker nlo lati tẹtisi awọn ibeere.
  • Titẹsi ṣafihan bi o ṣe le bẹrẹ ohun elo naa. Docker darapọ mọ orun ti a pese si aṣẹ kan lati bẹrẹ ohun elo naa. Ni ọran yii, node app.js.

Ilé Aworan Docker

Lo aṣẹ atẹle lati ṣẹda aworan Docker lati dockerfile.

docker build -t docker-tutorial .

Docker-tutorial ni orukọ ti aworan Docker. Aami naa tọka ọna faili si itọsọna iṣẹ akanṣe, eyiti o wa nibiti a wa lọwọlọwọ ni laini aṣẹ.

Ti o ba ti OS aworan pàtó kan pẹlu awọn LATI pipaṣẹ, ipade: titun , ko si ninu ẹrọ rẹ ni akoko yii, yoo fa lati Docker Hub nigbati o ba ṣiṣẹ aṣẹ ti o wa loke.

Lẹhin ti o fa aworan naa, aṣẹ kọọkan ninu dockerfile naa ni yoo ṣiṣẹ ni ẹẹkan.

Ni opin ipaniyan, ti o ba ri ifiranṣẹ naa ni ifijišẹ kọ , aworan docker ti ohun elo naa ti kọ ni aṣeyọri. Ṣiṣe aṣẹ yii lati wo aworan docker ti a ṣe sinu ibi ipamọ aworan agbegbe.

docker images

Ijade naa dabi eleyi

Ṣiṣẹda Eiyan

Bayi a le lo aworan ti a kọ lati ṣẹda apoti Docker wa. Lo aṣẹ ṣiṣe docker lati ṣẹda apoti.

docker run -p 8080:3000 docker-tutorial

Nibi, awọn nọmba 8080 ati 3000 tọka si ita ati ti inu ti apo eiyan naa. Ibudo ita, 8080, ni ibudo ti a lo lati sopọ si ohun elo nipasẹ ẹrọ lilọ kiri ayelujara wa. Ibudo inu, 3000, ni ibudo ti ohun elo wa tẹtisi fun awọn ibeere ti nwọle. Awọn maapu eiyan Docker ibudo ti ita ti a fun si ibudo inu.

Ṣabẹwo si URL http://localhost:8080 lori ẹrọ lilọ kiri ayelujara ki o rii boya o gba oju-iwe pẹlu Hello World! ifiranṣẹ ti o gba nigba abẹwo http://localhost:3000 ṣaaju. Ti o ba jẹ bẹẹni, lẹhinna apo eiyan Docker rẹ ti n ṣiṣẹ.

O le lo aṣẹ yii lati wo gbogbo awọn apoti Docker ti nṣiṣẹ lori ẹrọ rẹ.

docker ps

Aṣẹ naa yoo fun ọ ni iṣẹjade bi eleyi. A le wa CONTAINER_ID ati NAME ti eiyan ti n ṣiṣẹ nibi.

Fifi Awọn oniyipada Ayika si Ohun elo Rẹ

Ranti bi mo ṣe darukọ ohun elo kan pẹlu awọn oniyipada ayika nilo awọn itọnisọna diẹ sii ni dockerfile? Iye ti iyipada ayika yipada pẹlu ayika ti wọn nṣiṣẹ ninu.

Ṣe akiyesi bawo ni a ṣe mẹnuba ibudo naa ohun elo Node wa tẹtisi nigbati olupin n ṣiṣẹ. Ọna yii jẹ rirọ ati aṣiṣe. Ni ọran ti a nṣiṣẹ ohun elo wa ni agbegbe ti ko ṣii ibudo 3000 fun olupin Node, ohun elo wa duro lati ṣiṣẹ.

Imuse ti o yẹ julọ julọ n mu nọmba ibudo kuro ninu ohun elo naa. Dipo, a lo orukọ oniyipada kan ni ipo nọmba ibudo ati ṣeto iye kan fun oniyipada yẹn ni agbegbe ti nṣiṣẹ. Ninu ọran wa, ayika ti n ṣiṣẹ ni apoti Docker. Nitorinaa, a ni lati ṣafikun nọmba ibudo naa si dockerfile bi oniyipada ayika kan.

Jẹ ki a wo bi a ṣe le ṣe iyẹn.

Ni akọkọ, ṣafikun oniyipada ayika si dockerfile wa pẹlu iye rẹ. A ni lati ṣafikun aṣẹ tuntun si dockerfile lati ṣe eyi.

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

Lilo pipaṣẹ ENV ti o tẹle pẹlu orukọ iyipada ati iṣẹ iyansilẹ iye, a le ṣafikun iyipada ayika tuntun si faili docker wa. Njẹ o ṣe akiyesi bawo ni a ti yipada pipaṣẹ Afihan 3000 lati ma darukọ nọmba ibudo ni gbangba? Dipo, o tọka si oniyipada PORT ti a ṣẹda lati gba nọmba ibudo gangan. Pẹlu ọna yii, ti a ba ni lati yi nọmba ibudo pada, a ni lati yi ibi kan nikan pada ninu koodu wa, eyiti o jẹ ki ohun elo wa rọrun lati ṣetọju.

Bayi a ti yi faili dockerfile pada, igbesẹ ti n tẹle ni yiyipada app.js lati tọka si iyipada ayika ti o ṣẹda. Fun eyi, a rọpo nọmba ibudo 3000 ti a lo ninu ọna ifetisilẹ pẹlu process.env.PORT.

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') })

Niwọn igba ti a ṣe awọn ayipada si awọn faili ohun elo wa ati dockerfile, a ni lati kọ aworan tuntun fun apoti tuntun kan. Ṣugbọn lakọkọ, a ni lati da eiyan Docker ti n ṣiṣẹ lọwọlọwọ lọwọ lati ṣaṣeyọri eyi.

A le lo aṣẹ iduro docker lati da eiyan duro.

docker stop f10

Iye, f10, ti a lo ninu aṣẹ yii ni awọn nọmba mẹta akọkọ ti ID ti apoti naa.

A le lo pipaṣẹ, docker pa, lati da eiyan ti n ṣiṣẹ duro.

docker kill f10

Iyato laarin apaniyan docker ati iduro docker ni pe iduro docker da eiyan duro diẹ sii ni ore-ọfẹ nipa dasile nipa lilo awọn orisun ati fifipamọ ipinle naa. docker pa, sibẹsibẹ, da eiyan duro diẹ sii lairotẹlẹ laisi dasile awọn orisun daradara tabi fifipamọ ipinle naa. Fun eiyan ti n ṣiṣẹ ni agbegbe iṣelọpọ, lilo iduro docker lati da eiyan duro ni aṣayan ti o dara julọ.

Lẹhin ti o da eiyan ti n ṣiṣẹ duro, rii daju lati nu iyoku ti o fi silẹ nipasẹ eiyan lati agbegbe agbalejo nipa lilo pipaṣẹ atẹle.

Nṣiṣẹ Eiyan ni Ipo Daemon

Nigbati o ba gbiyanju lati ṣiṣe awọn ofin loke lati da eiyan duro, iwọ yoo ṣe akiyesi pe taabu ebute ti a lo lati ṣẹda apo ko le ṣee lo lati ṣiṣẹ eyikeyi awọn ofin ayafi ti a ba pa apo naa. A le wa iṣẹ-ṣiṣe fun eyi nipa lilo taabu ọtọtọ fun ṣiṣe awọn ofin titun.

Ṣugbọn ọna ti o dara julọ wa. A le ṣiṣe eiyan ni ipo daemon. Pẹlu ipo daemon, apoti naa n ṣiṣẹ ni abẹlẹ laisi lilo taabu lọwọlọwọ lati ṣe afihan awọn abajade.

Lati bẹrẹ eiyan kan ni ipo daemon, o rọrun lati ṣafikun asia afikun -d si aṣẹ ṣiṣe docker.

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

Ṣiṣe Eiyan ni Ipo Ibanisọrọ

Lati ṣiṣe eiyan kan ni ipo ibaraenisọrọ, eiyan yẹ ki o ti ṣiṣẹ tẹlẹ. Ni ẹẹkan ninu ipo ibanisọrọ, o le ṣiṣe awọn aṣẹ lati fikun tabi yọ awọn faili si apo eiyan, ṣe akojọ awọn faili, tabi ṣiṣe awọn ofin fifọ miiran ti a maa n lo.

Lo pipaṣẹ wọnyi lati ṣiṣe eiyan ni ipo ibanisọrọ.

docker exec -it e37 bash

Nibi, e37 ni ID apoti. Mu ṣiṣẹ ni ayika pẹlu ipo ibanisọrọ nipa lilo awọn aṣẹ fifọ.



Ipari

Ninu ẹkọ akọkọ ti jara Tutorial wa Docker, o kọ bi o ṣe le ṣẹda apoti Docker fun ohun elo Node.js ti o rọrun. Ṣugbọn o wa diẹ sii ti o le ṣe pẹlu Docker ati awọn apoti. Ninu awọn itọnisọna wa ti n bọ, a yoo rii bi a ṣe le ṣiṣẹ pẹlu awọn apoti isura data, awọn iwọn, ati ṣiṣẹ pẹlu awọn apoti pupọ ti a lo nipasẹ ohun elo ti a ṣe pẹlu awọn ohun elo microservices.