Разликата между разработката и производството/разгръщането отдавна се стеснява. Има нарастваща нужда разработчиците да разбират и овладяват не само жизнения цикъл на разработката на софтуера, но също и внедряването и поддръжката на този софтуер. Производствените среди могат да бъдат изключително трудни за поддържане: съвместимостите и зависимостите трябва да бъдат внимателно планирани, когато се преминава от среда за разработка към среда за производство. Какво ще стане, ако имаше начин просто да създадете една среда — еднократно — и да внедрите тази среда в производствената среда? Точно това е проблемът, който Docker цели да реши.

Ако не сте запознати с това как работи Docker, той работи с понятията изображения и контейнери. Изображението е като план за изграждане на контейнер: то определя как трябва да се изгради контейнер, от какви зависимости се нуждае контейнерът, какви мрежови портове да бъдат изложени, какви команди да се изпълнят, когато контейнерът е създадени и така нататък. Контейнерът по същество е екземпляр на изображение.

За да демонстрирам как работи това, първо ще създам Docker изображение. За да направя това, ще създам изображение с Dockerfile за малък сървър, който създадох с помощта на Node.js:

И съответния server.js файл:

Тук използвам базовото изображение alpine като отправна точка — малка и лека Linux дистрибуция само с най-важното. След това инсталирам Node, копирам server.js в работната директория, излагам порт 8080 от контейнера на Docker и стартирам сървъра с Node. Можем да изградим изображението, като изпълним следната команда:

docker build -t spikeburton/hello .

Тук казвам на Docker да наименува и маркира изображението с флага -t от Dockerfile в текущата директория. След изграждането на изображението трябва да можете да го видите в списъка, като изпълните командата docker images. След това можем да стартираме контейнер на изображението, като изпълним следното:

docker run -p 3000:8080 spikeburton/hello

Тук флагът -p свързва порт 8080 от Docker с порт 3000 на локалната машина. Ако отворите localhost:3000 в браузъра си, трябва да бъдете поздравени със стария стандарт Hello, World!

Въпреки че това е доста тривиален пример, надявам се, че той демонстрира силата на Docker: можем да разработим нашето приложение в среда, която след това да изпратим в производство като самостоятелен контейнер, без да е необходима истинска добавена конфигурация. Можем да изградим и тестваме нашето приложение в същата среда, в която ще работи в производството.

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

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