Beth Yw Docker a Pham Ddylai Datblygwyr ei Ddysgu?
Dadansoddiad ymarferol o Docker ar gyfer datblygwyr: cynwysyddion yn erbyn VMs, gorchmynion craidd, Dockerfiles, a sut i ddechrau ei ddefnyddio mewn projectau go iawn.
Mae Docker yn ymddangos yn aml mewn cyhoeddiadau swyddi ac arweiniad gosod, ac os na chyffryddwyd chi erioed â chynwysyddion gall deimlo fel wal y mae'n rhaid i chi ei dringo cyn y cewch ysgrifennu cod go iawn. Nid yw mor gymhleth â hynny unwaith y byddwch wedi mynd heibio'r eirfa.
Beth yw cynwysydd mewn gwirionedd
Mae cynwysydd yn pacio'ch cymhwysiad gyda phopeth sydd ei angen arno i redeg: y cod, amser gogwydd, llyfrgelloedd system, a ffeiliau ffurfweddu. Nid yw'n beiriant rhithwir. Mae VM yn rhithwireddu system weithredu gyfan, yr endid canol cynhwysol, sy'n golygu y gall cychwyn un gymryd munud ac yfed ychydig gigabytiau o RAM. Mae cynwysydd yn rhannu endid canol y peiriant gwesteiwr ac yn ynysu'r broses yn unig, felly mae'n cychwyn mewn llai na eiliad ac fel arfer yn defnyddio degau o filiwn-drosedd yn lle gigabytiau.
Y gwahaniaeth hwnnw yw pam y cymerodd Docker drosodd datblygiad lleol a phiblinau CI mor gyflym. Gallwch gychwyn cronfa ddata Postgres, storfa Redis, a'ch gweinydd cymhwysiad ar un laptop heb osod yr un ohonynt yn uniongyrchol ar eich OS.
Y darnau craidd y mae angen i chi eu gwybod
Mae pedwar term yn cwmpasu'r rhan fwyaf o'r hyn y byddwch yn ei ddelio ag ef ddydd i ddydd:
- Image: templed darllen-yn-unig a adeiladwyd o Dockerfile. Meddyliwch amdano fel llungopiaid o system ffeiliau ynghyd â metadata am sut i'w redeg.
- Container: enghraifft redeg o ddelwedd. Gallwch ddechrau, stopio, a dileu cynwysyddion heb gyffwrdd â'r ddelwedd y daethant ohoni.
- Dockerfile: ffeil testun gydag cyfarwyddiadau ar gyfer adeiladu delwedd, llinell wrth linell.
- Registry: lle mae delweddau'n cael eu storio a'u tynnu ohonynt, gan amlaf Docker Hub.
Mae Dockerfile lleiaf ar gyfer cymhwysiad Node.js yn edrych fel hyn:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Adeiladwch ef gyda docker build -t my-app . a'i redeg gyda docker run -p 3000:3000 my-app. Mae'r -p faner yn mapio porth ar eich peiriant i borth y tu mewn i'r cynwysydd, sef sut y gallwch gyrraedd yr cymhwysiad mewn gwirionedd o'ch porwr.
Gorchmynion y byddwch yn eu defnyddio'n gyson
Mae nifer o orchmynion yn cwmpasu'r rhan fwyaf o waith dyddiol:
docker ps— rhestru cynwysyddion sy'n rhedegdocker ps -a— rhestru pob cynwysydd, gan gynnwys rhai wedi'u stopiodocker images— rhestru delweddau ar eich peiriantdocker logs <container>— gwiriwch allbwn o gynwysydd sy'n rhedeg neu wedi chwaludocker exec -it <container> sh— agor shell tu mewn i gynwysydd sy'n rhedegdocker rm/docker rmi— glanhau cynwysyddion a delweddau nad oes arnoch eu hangen mwyach
Mae'r pâr olaf hwnnw'n bwysicach nag y mae pobl yn disgwyl. Bydd Docker yn gadael i le disg ddiflannu'n hapus i hen ddelweddau a chynwysyddion wedi'u stopio. Yn rhedeg docker system prune yn achlysurol yn adennill swm syndod o le.
Pam mae docker-compose yn newid y gweithrediad
Mae'r rhan fwyaf o brojectau go iawn angen mwy nag un cynwysydd: gweinydd cymhwysiad, cronfa ddata, efallai storfa. Ysgrifennu docker run gorchmynion ar gyfer pob un yn mynd yn hen yn gyflym. Mae docker-compose.yml yn gadael i chi ddiffinio'r pentwr cyfan mewn un ffeil:
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: devpassword
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Rhedeg docker compose up a dechrau'r ddau wasanaeth gyda'i gilydd, wedi'u rhwydweithio fel y gall web gyrraedd db trwy enw gwasanaeth. Dyma'r gosodiad y byddwch yn ei weld mewn bron pob README repo cod agored, ac mae deall hyn yn golygu y gallwch glonio project a'i gael yn rhedeg mewn munudau yn lle osod Postgres, Redis, a beth bynnag arall sydd angen ar yr cymhwysiad â llaw.
Lle mae pobl yn cael eu cuddio'n gynnar
Mae cyfeintiau yn drysu bron pawb i ddechrau. Heb gyfeint, mae unrhyw beth a ysgrifennir tu mewn i gynwysydd yn diflannu pan gaiff y cynwysydd ei dynnu, sef problem ar gyfer cronfeydd data. Mae'r volumes adran yn y ffeil gyfansoddi uchod yn mapio cyfeint a enwyd i lwybr tu mewn i'r cynwysydd fel bod data'n goroesi ailgychwynniadau.
Camgymeriad arall cyfffredin yw copïo node_modules neu .git i'r ddelwedd oherwydd nid oes ffeil .dockerignore. Ychwanegwch un yn union fel .gitignore:
node_modules
.git
.env
Mae hynny'n cadw adeiladau'n gyflymach a delweddau'n llai, sy'n bwysig unwaith y byddwch yn gwthio delweddau i gofrestrfa neu'n tdeploy i Kubernetes.
Lle i fynd ar ôl y pethau sylfaenol
Unwaith y bydd adeiladu a rhedeg cynwysyddion yn teimlo'n normal, y sgiliau defnyddiol nesaf yw adeiladau aml-gam ar gyfer delweddau cynhyrchu llai, deall moddau rhwydweithu Docker, a darllen allbwn docker inspect pan nad yw rhywbeth yn cysylltu'n iawn. Nid yw dim ohono'n anodd, mae'n dal yn anghyfarwydd y tro cyntaf drwyddo.
Am ragor am gynwysydio cymhwysiadau go iawn a'u cysylltu â phiblinau trefniant cwmwl, gwiriwch segmentau DevOps a Cloud ar Korra Studio.
Ysgrifennwyd yr erthygl hon gyda chymorth AI, a'i hadolygu a'i chyhoeddi gan Michal Pilch (CISSP), Korra Studio.
Dyma un nodyn o'r gronfa wybodaeth Korra Studio — mae'r platfform yn paru pob pwnc ag 1-i-1 mentora.
Dechrau am ddimarrow_forward