Docker 101 - kako doći od stvaranja do postavljanja

Docker je igrač koji mijenja igre i vrlo je promijenio svijet razvoja aplikacija. Naučite vitalne vještine potrebne za rad s ovom tehnologijom kontejnera danas.

Što je Docker?

Jednostavno rečeno, Docker je alat koji omogućuje programerima stvaranje, postavljanje i pokretanje aplikacija u spremnicima. Kontejnerizacija je upotreba Linux kontejnera za postavljanje aplikacija.

Pa zašto je Docker tako sjajan i zašto bismo se mi kao programeri uopće morali truditi učiti ga?

Razlog Obrazloženje
Fleksibilno Čak se i najsloženije aplikacije mogu spremiti u spremnike.
Lagana Spremnici koriste i dijele jezgru domaćina.
Izmjenjivi Ažuriranja i nadogradnje možete rasporediti u hodu.
Prijenosni Možete graditi lokalno, rasporediti se u oblak i pokretati bilo gdje.
Skalabilno Možete povećati i automatski distribuirati replike spremnika.
Može se slagati Usluge možete slagati okomito i u hodu.

Sad kad znamo zašto je Docker tako velika stvar, neka je instaliran na našem lokalnom stroju.

Registrirajte se za račun na Docker Hub-u i preuzmite besplatnu aplikaciju Docker Desktop.

Po čemu se Docker razlikuje od tradicionalnih virtualnih strojeva?

Spremnik se izvorno izvodi na Linuxu i dijeli jezgru računala s ostalim spremnicima. Izvodi se kao diskretni proces, ne uzimajući više memorije od bilo kojeg drugog izvršnog programa, što znači da je vrlo lagan.

Suprotno tome, virtualni stroj (VM) pokreće potpuno razvijeni "gost" operativni sustav s virtualnim pristupom resursima hosta putem hipervizora. Općenito, VM-ovi pružaju okruženje s više resursa nego što je većini aplikacija potrebno.

Kada radite s Dockerom, `Dockerfile` definira što se događa u okruženju unutar vašeg spremnika. Pristup resursima poput mrežnih sučelja i diskovnih pogona virtualiziran je unutar ovog okruženja, izoliranog od ostatka vašeg sustava. To znači da morate mapirati luke s vanjskim svijetom i precizno odrediti koje datoteke želite "kopirati" u to okruženje. Međutim, nakon što to učinite, možete očekivati ​​da se izrada vaše aplikacije definirane u ovom `Dockerfile` ponaša potpuno isto gdje god se izvodi.

Dockerove naredbe

Da biste testirali imate li pokrenutu verziju Dockera, pokrenite sljedeću naredbu:

docker --version

Da biste provjerili radi li vaša instalacija savršeno, pokušajte pokrenuti jednostavnu Dockerovu sliku hello-world :

docker run hello-world

Ako je sve ispravno postavljeno, trebali biste vidjeti izlaz sličan sljedećem:

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. ... 

Da biste vidjeli hello-world Docker-ovu sliku koja je preuzeta na vaše računalo, upotrijebite naredbu Docker-ovog popisa slika:

docker image ls

Super! Već ste započeli razvoj kontejnerskih aplikacija s Dockerom. Evo nekoliko korisnih osnovnih naredbi Dockera:

## 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 
Kontejnerizacija čini CI / CD besprijekornim. Na primjer:
  • aplikacije nemaju sistemske ovisnosti
  • ažuriranja se mogu gurnuti u bilo koji dio distribuirane aplikacije
  • gustoća resursa može se optimizirati.
  • S Dockerom je skaliranje vaše aplikacije stvar okretanja novih izvršnih datoteka, a ne pokretanja teških VM hostova.

Izradimo web aplikaciju Node.js pomoću Dockera

Prvo što napravimo je stvoriti package.jsondatoteku. To možemo učiniti brzo jednostavnim pokretanjem sljedeće naredbe:

npm init -y 

Ovo stvara gornju datoteku s određenim bitnim poljima koja su već popunjena ili su ostala prazna.

Your file should look something like this:

{ "name": "app-name", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" } 

Next, we install express.js, which according to the official website, is a "Fast, unopinionated, minimalist web framework for Node.js".

We do this by running the following command in a terminal:

npm install express --save 

The command above adds the express.js framework to our application, with the --save flag acting as an instruction to the application to use express.js as a dependency.

Now, go into your package.json, and change the "main": "index.js" key-value pair to the following:

"main": "app.js" 

Next, create a .gitignore file using the following command:

touch .gitignore 

Then add the following line:

node_modules/ 

This prevents the node_modules folder which is essential to node.js development from being tracked by git.

Now add the following code to the app.js file:

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}`);

To have this run on your local machine, run the following command in the application folder:

npm start 

You will find the application running at //0.0.0.0:8080/

Awesome!

Congratulations

Congratulations on making it this far

Into the Dockerverse

Now create a Dockerfile with the following command:

touch Dockerfile 

Then add in the following code:

# 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" ] 

The comments above attempt to explain what each Dockerfile command does.

Also, add a dockerignore file to prevent the containerisation of certain components of the application.

Place this inside of the dockerignore file:

node_modules npm-debug.log Dockerfile* docker-compose* .dockerignore .git .gitignore README.md LICENSE 

How to Deploy

The is the name you assign to your Docker app, and is essentially just a version indicator for your Docker image.

  • docker build -t image-name:tag .

Run this to access your Docker account from your terminal.

  • docker login

Create a repository on Docker Hub.

Tag for upload to registry.

  • docker tag username/repository:tag

Upload the tagged image to the registry.

  • docker push username/repository:tag

Run the deployed Docker container on your local machine by connecting its PORTS. Target the exposed 8080 port, and assign it to port 10203 on your machine.

  • docker run -p 10203:8080 username/repository:tag

That's it! You have built and deployed a containerised Node.js web application.

All the code above can be found in this Github repository.

Originally posted here on blog.ninte.dev