Об этом приложении узла
Это приложение содержит Package.json, Server.js и файл .gitignore, которые достаточно просты, чтобы их можно было легко сделать.
.gitignore
node_modules/*
Package.json
{"name": "docker-dev", "version": "0.1.0", "docker dev", "зависимости": {"connect-redis": "~ 1.4.5", "Express": "~ 3.3.3", "hierdis": "~ 0.1.15", "Redis": "~ 0.8.4"}}}}}}}}}}}}}}}}}}}}}}}Server.js
var express = require ('express'), app = express (), redis = require ('redis'), redisstore = require ('connect-redis') (express), server = require ('http'). createServer (app); app.configure (function () {app.use (express.coukieparser ('keyboard-cats-catse-scat-kats'); Redisstore ({host: process.env.redis_host || 'localhost', port: process.env.redis_port || 6379, db: process.env.redis_db || 0}), cookie: {истекает: false, maxage: 30 * 60 * 60 * 1000});}); res.json ({status: "ok"});}); var port = process.env.http_port || 3000; server.listen (port); console.log ('прослушивание на порту' + порт);Server.js тянет все зависимости и запускает конкретное приложение. Это конкретное приложение установлено для хранения информации о сеансе в Redis и разоблачает конечную точку запроса, которая будет отвечать на сообщение о статусе JSON. Это все очень стандартное.
Обратите внимание, что информация о соединении для Redis может быть переписывается с использованием переменных среды - это будет играть роль в более поздней миграции от Dev Environment Dev в производственную среду Prod.
Файл Docker
Для потребностей в разработке у нас будет Redis и Node Run в том же контейнере. Для этого мы будем использовать DockerFile для настройки этого контейнера.
Dockerfile
От dockerfile / ubuntumaintainer abhinav ajgaonkar <[email protected]># install redisrun / apt -get -y -qq Установить Python Redis -server# indeterun / cd / opt && / wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz &&/tar -xzf node-v0.10.28-linux-x64.tar.gz &&/mv node-v0.10.28-linux-x64.tar.gz &&/mv node-v0.10.28-x64. /opt/node/bin/*. && /rm -f /opt/node-v0.10.28-linux-x64.tar.gz# Установите рабочую каталорию workworkdir /srccmd [" /bin /bash"]
Давайте поймем это один за другим,
От Dockerfile/Ubuntu
На этот раз Docker предлагается использовать изображение Dockerfile/Ubuntu, предоставленное Docker Inc. в качестве эталона изображения для построения.
БЕГАТЬ /
apt -get -y -qq установить Python Redis -Server
Изображение. Это предложение установит Python и Redis-Server. Сервер REDIS необходим, потому что мы будем хранить в нем информацию сеанса, и необходимость Python заключается в том, что он может быть встроен в расширение C, требуемое модулем Node Redis через NPM.
Run /cd /opt && /wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz && /tar -xzf node-v0.10.28-linux-x64.tar.gz && /mv node-v0.10.28-x64.tar.gz && /mv node-v0.10.28-linux-x64.tar.gz && /mv node-v0.10.28 Node-V0.10.28-Linux-X64 Node &&/cd/usr/local/bin &&/ln -s/opt/node/bin/*. && /rm -f /pt/node-v0.10.28-linux-x64.tar.gz
Это загружает и извлекает 64-разрядную бинарию Nodejs.
Workdir /src
Это предложение сообщит Docker, что после начала контейнера он должен сделать CD /SRC один раз, прежде чем выполнить вещи, указанные в свойстве CMT.
Cmd ["/bin/bash"]
В качестве последнего шага, запустить /bin /bash.
Создавать и запустить контейнеры
Теперь, когда написан файл Docker, давайте создадим изображение Docker.
Docker Build -t Sqldump/Docker -Dev: 0.1.
Как только изображение будет построено, мы можем запустить контейнер, используя следующее оператор:
Docker Run -i -t - -rm / -p 3000: 3000 / -v `pwd`: / src / sqldump / docker -dev: 0.1
Давайте посмотрим на то, что происходит в команде Docker Run.
-Я запустит контейнер в интерактивном режиме (по сравнению с -d находится в отдельном режиме). Это означает, что после окончания интерактивного сеанса контейнер выйдет.
-Т назначит псевдо-тти.
--RM удалит контейнер и его файловую систему при выходе.
-P 3000: 3000 будет пересылать порт 3000 на хосте в порт 3000 на контейнере.
-v `pwd`:/src
Это предложение установит текущий рабочий каталог в /src в контейнере хоста (например, наш файл проекта). Мы вешаем текущий каталог в качестве тома вместо использования команды ADD в DockerFile, так что любые модификации, которые мы вносят в текстовом редакторе, можно сразу же увидеть в контейнере.
SQLDUP/Docker-DEV: 0.1-это имя и версия изображения Docker, которое будет запускать. Это то же самое, что и название и версия, которую мы использовали для создания изображения Docker.
Поскольку DockerFile указывает CMD ["/bin/bash"], как только контейнер будет запущен, мы войдем в среду оболочки Bash. Если команда Docker Run успешно выполнена, она будет выглядеть следующим образом:
Начать развитие
Теперь контейнер работает, прежде чем мы начнем писать код, нам нужно будет разобраться в некоторых стандартных вещах, не связанных с докером. Во -первых, нам нужно использовать следующее оператор для запуска сервера Redis в контейнере:
Сервис Redis-Server Start
Затем установите зависимости проекта и Nodemon. Nodemon наблюдает за изменениями в файле проекта и вовремя перезапускает сервер.
npm installnpm install -g nodemon
Наконец, запустите сервер со следующей командой:
Nodemon Server.js
Теперь, если вы перейдете на http: // localhost: 3000 в своем браузере, вы должны увидеть что -то вроде этого:
Давайте добавим еще одну конечную точку, например, Server.js для моделирования процесса разработки:
app.get ('/hello/: name', function (req, res) {res.json ({hello: req.params.name});});Вы увидите, что Nodemon обнаружил внесенные вами изменения и перезапустили сервер:
А теперь, если вы перемещаете свой браузер по http: // localhost: 3000/hello/world, вы увидите следующий ответ:
Производственная среда
Контейнеры в текущем состоянии далеко не выпущены в качестве продуктов. Данные в Redis больше не будут стойкими при перезапуске через контейнеры. Например, если вы перезапустите контейнер, все данные сеанса будут уничтожены. То же самое произойдет, когда вы уничтожаете контейнер и откроете новый контейнер, который, очевидно, не то, что вы хотите. Я расскажу об этой проблеме в продуктом контента второй части.