0


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

🎉 前言

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

🎉 克隆演示项目

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

git clone [email protected]: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/sayhello

localhost:9564/sayok

,可以看到如下画面:

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

在这里插入图片描述
再次访问

localhost:9564

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

🎉 尾声

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

标签: docker 容器 运维

本文转载自: https://blog.csdn.net/2302_79169315/article/details/142056315
版权归原作者 秋窗7 所有, 如有侵权,请联系我们删除。

“使用docker打包项目的流程(小白可懂)”的评论:

还没有评论