最近在学Docker,感觉对新手来说,概念和命令确实有点多,上手容易懵。好在发现了一个特别省事的办法,用InsCode(快马)平台的AI功能,可以直接生成一个带详细注释的Docker示例项目,边看边操作,理解起来快多了。今天就把我跟着这个“AI老师”学习的完整过程记录下来,分享给同样想入门Docker的朋友。
-
项目目标与核心思路 我们的目标是创建一个最简单的Node.js应用,并用Docker把它“容器化”。这样做的意义在于,以后无论在哪台电脑上,只要装了Docker,就能用完全一样的方式把这个应用跑起来,再也不用担心“在我电脑上好好的”这种问题了。整个流程可以拆解为三步:先写一个简单的Web应用,然后编写一份“说明书”(Dockerfile)告诉Docker如何打包这个应用,最后用Docker命令构建和运行。
-
第一步:创建Node.js Express应用 这个应用非常简单,就是一个显示“Hello Docker”的网页。我们需要两个文件:一个是
package.json,用来描述项目信息和依赖;另一个是app.js,是应用的主文件。在package.json里,我们声明这个应用依赖express框架。在app.js里,我们引入express,创建一个服务器,让它监听8080端口,并且当有人访问根路径时,就返回“Hello Docker”的HTML页面。这个步骤虽然简单,但它是我们后续所有操作的基础。 -
第二步:编写带详细注释的Dockerfile(核心) 这是整个学习的重点。Dockerfile就像一份菜谱,Docker根据它来一步步制作出一个可以运行的“镜像”。我们一行一行来看AI生成的注释,理解每个指令的作用:
FROM node:18-alpine:这行指定了基础镜像。我们基于一个轻量级的、已经安装了Node.js 18的Linux系统(Alpine)开始构建,这比自己从头装系统、装Node省事太多了。WORKDIR /app:在容器内部创建一个名为/app的目录,并且之后所有命令的默认执行路径都在这里。这就像我们进入了一个专门的工作文件夹。COPY package*.json ./:把宿主机(也就是我们自己的电脑)当前目录下的package.json文件(可能还有package-lock.json)复制到容器内的/app目录下。这里先只复制依赖描述文件,是为了利用Docker的缓存机制,提高构建效率。RUN npm install:在容器内的/app目录下,执行npm install命令。这行命令会根据上一步复制进去的package.json文件,安装所有项目依赖(比如express)。这个操作是在构建镜像时完成的。COPY . .:将宿主机当前目录下的所有文件(除了.dockerignore中声明的)都复制到容器的/app目录下。这里才把我们的应用源代码app.js复制进去。EXPOSE 8080:这是一个声明,告诉使用这个镜像的人,这个容器内的应用会使用8080端口。它本身并不会发布端口,只是一个文档说明。CMD ["node", "app.js"]:指定容器启动时默认要执行的命令。这里就是运行node app.js来启动我们的Express服务器。一个Dockerfile中只能有一个CMD指令。
-
第三步:构建镜像与运行容器(动手实践) 有了Dockerfile,我们就可以开始“烹饪”了。打开终端,进入项目目录,执行构建命令:
docker build -t my-app .。这个命令中,-t my-app是给构建出来的镜像起个名字叫my-app,最后那个点.代表当前目录是构建上下文(Dockerfile所在目录)。Docker会按照Dockerfile的指令一步步执行,最终生成一个名为my-app的镜像。我们可以用docker images命令查看本地已有的镜像,应该能看到它。 镜像做好了,接下来就是“上菜”——运行容器。执行命令:docker run -p 8080:8080 my-app。-p 8080:8080是关键,它把容器内部的8080端口映射到宿主机的8080端口。这样,我们在电脑浏览器里访问localhost:8080,就能看到容器内应用返回的“Hello Docker”页面了。看到页面成功显示的那一刻,感觉特别有成就感! -
第四步:掌握常用容器管理命令 应用跑起来了,我们还得学会怎么管理它。这时候就需要几个常用的Docker命令:
- 查看容器:
docker ps可以列出所有正在运行的容器。如果想看所有容器(包括已停止的),就用docker ps -a。 - 进入容器内部:有时我们需要排查问题或查看环境,可以用
docker exec -it <容器ID或名称> /bin/sh命令进入容器的命令行界面。这里的-it参数是为了保持交互。 - 停止容器:想关掉应用,就用
docker stop <容器ID或名称>。这个命令会优雅地停止容器进程。 - 删除容器和镜像:如果容器不需要了,可以用
docker rm <容器ID或名称>删除它。镜像如果也不用了,可以用docker rmi <镜像ID或名称>删除。注意,删除镜像前需要先删除依赖它的容器。
- 查看容器:
通过这样一个从零开始的小项目,我不仅理解了Dockerfile每个指令的含义,还亲手完成了镜像构建和容器运行的完整流程。对于新手来说,这种“所见即所得”的实践方式,比单纯看理论文档要有效得多。
整个学习过程,我都是在InsCode(快马)平台上完成的。它的AI对话功能很强大,我只需要输入“创建一个简单的Node.js Express应用并Docker化”,它就能生成完整的、带详细注释的项目文件,我几乎不用自己写代码,只需要阅读和理解。更棒的是,对于这种带有Web服务的项目,平台还提供了一键部署的能力。这意味着我不仅能在本地学习,还能直接把项目部署到线上,生成一个可公开访问的链接,分享给别人看效果,整个过程非常流畅,省去了自己配置服务器和网络的麻烦。对于想快速上手Docker核心概念的新手来说,这确实是个高效又直观的入门途径。


被折叠的 条评论
为什么被折叠?



