当前位置: 首页 > 编程笔记 >

Docker使用编写dockerfile启动node.js应用

隆谦
2023-03-14
本文向大家介绍Docker使用编写dockerfile启动node.js应用,包括了Docker使用编写dockerfile启动node.js应用的使用技巧和注意事项,需要的朋友参考一下

编写 Dockerfile

以 express 自动创建的目录为例,目录结构如下:

├── /bin
│  └── www
├── /node_modules
├── /public
├── /routes
├── /views
├── package-lock.json
├── package.json
├── ecosystem.config.js
├── app.js
└── Dockerfile

在项目目录下新建 Dockerfile 文件

FROM node:10.15
MAINTAINER sunhengzhe@foxmail.com
COPY . /app/
WORKDIR /app
RUN npm install pm2 -g
EXPOSE 8003
CMD ["pm2-runtime", "ecosystem.config.js"]
  • FROM 指定基础镜像为 node 的 10.15 版本(node 官方版本可在此查看)
  • MAINTAINER 说明镜像的维护者
  • COPY 命令将宿主机的文件拷贝到镜像中,格式为 COPY [--chown=<user>:<group>] <源路径>... <目标路径>,这里将项目目录下的所有文件都拷贝到镜像中的 /app 目录下。如果目标路径不存在,docker 将自动创建。
  • WORKDIR 用来指定工作目录,即是 CMD 执行所在的目录。
  • RUN 命令用来执行 shell 命令,这里用来安装 pm2
  • EXPOSE 命令用来 声明 运行时容器提供服务端口,但要注意运行时并不会开启这个端口的服务。这个命令主要是帮助使用者理解这个镜像服务的守护端口,以方便配置映射;另外在使用随机端口映射时,会自动随机映射 EXPOSE 的端口
  • CMD 是默认的容器主进程的启动命令

构建镜像

在项目目录下执行

docker build -t express-app:v1 .

如果构建成功,查看镜像列表

docker images

应该会输出镜像 express-app:v1

运行容器

docker run -d -p 8003:3000 --name="express-app" express-app:v1

docker run 是 docker create 和 docker start 两个命令的简写。

  • -d 即 --detach,代表让容器后台运行。
  • -p 指定宿主机和容器的端口映射,左边为宿主机的端口,右边为容器的端口,也就是说访问宿主机的 8003 端口,会映射到容器内的 3000 端口。
  • --name 设置容器别名,如果不指定,docker 会随机生成一个名字,比如 tender_swirles 之类的。

执行

docker ps

正常展示如下

添加 -a 参数可以查看所有已启动容器。

进入容器

如果要进入容器进行操作,执行下面命令

docker exec -it express-app bash

-i 与 -t 一般结合使用,-i 启动交互模式,-t 指定需要分配终端,可以自行尝试不传其中一个的效果。

与 exec 类似的还有 attach 命令,命令为 docker attach express-app,但从这个 stdin 中 exit,会导致容器的停止,所以推荐使用 exec 命令。

关闭操作

停止容器

docker stop express-app

删除容器

docker rm express-app

如果删除时容器还在运行,需要加上 -f 参数

删除镜像

docker rmi express-app:v1

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 应用程序开发人员使用composer-clientnpm模块以编程方式连接到已部署的业务网络,创建、读取、更新、删除资产和参与者,以及提交交易。如果应用程序需要能够部署或管理业务网络,则可以使用composer-adminnpm模块。 示例landregistry.js文件包含一个代表土地注册的类,并包含列出土地权证、添加默认权证和提交交易的方法。这已经使用JavaScript类实现了; 然而,你

  • 我试图实现的是:我想在一个容器中缓存当前的users目录,以便在构建另一个容器时使用它们。 以下是的内容: 在我的服务Dockerfile中,我有以下内容: docker compose没有将服务中的路径视为与docker-compose.yml相关的路径,而是假设它与路径相关。是否可以让docker-compose从与docker-compose.yml相同的目录加载并按照我的方式设置上下文?

  • 我有一个docker撰写与3服务:配置服务器,cpo事件和cpo执行者。我希望只有当配置服务器准备就绪时才启动服务,因为服务需要配置服务器服务中的配置文件。 docker-compose.yml: 依赖于、链接、healthcheck,没有任何东西可以保证这两个服务(cpo executor、cpo event)仅在配置服务器就绪后启动。

  • 遇到一个问题,未在docker容器文件中初始化。此外,人们将附加到一个预先存在的容器上,从而造成搜索障碍。这不是我想要做的。 我试图做的是运行两个“应用程序”,它们需要同时相互对话。这个想法是为了避免使用docker compose来解决这个特殊问题。 我可以轻松地将这两个命令作为后台进程运行。 但是,我宁愿让它们在一个tmux会话中运行,当图像运行时,我可以附加到该会话。 在构建过程中,如何在d

  • 本文向大家介绍docker中编译nodejs并使用nginx启动,包括了docker中编译nodejs并使用nginx启动的使用技巧和注意事项,需要的朋友参考一下 1.编译Nodejs 要进行Nodejs编译,使用docker就变得非常的方便了。 首先从hub.docker.com下载最新的镜像。https://hub.docker.com/_/node/ 一般的项目都使用的是node6的镜像。

  • 问题内容: 我正在使用可写流使用node.js编写一个大文件: 我想知道这种方案在不使用事件的情况下是否安全?如果不是(我认为是这种情况),那么将任意大数据写入文件的模式是什么? 问题答案: 这就是我最终做到的方式。背后的想法是创建实现ReadStream接口的可读流,然后使用方法将数据通过管道传输到可写流。 可以从猫鼬QueryStream中获取类的示例。