前端全栈必学的Dockerfile-ABC!

简介: 前端全栈必学的Dockerfile-ABC!

举个很简单的例子,我有一个Centos7的服务器,但是由于系统限制,我无法安装nodejs18…

但是!我在Docker里就可以!

Dockerfile是Docker的心脏,一个文本文件,包含了一系列的指令,用来构建一个Docker镜像。每条指令都会在镜像中创建一个层。现在,让我带来一探究竟!

Dockerfile的基础命令
  • FROM:基础镜像指令。所有Dockerfile都以一个FROM指令开始,它指定了一个已存在的镜像作为构建的基础。
  • RUN:执行命令。在当前镜像层上执行命令,并提交结果,用于创建新的镜像层。
  • CMD:容器启动命令。提供容器启动时的默认执行命令。
  • LABEL:标签。用于为镜像添加元数据。
  • EXPOSE:暴露端口。它告诉Docker容器在运行时监听的端口。
  • ENV:环境变量。设置容器内的环境变量。
  • ADDCOPY:添加文件。ADD可以解压缩和远程URL,而COPY则更适用于本地文件复制操作。
  • ENTRYPOINT:入口点。配置容器启动时运行的命令。
  • VOLUME:定义匿名卷。用于在容器和宿主机之间共享数据。
  • USER:设置用户。指定运行容器的用户名或UID。
  • WORKDIR:工作目录。设置在容器内的命令执行的当前工作目录。
  • ARG:构建参数。用于定义构建时传递给Dockerfile的变量。
  • ONBUILD:构建触发器。当一个镜像被用作另一个构建的基础时,触发指令执行。
创建一个简单的Dockerfile

让我们通过一个实际的例子:部署Node.js项目来学习Dockerfile的使用

首先,这里假设你已经有了一个package.json和一个主文件比如app.js

# 使用官方Node.js的最新LTS版本作为基础镜像
FROM node:lts

# 设置容器内部的工作目录
WORKDIR /usr/src/app

# 将package.json和package-lock.json复制到工作目录
COPY package*.json ./

# 安装项目依赖
RUN npm install

# 将本地代码复制到工作目录
COPY . .

# 告诉Docker在运行时监听3000端口
EXPOSE 3000

# 定义环境变量
ENV NODE_ENV=production

# 运行你的app.js当容器启动
CMD ["node", "app.js"]
构建与运行

现在有了一个Dockerfile,那么如何使用它呢?

你只需要构建它!

docker build -t your-username/nodejs-app .

这个命令将构建Docker镜像,并标记它为your-username/nodejs-app

接下来,运行你的容器!

docker run -p 3000:3000 -d your-username/nodejs-app

over!

结语

Dockerfile的魔力在于它的简单性和强大功能。

通过一系列简洁的指令,你可以创建一个可复制、可靠的环境,让应用的部署变得前所未有的轻松。

举个很简单的例子,我有一个Centos7的服务器,但是由于系统限制,我无法安装nodejs18…


但是!我在Docker里就可以!

Emmm…最近在学Docker、Github Action的自动化部署,下一期将会进一步讲述 Dockerfile的使用!

相关文章
|
20天前
|
Cloud Native 前端开发 JavaScript
前端开发者必看:不懂云原生你就OUT了!揭秘如何用云原生技术提升项目部署与全栈能力
【10月更文挑战第23天】随着云计算的发展,云原生逐渐成为技术热点。前端开发者了解云原生有助于提升部署与运维效率、实现微服务化、掌握全栈开发能力和利用丰富技术生态。本文通过示例代码介绍云原生在前端项目中的应用,帮助开发者更好地理解其重要性。
53 0
|
24天前
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
23天前
|
JavaScript 前端开发 测试技术
前端全栈之路Deno篇(五):如何快速创建 WebSocket 服务端应用 + 客户端应用 - 可能是2025最佳的Websocket全栈实时应用框架
本文介绍了如何使用Deno 2.0快速构建WebSocket全栈应用,包括服务端和客户端的创建。通过一个简单的代码示例,展示了Deno在WebSocket实现中的便捷与强大,无需额外依赖,即可轻松搭建具备基本功能的WebSocket应用。Deno 2.0被认为是最佳的WebSocket全栈应用JS运行时,适合全栈开发者学习和使用。
|
25天前
|
缓存 前端开发 JavaScript
前端的全栈之路Meteor篇(二):容器化开发环境下的meteor工程架构解析
本文详细介绍了使用Docker创建Meteor项目的准备工作与步骤,解析了容器化Meteor项目的目录结构,包括工程准备、环境配置、容器启动及项目架构分析。提供了最佳实践建议,适合初学者参考学习。项目代码已托管至GitCode,方便读者实践与交流。
|
24天前
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
|
24天前
|
前端开发 JavaScript 中间件
前端全栈之路Deno篇(四):Deno2.0如何快速创建http一个 restfulapi/静态文件托管应用及oak框架介绍
Deno 是由 Node.js 创始人 Ryan Dahl 开发的新一代 JavaScript 和 TypeScript 运行时,旨在解决 Node.js 的设计缺陷,具备更强的安全性和内置的 TypeScript 支持。本文介绍了如何使用 Deno 内置的 `Deno.serve` 快速创建 HTTP 服务,并详细讲解了 Oak 框架的安装和使用方法,包括中间件、路由和静态文件服务等功能。Deno 和 Oak 的结合使得创建 RESTful API 变得高效且简便,非常适合快速开发和部署现代 Web 应用程序。
|
24天前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
|
25天前
|
JavaScript 前端开发 Docker
前端的全栈之路Meteor篇(一):开发环境的搭建 -全局安装或使用容器镜像
本文介绍了如何搭建 Meteor 开发环境,包括全局安装 Meteor 工具和使用 Docker 镜像两种方法,以及创建和运行一个简单的 Meteor 项目的基本步骤。 Meteor 是一个全栈 JavaScript 框架,适用于构建实时 Web 应用程序。文章还提供了遇到问题时的解决建议和调试技巧。
|
24天前
|
JavaScript 前端开发 Serverless
前端全栈之路Deno篇:Deno2.0与Bun对比,谁更胜一筹?可能Deno目前更适合serverless业务
在前端全栈开发中,Deno 2.0 和 Bun 作为新兴的 JavaScript 运行时,各自展现了不同的优势。Deno 2.0 重视安全性和多平台兼容性,尤其是对 Windows 的良好支持和原生 TypeScript 支持;而 Bun 则以卓越的性能和简便的开发体验著称,适合快速迭代的小型项目。两者在不同场景下各具特色,Deno 更适合企业级应用和serverless,Bun 则适用于追求速度的项目。
104 1
|
24天前
|
JSON 前端开发 数据格式
前端的全栈之路Meteor篇(五):自定义对象序列化的EJSON介绍 - 跨设备的对象传输
EJSON是Meteor框架中扩展了标准JSON的库,支持更多数据类型如`Date`、`Binary`等。它提供了序列化和反序列化功能,使客户端和服务器之间的复杂数据传输更加便捷高效。EJSON还支持自定义对象的定义和传输,通过`EJSON.addType`注册自定义类型,确保数据在两端无缝传递。