Docker 101 - hvordan man kommer fra oprettelse til implementering
Docker er en game-changer og har meget ændret verden af applikationsudvikling. Lær de nødvendige færdigheder, der er nødvendige for at arbejde med denne containerteknologi i dag.
Hvad er Docker?
Enkelt sagt er Docker et værktøj, der giver udviklere mulighed for at oprette, implementere og køre applikationer i containere. Containerisering er brugen af Linux-containere til at implementere applikationer.
Så hvorfor er Docker så stor, og hvorfor skulle vi som udviklere endda gider at lære det?
Grund | Forklaring |
---|---|
Fleksibel | Selv de mest komplekse applikationer kan containeriseres. |
Letvægts | Containere udnytter og deler værtskernen. |
Udskiftelig | Du kan implementere opdateringer og opgraderinger on-the-fly. |
Transportabel | Du kan bygge lokalt, implementere i skyen og køre hvor som helst. |
Skalerbar | Du kan øge og automatisk distribuere containerreplikater. |
Kan stables | Du kan stable tjenester lodret og on-the-fly. |
Nu hvor vi ved, hvorfor Docker er sådan en stor ting, lad os have det installeret på vores lokale maskine.
Tilmeld dig en konto på Docker Hub, og download den gratis Docker Desktop-applikation.
Hvordan adskiller Docker sig fra traditionelle virtuelle maskiner?
En container kører indbygget på Linux og deler kernen på værtsmaskinen med andre containere. Det kører som en diskret proces, der ikke tager mere hukommelse end nogen anden eksekverbar, hvilket betyder, at den er meget let.
Derimod kører en virtuel maskine (VM) et fuldt blæst "gæst" -styresystem med virtuel adgang til værtsressourcer gennem en hypervisor. Generelt giver virtuelle computere et miljø med flere ressourcer, end de fleste applikationer har brug for.
Når du arbejder med Docker, definerer en 'Dockerfile', hvad der foregår i miljøet inde i din container. Adgang til ressourcer som netværksgrænseflader og diskdrev virtualiseres i dette miljø, der er isoleret fra resten af dit system. Dette betyder, at du skal kortlægge porte til omverdenen og være specifik for, hvilke filer du vil "kopiere" til det miljø. Når du har gjort det, kan du dog forvente, at bygningen af din app, der er defineret i denne `Dockerfile`, opfører sig nøjagtig den samme, uanset hvor den kører.
Docker-kommandoer
For at teste, at du har en kørende version af Docker, skal du køre følgende kommando:
docker --version
For at teste, at din installation fungerer perfekt, skal du prøve at køre det enkle Docker- hello-world- billede:
docker run hello-world
Hvis alt er konfigureret korrekt, skal du se output svarende til følgende:
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...
For at se Hello-world Docker-billedet, der blev downloadet til din computer, skal du bruge kommandoen Docker image listing:
docker image ls
Fantastisk! Du er allerede begyndt at udvikle containeriserede applikationer med Docker. Her er nogle nyttige grundlæggende Docker-kommandoer:
## List Docker CLI commands docker docker container --help ## Display Docker version and info docker --version docker version docker info ## Execute Docker image docker run hello-world ## List Docker images docker image ls ## List Docker containers (running, all, all in quiet mode) docker container ls docker container ls --all docker container ls -aq
Containerisering gør CI / CD problemfri. For eksempel:
- applikationer har ingen systemafhængighed
- opdateringer kan skubbes til enhver del af en distribueret applikation
- ressourcetæthed kan optimeres.
- Med Docker er skalering af din applikation et spørgsmål om at spinde nye eksekverbare filer op, ikke køre tunge VM-værter.
Lad os bygge en Node.js-webapp ved hjælp af Docker
Den første ting, vi gør, er at oprette en package.json
fil. Vi kan gøre dette hurtigt ved blot at køre følgende kommando:
npm init -y
Dette opretter filen ovenfor med visse vigtige felter, der allerede er udfyldt eller er tomme.
Din fil skal se sådan ud:
{ "name": "app-name", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
Dernæst installerer vi express.js
, som ifølge det officielle websted er en " hurtig, uopinioneret, minimalistisk webramme til Node.js ".
Vi gør dette ved at køre følgende kommando i en terminal:
npm install express --save
Kommandoen ovenfor tilføjer express.js
rammen til vores applikation, med --save- flag, der fungerer som en instruktion til applikationen, der skal bruges express.js
som en afhængighed.
Gå nu ind i din package.json
, og skift "main": "index.js"
nøgleværdipar til følgende:
"main": "app.js"
Opret derefter en .gitignore
fil ved hjælp af følgende kommando:
touch .gitignore
Tilføj derefter følgende linje:
node_modules/
Dette forhindrer, at mappen node_modules , der er vigtig for node.js
udviklingen, spores af git
.
Tilføj nu følgende kode til app.js
filen:
const express = require('express'); const app = express(); const PORT = 8080; const HOST = '0.0.0.0'; app.get('/', (req, res) => { res.send( ` Home
Docker is awesome!
Next Page ` ) }); app.get('/more', (req, res) => { res.send( ` Page Two
Node.js is pretty great too!!
Back Home ` ) }); app.listen(PORT, HOST); console.log(`Running on //${HOST}:${PORT}`);
For at køre dette på din lokale maskine skal du køre følgende kommando i applikationsmappen:
npm start
Du finder applikationen, der kører kl //0.0.0.0:8080/
Fantastisk!
Tillykke med at komme så langt
Ind i Dockerverse
Opret nu en Dockerfile
med følgende kommando:
touch Dockerfile
Tilføj derefter følgende kode:
# An official Docker image for Node.js FROM node:10-alpine # Working directory for the containerised application WORKDIR /src/app # This copies significant package.json files to the current directory COPY package*.json ./ # Install essential Node.js dependencies RUN npm install COPY . . # Opens up this port on the Docker container EXPOSE 8080 # This starts the Docker application CMD [ "npm", "start" ]
Kommentarerne ovenfor forsøger at forklare, hvad hver Dockerfile
kommando gør.
Tilføj også en dockerignore
fil for at forhindre containerisering af visse komponenter i applikationen.
Placer dette inde i dockerignore
filen:
node_modules npm-debug.log Dockerfile* docker-compose* .dockerignore .git .gitignore README.md LICENSE
Sådan implementeres
Det er det navn, du tildeler din Docker-app og
er i det væsentlige bare en versionindikator for dit Docker-billede.
docker build -t image-name:tag .
Kør dette for at få adgang til din Docker-konto fra din terminal.
docker login
Opret et lager på Docker Hub.
Tag til upload til registreringsdatabasen.
docker tag username/repository:tag
Upload det taggede billede til registreringsdatabasen.
docker push username/repository:tag
Kør den implementerede Docker-container på din lokale maskine ved at forbinde dens PORTER. Målret mod den eksponerede 8080-port, og tildel den til port 10203 på din maskine.
docker run -p 10203:8080 username/repository:tag
Det er det! Du har bygget og implementeret en containeriseret Node.js-webapplikation.
Al koden ovenfor kan findes i dette Github-arkiv.
Oprindeligt sendt her på blog.ninte.dev