使用docker打包项目的流程(小白可懂)

news2024/12/29 9:49:28

🎉 前言

这并不完全是一个正经的教程,而是根据我的学习经验总结出来的一个模版,大家可以尝试一下,权当了解一下项目打包的流程。

🎉 克隆演示项目

我在我的GitHub仓库里已经上传了演示项目,大家可以使用以下命令克隆到本地:

git clone git@github.com:Yuanyi362102/learn-docker.git
cd learn-docker

🎉 编写Dockerfile文件

Dockerfile文件是用于构建镜像的关键文件,我们在执行创建镜像的指令时,docker会自动寻找指定目录下的Dockerfile文件,并读取和执行相关指令。

现在让我们用VScode打开这个项目,可以看到项目结构如图所示:

在这里插入图片描述
打开Dockerfile文件,查看里面的内容如下:

FROM  node:11
ADD . /app
WORKDIR /app
RUN npm install && npm install -g nodemon
CMD nodemon app.js  

简单解释一下。

  1. FROM语句代表我们要创建的镜像是基于基础镜像Node,版本是11。
  2. ADD语句代表将当前项目的根目录,也就是TEST目录添加到容器的/app目录下
  3. WORKDIR指定了工作目录是/app
  4. RUN代表在容器创建(对应docker build阶段)的过程中执行的命令,npm install 意思是安装项目依赖,npm install -g nodemon 意思是全局安装nodemon,这个工具可以帮助我们在后续更新项目代码后无需重启容器就能直接看到更改效果。
  5. CMD代表在容器运行时执行(对应于docker run阶段)的命令,意思是运行app.js这个文件

🎉 构建镜像

使用下面这行命令构建镜像:

docker build -t my-node-app:v1 .

解释一下,这条命令的主干其实就是docker build my-nder-app,意思是构建一个叫做“my-node-app”的镜像,-t是可选参数代表创建tag,即创建标签,“:v1"代表标签为"v1”,最后的"."代表Docker会从当前目录读取Dockerfile文件。

🎉 创建容器

使用下面这行命令来创建容器:

 docker run -p 9564:9000 --name testProject -v path:/app my-node-app:v1

这条指令的核心其实就是docker run my-node-app:v1, “-p"代表port,指定容器的9000端口映射到宿主机的9654端口,”--name"是将创建的镜像名称指定为testProject,“-v"指定挂载的数据卷volume,”path“是你项目的绝对路径(根据你的电脑实际情况而定),”:app"就是将刚才Dockerfile中在容器里创建的app目录(同时也是工作目录)映射到数据卷,这样当容器关闭之后,数据就可以保存到本地,同时项目在本地的修改也能即时反馈给容器。

🎉 检验效果

如果你成功创建容器,你的终端将会输出如图所示的回显信息:
在这里插入图片描述打开docker的桌面客户端(没有的话可以去安装一下,安装链接:Docker官网下载地址),可以看到以下画面:
在这里插入图片描述点击链接,会跳转到项目地址,你将会看到以下画面
在这里插入图片描述在地址栏,分别尝试输入localhost:9564/sayhellolocalhost:9564/sayok,可以看到如下画面:

在这里插入图片描述
在这里插入图片描述在本地项目里面修改一下项目文件,看是否可以不用重启容器就生效

在这里插入图片描述
再次访问localhost:9564,会看到返回的信息已经改变(如果你没有在地址栏重新输入地址,而是在旧页面中,要点击浏览器刷新按钮才会更改)。
在这里插入图片描述

🎉 尾声

至此,简单项目打包的流程就结束了,事实上真正的项目打包肯定会涉及到多个容器,多个容器项目部署又要用到docker-compose相关的知识,这些都是后话,有时间后续我会继续推出关于docker-compose相关的文章,大家可以期待一下,OK,今天的分享就到这里,我是秋窗,我们下期再见👋。

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

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

相关文章

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出 目录 回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出预测效果基本介绍模型介绍PSO模型LSTM模型PSO-LSTM模型程序设计参考资料致谢预测效果 Matlab实现PSO-LSTM多变量回归…

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C的类型转换 📒1. C语言…

Qt多语言/多语种详细开发教程

Qt作为跨平台的开发工具,早已应用到各行各业的软件开发中。 今天讲讲,Qt开发的正序怎么做多语言开发。就是说,你设置中文,就中文显示;设置英语就英文显示,设置繁体就繁体显示,设置发育就显示法语…

【Python知识宝库】使用Python进行网络请求:requests库入门

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、requests库简介二、安装requests库三、发送GET请求四、发送POST请求五、处理响应内容1. 获取状态码2. 获取文…

使用 Python Guardrails 提高 LLM 输出的可靠性

利用验证函数防止您的 LLM 输出崩溃 合理使用IF可以使您的LLM输出更可靠 虽然在创造力和解决复杂任务方面表现出色,但LLM往往难以遵循严格的规则,并且经常提供略微超出设定边界的答案。在构建应用程序时,这一缺陷可能导致失败和荒谬的答案&a…

智能巡检机器人助力新型信息基础设施建设与发展

为深入贯彻落实党的二十大和二十届二中、三中全会精神,推动新型信息基础设施协调发展,近日,工业和信息化部等十一部门关于推动新型信息基础设施协调发展有关事项。 新型信息基础设施是以信息网络为基础,以新一代信息通信技术创新为…

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨…

大数据-126 - Flink State 03篇 状态原理和原理剖析:状态存储 Part1

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知…

海外盲盒系统开发搭建,助力盲盒出海!

随着盲盒全球化发展,盲盒出口海外已经成为了大多数盲盒企业的选择。在互联网时代中,盲盒出口主要通过跨境电商和独立海外盲盒系统。而在目前市场发展趋势中,对于企业来说,一个独立的盲盒系统至关重要。海外盲盒APP可以帮助盲盒企业…

【ACM出版-高录用EI稳检索!九大高校联合举办】2024年人工智能、数字媒体技术与交互设计国际学术会议(ICADI2024)

​【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】 2024年人工智能、数字媒体技术与交互设计国际学术会议(ICADI2024) 2024 International Conference on artificial intelligence, digital media technology and …

期权开户攻略:期权开户主要的流程是什么?

今天期权懂带你了解期权开户攻略:期权开户主要的流程是什么?交易期权可以为投资者提供多种灵活性和机会,但同时也伴随风险。因此,了解期权的基本概念和策略,结合自身的风险承受能力,才能更好地进行投资决策…

解决el-date-picker切换类型type时错位

vue代码如下 样式效果如下 切换日期类型时,立马点日期会出现错位,检查发现是日期的展开面板并没有插入到body中导致的错位 解决方法 给el-date-picker加上唯一key值就可以

智慧园区,为园区多场景提供智能化赋能

智慧园区解决方案旨在通过现代信息技术手段,为园区空间多场景提供智能化赋能,以提升园区的运营效率、管理水平和服务质量。以下是对智慧园区解决方案的详细阐述: 一、智慧园区解决方案的核心目标 智慧园区解决方案的核心目标是实现园区的“…

ruoyi若伊项目(vue前后端分离)下载搭建

介绍 💡 RuoYi-Vue ​ RuoYi-Vue 是一款开源的后台管理系统,是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Security、MyBatis、Jwt、Vue),内置模块如:部门管理、…

Gemma 2大模型的训练范式解析

咱们聊聊大型语言模型(LLMs)的训练范式吧,这可是个大话题。从最早的GPT模型到现在的复杂开放权重LLMs,这一路走来,变化可真不少。记得最开始,LLMs的训练就只关注预训练,但现在,这事儿…

C++设计模式——Strategy策略模式

一,策略模式简介 策略模式是一种行为型设计模式,策略模式在软件开发场景中定义了一系列的算法,并将每个算法单独封装在可替换的对象中,使应用程序在运行时可以根据具体的上下文来动态地选择和切换算法,同时保持原有的…

【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(2)

关于java应用的监控本系列有文章如下: 【运维监控】influxdb 2.0telegraf 监控tomcat 8.5运行情况 【运维监控】influxdb 2.0grafana 监控java 虚拟机以及方法耗时情况 【运维监控】Prometheusgrafana监控tomcat运行情况 【运维监控】Prometheusgrafana监控spring b…

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要…

【java入门】八大基本数据类型与变量的声明与使用,超详细讲解!

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…