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.jsonfil. 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.jsrammen til vores applikation, med --save- flag, der fungerer som en instruktion til applikationen, der skal bruges express.jssom 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 .gitignorefil 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.jsudviklingen, spores af git.

Tilføj nu følgende kode til app.jsfilen:

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

Tillykke med at komme så langt

Ind i Dockerverse

Opret nu en Dockerfilemed 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 Dockerfilekommando gør.

Tilføj også en dockerignorefil for at forhindre containerisering af visse komponenter i applikationen.

Placer dette inde i dockerignorefilen:

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