load-net

Jenkins-install

Mar 15th, 2023 (edited)
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.27 KB | None | 0 0
  1. Node.js
  2. ГЛАВНАЯО ПРОЕКТЕЗАГРУЗКАДОКУМЕНТАЦИЯПРИСОЕДИНИТЬСЯБЕЗОПАСНОСТЬCERTIFICATIONНОВОСТИ
  3. Dark Theme Switcher
  4. Language Switcher
  5. Документация
  6. ES6 и выше
  7. v18.15.0 API LTS
  8. v19.8.0 API
  9. Руководства
  10. Зависимости
  11. Докеризация веб-приложения Node.js
  12. Цель этого примера — показать, как поместить приложение Node.js в Docker-контейнер. Это руководство предназначено для разработки, но не для прямого использования в продакшене. Мы также предполагаем, что вы успешно установили Docker на свой ПК и имеете базовое представление о структуре Node.js приложения.
  13.  
  14. В первой части руководства мы создадим простое Node.js приложение, затем мы сделаем для него docker-образ, и, наконец, инициализируем экземпляр контейнера из этого образа.
  15.  
  16. Docker позволяет вам упаковать приложение вместе с его окружением и всеми зависимостями в "коробку", называемую контейнером. Обычно контейнер состоит из приложения, работающего в упрощенной версии ОС Linux. Образ — это шаблон для контейнера, контейнер — это работающий экземпляр образа.
  17.  
  18. Создание приложения Node.js
  19. Для начала создадим новую директорию, в которой будут находиться все файлы приложения. В этой директории создайте файл package.json, в котором описано приложение и его зависимости:
  20.  
  21. {
  22. "name": "docker_web_app",
  23. "version": "1.0.0",
  24. "description": "node.js on docker",
  25. "author": "first last <[email protected]>",
  26. "main": "server.js",
  27. "scripts": {
  28. "start": "node server.js"
  29. },
  30. "dependencies": {
  31. "express": "^4.16.1"
  32. }
  33. }
  34. После создания файла package.json, выполните команду npm install. Если вы используете npm версии 5 или выше, это также создаст файл package-lock.json, который будет скопирован в ваш docker-образ.
  35.  
  36. Далее создайте файл server.js, который определяет веб-приложение на основе фреймворка Express.js:
  37.  
  38. 'use strict';
  39.  
  40. const express = require('express');
  41.  
  42. // константы
  43. const port = 8080;
  44. const host = '0.0.0.0';
  45.  
  46. // приложение
  47. const app = express();
  48. app.get('/', (req, res) => {
  49. res.send('Hello World');
  50. });
  51.  
  52. app.listen(PORT, HOST, () => {
  53. console.log(`Running on http://${HOST}:${PORT}`);
  54. });
  55. Далее мы рассмотрим, как можно запускать это приложение внутри Docker-контейнера, используя официальный образ Docker'а. Сначала давайте создадим Docker-образ с нашим приложением.
  56.  
  57. Создание файла Dockerfile
  58. Создайте пустой файл с именем Dockerfile:
  59.  
  60. touch Dockerfile
  61. Откройте этот файл в вашем любимом текстовом редакторе.
  62.  
  63. Первое, что нам надо сделать — определить базовый образ, который будет взят за основу. Мы будем использовать образ node последней версии LTS* (версии с долгосрочной поддержкой) — 12, доступный на Docker Hub.
  64.  
  65. * Прим. переводчика: на момент написания статьи.
  66.  
  67. FROM node:12
  68. Затем создадим директорию для кода приложения внутри образа. Это будет рабочая папка для вашего приложения.
  69.  
  70. # создание директории приложения
  71. WORKDIR /usr/src/app
  72. Образ, который мы используем, поставляется с уже предустановленным Node.js и NPM. Поэтому мы можем просто установить зависимости приложения с помощью команд npm. Обратите внимание, если вы используете npm 4 или ниже, файл package-lock.json не будет сгенерирован.
  73.  
  74. # установка зависимостей
  75. # символ астериск ("*") используется для того чтобы по возможности
  76. # скопировать оба файла: package.json и package-lock.json
  77. COPY package*.json ./
  78.  
  79. RUN npm install
  80. # Если вы создаете сборку для продакшн
  81. # RUN npm ci --only=production
  82. Обратите внимание, что вместо того, чтобы копировать весь рабочий каталог, мы копируем только файл package.json. Это позволяет воспользоваться кэшированием слоев в Docker. Здесь bitJudo дал хорошее объяснение того, как это работает. Более того, команда npm ci, указанная в комментарии, позволяет создавать более быстрые, надежные, воспроизводимые сборки для продакшена. вы можете прочесть больше об этой команде здесь.
  83.  
  84. Чтобы отправить исходный код вашего приложения внутрь Docker-образа, используйте директиву COPY.
  85.  
  86. # копируем исходный код
  87. COPY . .
  88. Сервер привязан к 8080 порту, поэтому мы будем использовать инструкцию EXPOSE, чтобы проинформировать Docker о том, что в контейнере имеется приложение, прослушивающее этот порт.
  89.  
  90. EXPOSE 8080
  91. Последняя, но не менее важная команда CMD содержит все необходимые переменные среды и инструкции для запуска приложения. Здесь мы просто используем node server.js для запуска.
  92.  
  93. CMD [ "node", "server.js" ]
  94. Ваш Dockerfile теперь должен выглядеть примерно так:
  95.  
  96. FROM node:12
  97.  
  98. # создание директории приложения
  99. WORKDIR /usr/src/app
  100.  
  101. # установка зависимостей
  102. # символ астериск ("*") используется для того чтобы по возможности
  103. # скопировать оба файла: package.json и package-lock.json
  104. COPY package*.json ./
  105.  
  106. RUN npm install
  107. # Если вы создаете сборку для продакшн
  108. # RUN npm ci --only=production
  109.  
  110. # копируем исходный код
  111. COPY . .
  112.  
  113. EXPOSE 8080
  114. CMD [ "node", "server.js" ]
  115. Файл .dockerignore
  116. Создайте файл .dockerignore в той же директории, что и Dockerfile, со следующим содержимым:
  117.  
  118. node_modules
  119. npm-debug.log
  120. Это предотвратит копирование локально установленных модулей и дебаг-логов в Docker-образ и возможную перезапись модулей установленных внутри образа.
  121.  
  122. Сборка образа
  123. Перейдите в директорию, в которой находится ваш Dockerfile и запустите следующую команду, чтобы собрать Docker-образ. Флаг -t позволяет поставить тэг к вашему образу, чтобы его позже было проще найти при помощи команды docker images:
  124.  
  125. docker build . -t <your username>/node-web-app
  126. Созданный образ теперь будет отображаться в списке всех образов:
  127.  
  128. $ docker images
  129.  
  130. # пример вывода
  131. repository tag id created
  132. node 12 1934b0b038d1 5 days ago
  133. <your username>/node-web-app latest d64d3505b0d2 1 minute ago
  134.  
  135. Запуск образа
  136. Запуск образа с флагом -d позволяет контейнеру работать в фоновом режиме. Флаг -p перенаправляет публичный порт на приватный порт внутри контейнера. Запустите образ, который вы ранее создали:
  137.  
  138.  
  139. docker run -p 49160:8080 -d node
  140.  
  141.  
  142. Отобразите логи вашего приложения:
  143.  
  144. # отобразить все контейнеры, чтобы получить id нужного нам
  145. $ docker ps
  146.  
  147. # отобразить логи
  148. $ docker logs <container_id>
  149.  
  150. # пример логов
  151. running on http://localhost:8080
  152. Если вам нужно попасть внутрь контейнера, используйте команду exec:
  153.  
  154. # войти в контейнер в интерактивном режиме
  155. $ docker exec -it <container id> /bin/bash
  156. Проверка
  157. Чтобы проверить ваше приложение, используйте публичный порт, к которому привязан контейнер:
  158.  
  159. $ docker ps
  160.  
  161. # пример вывода
  162. id image command ... ports
  163. ecce33b30ebf <your username>/node-web-app:latest npm start ... 49160->8080
  164. В примере выше docker связал порт 8080 внутри контейнера с портом 49160 на вашем компьютере.
  165.  
  166. Вы можете сделать запрос к вашему приложению с помощью утилиты curl (установите ее, если требуется с помощью команды: sudo apt-get install curl):
  167.  
  168. $ curl -i localhost:49160
  169.  
  170. http/1.1 200 ok
  171. x-powered-by: express
  172. content-type: text/html; charset=utf-8
  173. content-length: 12
  174. etag: w/"c-m6twob/y57lesdjquheb1p/qtv0"
  175. date: mon, 13 nov 2017 20:53:59 gmt
  176. connection: keep-alive
  177.  
  178. hello world
  179. Надеемся, что эта инструкция помогла вам настроить и запустить простое приложение Node.js с помощью Docker.
  180.  
  181. docker tag <image_id> <repository_name>:<tag>`, где `<image_id>` - это ID образа, `<repository_name>` - это имя репозитория, которое вы хотите задать, и `<tag>`
  182.  
  183.  
  184. docker ps -a
  185. docker stop $(docker ps -a -q)
  186. docker rm $(docker ps -a -q)
  187. docker images
  188. docker rmi $(docker images -q)
  189. docker system prune -f
  190. df -h
  191. Если чет найти
  192. find / -name jobs -print
  193.  
  194. Войти в баш докера
  195. docker exec -it 73a0d8d937c9 bash
  196.  
  197.  
  198. Это для докер хаба
  199.  
  200. docker login -u loadnet
  201. dckr_pat_3N_fMg4BndNlJRqHxU1veJFGcUQ
  202. docker push loadnet/noda
  203.  
  204.  
  205. Убьет запущенный контейнер
  206. docker-compose down -v
  207. docker-compose up -d
  208.  
  209. ============================================================================================================
  210.  
  211. FROM node:15 AS builder
  212.  
  213. WORKDIR /usr/src/app
  214.  
  215. COPY package.json package-lock.json ./
  216. RUN npm install
  217.  
  218. COPY . .
  219. RUN npm run build
  220.  
  221. FROM node:15
  222.  
  223. WORKDIR /usr/src/app
  224.  
  225. COPY package.json package-lock.json ./
  226. RUN npm install --only=production
  227.  
  228. COPY --from=builder /usr/src/app/dist ./dist
  229.  
  230. EXPOSE 9090
  231. CMD [ "node", "dist/server.js" ]
  232.  
  233. ============================================================================================================
  234. FROM node:15
  235.  
  236. # создание директории приложения
  237. WORKDIR /usr/src/app
  238.  
  239. # установка зависимостей
  240. # символ астериск ("*") используется для того чтобы по возможности
  241. # скопировать оба файла: package.json и package-lock.json
  242. COPY package.json package-lock.json ./
  243. RUN npm install
  244. RUN npm ci --only=production
  245. RUN npm i -g forever
  246. RUN npm run build
  247. RUN npm fight
  248.  
  249. # копируем исходный код
  250. COPY . .
  251.  
  252. EXPOSE 9090
  253. CMD [ "node", "server.js" ]
  254. #CMD [ "npm", "start" ]
  255. #CMD [ CMD "forever", "/usr/src/app/packagejson.js" ]
  256.  
  257. ============================================================================================================
  258. docker build -t loadnet/test .
  259.  
  260. docker run -p 9090:9090 -d loadnet/test
  261.  
  262. curl -i localhost:9090/hello
  263.  
  264. 10.20.7.115/26
  265. PROD_JEN
  266.  
  267. mkdir -p ~/.ssh
  268. echo ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgcE2+5a3TRnAMCXiaIkIM0Mhy+7GItx5MQeNcRMzspImShvcAhpf47XDR5/H5NaZTfaMEqmBqCfe9Vkjuv2VAMinyt5KjAn0YVsSVV9dto5aEXX9u3gHedhXkF6PoxH9QUKxkpovS0td5zblQNpFqpFGqmPLkWrRi2CVPvbDMjkv2tQg+mk1hyDQqmXdLI/pU2ujyamoqYE4l0ps/pM6bb+hriQz1iN4FDOMCru+n4hy7lUClwUZjk80ddCRDyetdvfZgi34306weHRGjKC7ssimiWf17cY97jGHGyb01pmD1qCXsyzjVXykZIWifRoJAZqNcD6Lz5 rsa-key-20230316>> ~/.ssh/authorized_keys
  269.  
  270. 10.20.7.121/26
  271. TEST_JEN
  272.  
  273. mkdir -p ~/.ssh
  274. echo ssh-rsa
  275. AAAAB3NzaC1yc2EAAAADAQABAAABAQCKiDRDJJiUGP++xxri5aEbTatcBEq0Qc6Ch7VL3A1/Cy5VARA+bTZC7ZsTe/A4kRtVpEnKP+gDODusJrdsreAsYc5zpRUK6jubnhJPCqeeq681JXoSStq+TBEsuKbd8O+Q2lCR/7LFwufoOOAWO9mIFdr5gptEw2y4Jc5sosOSL2COlkNcXdmU62Ch4sIpYm3DIOndVyVsl8X0B9loeBn7p6tPKMIkQiUZHQb32juXzCux11+bDZytiMxNd/R3E1LiQsMRj3YXW7HD1RKzOcWPM0Mn3/+0kZYgWe8fbSginNzVW50wXnwjU3SKiX37DphOHtDBq rsa-key-20230316>> ~/.ssh/authorized_keys
  276.  
  277. systemctl restart sshd
  278.  
  279. echo "---Build Started---"
  280. cat <<EOF > index.html
  281. <html>
  282. <body bgcolor=green>
  283. <centr>
  284. <h2><font color=yellow>Hello from build test</font></h2>
  285. <font color=blue>load.sytes.net</font>
  286. </centr>
  287. </body>
  288. </html>
  289. EOF
  290. echo "---Build Finished---"
Advertisement
Add Comment
Please, Sign In to add comment