Docker 101 - как да стигнем от създаването до внедряването

Docker е играч, който промени играта и много промени света на разработката на приложения. Научете жизненоважните умения, необходими за работа с тази контейнерна технология днес.

Какво е Docker?

С прости думи, Docker е инструмент, който позволява на разработчиците да създават, разгръщат и изпълняват приложения в контейнери. Контейнеризацията е използването на Linux контейнери за разполагане на приложения.

И така, защо Docker е толкова страхотен и защо ние като разработчици дори трябва да се притесняваме да го учим?

ПричинаОбяснение
ГъвкавДори и най-сложните приложения могат да бъдат контейнеризирани.
ЛекКонтейнерите използват и споделят ядрото на хоста.
ВзаимозаменяемиМожете да внедрявате актуализации и надстройки в движение.
ПреносимМожете да изграждате локално, да разполагате в облака и да стартирате навсякъде.
МащабируемаМожете да увеличавате и разпространявате автоматично реплики на контейнери.
Подрежда сеМожете да подреждате услуги вертикално и в движение.

След като вече знаем защо Docker е толкова голяма работа, нека го инсталираме на нашата локална машина.

Регистрирайте се за акаунт в Docker Hub и изтеглете безплатното приложение Docker Desktop.

С какво Docker се различава от традиционните виртуални машини?

Контейнерът работи в Linux и споделя ядрото на хост машината с други контейнери. Той работи като дискретен процес, като не отнема повече памет от всеки друг изпълним файл, което означава, че е много лек.

За разлика от това, виртуална машина (VM) изпълнява пълноценна операционна система „гост“ с виртуален достъп до хост ресурси чрез хипервизор. Като цяло виртуалните машини осигуряват среда с повече ресурси, отколкото са необходими на повечето приложения.

Когато работите с Docker, „Dockerfile“ определя какво се случва в средата във вашия контейнер. Достъпът до ресурси като мрежови интерфейси и дискови устройства е виртуализиран в тази среда, която е изолирана от останалата част от вашата система. Това означава, че трябва да картографирате портове към външния свят и да сте конкретни относно това кои файлове искате да „копирате“ в тази среда. След това обаче можете да очаквате, че компилацията на приложението ви, дефинирана в този `Dockerfile`, се държи абсолютно по същия начин, където и да се изпълнява.

Команди на Docker

За да проверите дали имате работеща версия на Docker, изпълнете следната команда:

docker --version

За да проверите дали вашата инсталация работи перфектно, опитайте да изпълните простото изображение на Docker hello-world :

docker run hello-world

Ако всичко е настроено правилно, трябва да видите изход, подобен на следния:

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

За да видите изображението на Docker на hello-world , изтеглено на вашия компютър, използвайте командата за списък на изображения на Docker:

docker image ls

Страхотно! Вече сте започнали да разработвате контейнерни приложения с Docker. Ето някои полезни основни команди на Docker:

## 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 
Контейнеризацията прави CI / CD безпроблемно. Например:
  • приложенията нямат системни зависимости
  • актуализациите могат да се изпращат към всяка част от разпределено приложение
  • плътността на ресурсите може да бъде оптимизирана.
  • С Docker мащабирането на вашето приложение е въпрос на въртене на нови изпълними файлове, а не на работа на тежки VM хостове.

Нека да изградим уеб приложение Node.js с помощта на Docker

Първото нещо, което правим, е да създадем package.jsonфайл. Можем да направим това бързо, като просто изпълним следната команда:

npm init -y 

Това създава файла по-горе с някои основни полета, които вече са попълнени или оставени празни.

Вашият файл трябва да изглежда по следния начин:

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

След това инсталираме express.js, което според официалния уебсайт е „ Бърза, непионирана, минималистична уеб рамка за Node.js “.

Правим това, като изпълняваме следната команда в терминал:

npm install express --save 

Командата по-горе добавя express.jsрамката към нашето приложение, като флагът --save действа като инструкция към приложението да се използва express.jsкато зависимост.

Сега влезте във вашия package.jsonи променете "main": "index.js"двойката ключ-стойност на следното:

"main": "app.js" 

След това създайте .gitignoreфайл, като използвате следната команда:

touch .gitignore 

След това добавете следния ред:

node_modules/ 

Това предотвратява проследяването на папката node_modules, която е от съществено значение за node.jsразработката git.

Сега добавете следния код към app.jsфайла:

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

За да стартирате това на вашата локална машина, изпълнете следната команда в папката на приложението:

npm start 

Ще намерите приложението, работещо на //0.0.0.0:8080/

Страхотно!

Честито

Поздравления за това, че стигнахте дотук

В Dockerverse

Сега създайте a Dockerfileсъс следната команда:

touch Dockerfile 

След това добавете следния код:

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

Коментарите по-горе се опитват да обяснят какво прави всяка Dockerfileкоманда.

Също така добавете dockerignoreфайл, за да предотвратите контейнеризирането на определени компоненти на приложението.

Поставете това във dockerignoreфайла:

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

Как да се разположи

Това е името, което присвоявате на вашето приложение Docker и по същество е само индикатор за версия на вашето изображение на Docker.

  • docker build -t image-name:tag .

Изпълнете това, за да получите достъп до вашия акаунт в Docker от вашия терминал.

  • docker login

Създайте хранилище в Docker Hub.

Етикет за качване в регистъра.

  • docker tag username/repository:tag

Качете маркираното изображение в системния регистър.

  • docker push username/repository:tag

Стартирайте разгърнатия контейнер Docker на вашата локална машина, като свържете неговите ПОРТОВЕ. Насочете открития порт 8080 и го задайте към порт 10203 на вашата машина.

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

Това е! Създали сте и внедрихте уеб приложение Node.js в контейнер.

Целият код по-горе може да бъде намерен в това хранилище на Github.

Първоначално публикувано тук на blog.ninte.dev