docke部署nodejs程序及Dockerfile详解

news2024/10/5 16:20:43

目录

  • 参考
  • 一、Dockerfile
  • 二、部署
    • 1、程序结构
    • 2、新建Dockerfile
    • 3、新建.dockerignore
    • 4、构建镜像
    • 5、创建容器
    • 6、关闭镜像

参考

重点参考:把一个 Node.js web 应用程序给 Docker 化
Docker部署Node.js的方法步骤(nodejs docker部署)

一、Dockerfile

Dockerfile的几个核心命令

FROM

镜像的运行环境,即基础镜像是谁

MAINTAINER

镜像的维护者信息

RUN

基础镜像需要执行哪些命令

ADD

添加文件到镜像中,会自动解压,以及下载网络URL

COPY

拷贝文件或目录到镜像,类似ADD,但不会解压与下载网络URL

WORKDIR

设置工作目录,即cd命令

VOLUME

设置挂载主机目录

EXPOSE

设置容器运行时开放的端口

CMD

启动容器需要的命令

二、部署

1、程序结构

在这里插入图片描述

- web_rtc
  |-- client
  |-- node_modules
  |-- server
    |-- app.js
|-- .dockerignore
|-- .gitignore
|-- Dockerfile
|-- package.json
|-- readme.md

2、新建Dockerfile

FROM node:12

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .
EXPOSE 8082
WORKDIR /usr/src/app/server
CMD [ "node", "app.js" ]
  • FROM node:12 第一件事是定义我们需要从哪个镜像进行构建。这里我们将使用最新的 LTS(长期服务器支持版),Node 的版本号为 12。你可以从 Docker 站点 获取相关镜像:
  • WORKDIR /usr/src/app 在镜像中创建一个文件夹存放应用程序代码,这将是你的应用程序工作目录
  • COPY package*.json ./ 此镜像中 Node.js 和 NPM 都已经安装,所以下一件事对于我们而言是使用 npm 安装你的应用程序的所有依赖。请注意,如果你的 npm 的版本是 4 或者更早的版本,package-lock.json 文件将不会自动生成。
  • RUN npm install 请注意,我们只是拷贝了 package.json 文件而非整个工作目录。这允许我们利用缓存 Docker 层的优势。bitJudo 对此有一个很好的解释,请见此。 进一步说,对于生产环境而言,注释中提及的 npm ci 命令协助提供了一个更快、可靠、可再生的构建环境
  • COPY . . 在 Docker 镜像中使用 COPY 命令绑定你的应用程序
  • EXPOSE 8082 你的应用程序绑定的端口为 8082,所以你可以使用 EXPOSE 命令使它与 docker 的镜像做映射:
  • WORKDIR /usr/src/app/server 相当于cd server,因为app.js是定义在/server目录下
  • CMD [ "node", "app.js" ] 最后但同样重要的事是,使用定义运行时的 CMD 定义命令来运行应用程序。这里我们使用 node server.js 来启动你的服务器

3、新建.dockerignore

在 Dockerfile 的同一个文件夹中创建一个 .dockerignore 文件,带有以下内容:

node_modules
npm-debug.log

这将避免你的本地模块以及调试日志被拷贝进入到你的 Docker 镜像中,以至于把你镜像原有安装的模块给覆盖了。

4、构建镜像

进入到 Dockerfile 所在的那个目录中,运行以下命令构建 Docker 镜像。开关符 -t 让你标记你的镜像,以至于让你以后很容易地用 docker images 找到它。

$ cd /usr/local/nodejs/webrtc_demo
$ docker build . -t web_rtc
$ docker images
REPOSITORY                                      TAG                IMAGE ID       CREATED          SIZE
web_rtc                                         latest             28ef8e7bbc3e   25 minutes ago   922MB

5、创建容器

使用 -d 模式运行镜像将以分离模式运行 Docker 容器,使得容器在后台自助运行。开关符 -p 在容器中把一个公共端口导向到私有的端口,请用以下命令运行你之前构建的镜像:

$ docker run -p 8082:8082 --name web_rtc --net mynet -d web_rtc

把你应用程序的输出打印出来:

# Get container ID
$ docker ps

# Print app output
$ docker logs <container id>

如果你需要进入容器中,请运行 exec 命令:

# Enter the container
$ docker exec -it <container id> /bin/bash

6、关闭镜像

我们可以通过使用 kill 命令来关闭我们已经开启的镜像。这里使用到了容器的 ID, 在本示例代码中是 ecce33b30ebf。

# Kill our running container
$ docker kill <container id>
<container id>
# Confirm that the app has stopped
$ curl -i localhost:49160
curl: (7) Failed to connect to localhost port 49160: Connection refused

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux服务器启动tomcat的三种方式

直接进入主题&#xff0c;首先cd进入tomcat的bin文件夹下&#xff0c;然后可以尝试以下三种启动方式&#xff1a; 第一种&#xff08;当前会话启动&#xff09;&#xff1a; ./startup.sh 效果: 然后tomcat就在后台启动了&#xff0c;我们还可以在当前会话中继续输入其它指令…

PHP基于thinkphp的网上书店管理系统#毕业设计

本论文主要论述了如何使用php语言开发一个网上图书管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;将论述网上图书管理系统的当前背景以及系统开发的目的&#xff0c;后续章节将严格按照软…

【python】 16进制字符串转list

def splitStringToByteList(bytesString): # 拆分字符串成字节列表bytesList []for i in range(int(len(bytesString)/2)):bytesList.append(bytesString[i*2:i*22])return bytesListif __name__ __main__:print(splitStringToByteList("1E1E2AEB4ACC4C")) 结果&…

shiro key文件

​下面结合实战以及shiro的CookieRememberMeManaer的调用过程,浅谈获取shiro key文件的几种方式。 shiro key文件的获取方式:1结合Dnslog与URLDNS;2利用时间延迟或报错;3结合CookieRememberMeManaer 1结合Dnslog与URLDNS 在进行漏洞探测的时候,一般会使用ysoserial-URL…

Codeforces Round #835 (Div. 4)A.B.C.D.E.F

A. Medium Number 题目链接&#xff1a; Problem - A - Codeforces 题面&#xff1a; 题意&#xff1a; 给定三个数&#xff0c;求中间那个数的值 思路&#xff1a; 我们可以分别求出三个数的总和&#xff0c;最大值和最小值&#xff0c;在通过总和减最大值和最小值的方…

Promise(微任务)- 让你看完就懂

1. 图示 思维导图链接 https://www.zhixi.com/view/23ff2291 2. 使用promise原因 在没有promise的时候&#xff0c;一直使用setTimeout函数&#xff0c;这样就会造成回调地狱。 3. 基本状态 promise 有三种状态 pending&#xff08;此时 promise还没有调用完成&#xff09…

改进花朵授粉算法的无线传感器网络部署优化(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

某汽车座椅进行的头冲吸能实验的仿真计算

本案例运用hypermesh和lsdyna联合仿真&#xff0c;主要是针对某座椅进行的头冲吸能实验的仿真计算。这个工况考察座椅背部的塑料件的破坏情况&#xff0c;以及头部模块的加速度情况&#xff0c;达到保护人头部的效果。 本案例用户可以学习到&#xff1a; 1、螺栓预紧力的施加…

IntelliJ IDEA + spring-boot+mysql简单实现获取数据库数据接口例子

一、新建一个spring-boot项目 demo 项目结构与文件的含义&#xff1a; 二、项目编译入口代码 DemoApplication.java SpringBootApplication //EnableAutoConfiguration(exclude{DataSourceAutoConfiguration.class}) public class DemoApplication {public static void main(…

Linux系统编程

Linux系统中所见皆文件 bin&#xff1a;所存放二进制可执行文件 boot&#xff1a;存放开机启动程序 dev&#xff1a;存放设备文件 home&#xff1a;存放用户 etc&#xff1a;用户信息和系统配置文件 lib&#xff1a;库文件 root&#xff1a;管理员宿主目录&#xff08;家目录&…

Linux计划任务管理,网络管理

一&#xff0c;计划任务管理&#xff1a; 任务管理很宽泛&#xff0c;这里是指的计划任务管理&#xff0c;在指定的时间执行。 at命令 &#xff1a; 由atd守护进程来执行&#xff0c;atd进程会定期检查系统上的 /var/spool/at 目录&#xff0c;获取at命令写入的任务。 &#x…

Linux CentOS系统安装mysql8.0.31(tar方式)

Linux系统安装mysql8.0.31&#xff08;TAR方式&#xff09; 文章目录Linux系统安装mysql8.0.31&#xff08;TAR方式&#xff09;安装包的下载安装Mysql8.0.31注册成系统服务并自启动问题总结启动异常一简单使用安装包的下载 选择的是 MySQL Community Server 进行下载 官网下…

第4季1:将AR0130摄像头更换为OV9712摄像头

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、SoC对Sensor的支持情况 在海思SDK的Hi3518E V200R001C01SPC030\00.hardware\chip\document_cn目录下&#xff0c;我们重点关注这两个文档&#xff1a;《Hi3518EV200经济型HD IP Camera SoC产品…

wordpress插件-wordpress蜘蛛记录插件

wordpress蜘蛛插件&#xff0c;我们为什么要wordpress装蜘蛛插件&#xff0c;一个合格的SEO人员必须懂得分析网站的蜘蛛情况&#xff0c;wordpress蜘蛛插件可以让我们分析出各大搜索引擎蜘蛛的访问间隔频率&#xff0c;以及最受蜘蛛喜爱的页面&#xff0c;让你精确地分析搜索引…

Unity DOTS学习 前置知识(二)

ECS 架构和一些专用术语 Entity-Component-System 实体组件系统(ECS )架构遵循组合优于继承的原则面向数据设计弱耦合常被应用在游戏开发上 本质&#xff1a;组合的是数据数组而非对象数组 ECS示例图&#xff1a; Entity 虽然叫做实体&#xff0c;但是并非对象或容器&…

[网络工程师]-应用层协议-FTP

文件传输协议&#xff08;File Transfer Protocol&#xff0c;FTP&#xff09;简称为“文件协议”&#xff0c;用于在Internet上控制文件的双向传输。客户上传文件时&#xff0c;通过服务器20端口建立的连接是建立在TCP之上的数据连接&#xff0c;通过服务器21号端口建立的连接…

01 - 进阶操作系统(BIOS)

---- 整理自狄泰软件唐佐林老师课程 1. BIOS - Base input & Output system BIOS是上电后第一个运行的程序 BIOS首先检测硬件状态&#xff0c;检测通过后立即进行硬件初始化工作 BIOS会在内存中建立中断向量表&#xff08;提供硬件访问的方法&#xff09; BIOS最后将控制…

优思学院|韦伯的组织理论在今天还有意义吗?

韦伯&#xff08;Max Weber&#xff09;是提出官僚组织理论的一个德国杰出社会学家&#xff0c;他认为“官僚组织方式”&#xff08;Bureaucracy&#xff09;是理想的企业组织形态。 “官僚组织方式”是一种组织管理的方式&#xff0c;特征是组织内各人的职位&#xff08;Posi…

卡莱特在创业板上市:IPO首日跌破发行价,周锦志为实际控制人

12月1日&#xff0c;卡莱特云科技股份有限公司&#xff08;下称“卡莱特”&#xff0c;SZ:301391&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;卡莱特共计发行1700万股&#xff0c;发行价为96.00元/股&#xff0c;募资总额约为16.32亿元&#xff0c;募资净额约…

国产自研、安全、高可用——袋鼠云大数据基础平台EasyMR筑基企业数字化转型

对于科技领域&#xff0c;只有自己掌握核心关键技术&#xff0c;实现自主可控&#xff0c;才能摆脱越来越频繁的“卡脖子事件”&#xff0c;保证企业和国家信息安全。 俗话说“基础不牢&#xff0c;地动山摇“。大数据基础平台什么&#xff1f;是打地基的&#xff0c;是重中之…