Разликата между разработката и производството/разгръщането отдавна се стеснява. Има нарастваща нужда разработчиците да разбират и овладяват не само жизнения цикъл на разработката на софтуера, но също и внедряването и поддръжката на този софтуер. Производствените среди могат да бъдат изключително трудни за поддържане: съвместимостите и зависимостите трябва да бъдат внимателно планирани, когато се преминава от среда за разработка към среда за производство. Какво ще стане, ако имаше начин просто да създадете една среда — еднократно — и да внедрите тази среда в производствената среда? Точно това е проблемът, който 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!
Кодът, който се вижда в тази публикация, може да бъде намерен тук.