Docker 101 - як перейти від створення до розгортання

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

Що таке Docker?

Простіше кажучи, Docker - це інструмент, який дозволяє розробникам створювати, розгортати та запускати програми в контейнерах. Контейнеризація - це використання контейнерів Linux для розгортання програм.

То чому Docker такий чудовий, і чому ми, розробники, повинні навіть турбуватися про його вивчення?

ПричинаПояснення
ГнучкаНавіть найскладніші програми можна контейнеризувати.
ЛегкийКонтейнери використовують і використовують спільне ядро ​​хоста.
ВзаємозамінніВи можете розгортати оновлення та оновлення на льоту.
ПортативнийВи можете будувати локально, розгортати в хмарі та запускати де завгодно.
МасштабованаВи можете збільшувати та автоматично розповсюджувати копії контейнерів.
УкладаютьсяВи можете складати послуги вертикально та на льоту.

Тепер, коли ми знаємо, чому Docker - це така велика справа, давайте встановимо її на нашій локальній машині.

Зареєструйтеся в обліковому записі на Docker Hub і завантажте безкоштовну програму Docker Desktop.

Чим Docker відрізняється від традиційних віртуальних машин?

Контейнер виконується в Linux і спільно використовує ядро ​​хост-машини з іншими контейнерами. Він працює як дискретний процес, не займаючи більше пам'яті, ніж будь-який інший виконуваний файл, що означає, що він дуже легкий.

На відміну від цього, віртуальна машина (ВМ) запускає повномасштабну “гостьову” операційну систему з віртуальним доступом до ресурсів хосту через гіпервізор. Загалом, віртуальні машини забезпечують середовище з більшою кількістю ресурсів, ніж потрібно більшості додатків.

При роботі з 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 із привітним світом , завантажене на ваш комп’ютер, скористайтеся командою списку зображень 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 масштабування програми - це питання закручування нових виконуваних файлів, а не запуску важких хостів ВМ.

Давайте створимо веб-програму 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/

Чудово!

Congratulations

Вітаю з тим, що пройшов так далеко

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

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