news 2026/9/27 22:55:15

初学者怎么用docker打包代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
初学者怎么用docker打包代码

如果你是处学者,连docker是什么都不知道,那么我这篇博客将直接上手docker,帮助打包第一个项目代码。

首先我们先要明白docker它是什么东西,主要干什么。初学者理解docker只要知道他是一个可以让你的代码放在别人的电脑上也能顺利运行的东西,那么干的就是把你电脑上的代码运行的环境一起打包到别人的电脑上,这样听起来有点麻烦,环境这么大的一个东西,要放到被人电脑上一个还好很多个的话不直接炸了吗,哎,这就是docker的最便捷的地方,他不是给每个程序都复制一整套操作系统,而是通过镜像、分层和复用,把真正需要的东西组织起来。好了涉及到专业名词了,接下来让我

镜像是什么,他有什么用,首先镜像和镜子一点边都不沾,你只要知道他是一个做月饼模具,可以做出同一个形状的月饼。就像镜像里面提前准备好了程序运行所需要的环境和文件。根据同一个镜像,我们可以做出一个、两个甚至很多个环境相同的容器,做出来下一步就是吃了,哈哈,月饼可以说吃,但容器就是用了,那容器是什么呢?简单来说,容器就是根据镜像这个模板创建出来的一个实际运行环境,你的代码会在这个环境里真正运行起来。所以你可以先记住一句话:镜像是模具,容器是根据模具做出来并运行起来的东西。

那这个和打包有什么关系,聪明的你肯定想到了可以将你代码运行所需要的环境、依赖和相关文件打包成一个Docker镜像,只要把你的镜像传到别人的电脑里就可以运行你的代码了,没错这就是打包的核心概念,其余的步骤都在围绕怎么让这个打包出来的东西更小、更高效,以及怎么让我们管理和运行这些容器更加方便。

好了废话不多说直接上命令

假如说这是你的一个项目,代码结构分为客户端和服务端两个部分,那应该怎么打包呢?很明显,客户端和服务端虽然属于同一个项目,但它们实际上是两个需要独立运行的程序,所以我们不能简单地把它们全部塞进一个容器里。一般来说,我们会分别为客户端和服务端构建镜像,也就是一个项目对应两个镜像。那问题来了,镜像到底怎么构建?这时候就需要用到Dockerfile。Dockerfile是什么?一句话就是告诉docker,这个镜像我要使用什么基础环境、把哪些代码复制进去、安装哪些依赖、怎么编译程序,以及容器启动之后应该执行什么命令。例如:

# 1. 准备 Go 编译环境 FROM golang:alpine # 2. 设置容器里的工作目录 WORKDIR /app # 3. 把 go.mod 复制进去 COPY go.mod ./ # 4. 下载项目依赖 RUN go mod download # 5. 把项目代码复制进去 COPY . . # 6. 编译服务端程序 RUN go build -o server ./cmd/server # 7. 声明服务端使用 8080 端口 EXPOSE 8080 # 8. 容器启动时运行 server CMD ["./server"]

这样虽然看起来很麻烦,但是你只需要知道一个dockerfile文件有什么就行,至于怎么写你当然可以直接发给ai,按照格式书写。接下来就是客户端了,和此格式可能会有些出入,主要还是以ai为主。

其实这样写,就可以把这个文件上传到虚拟机(可以自行搜索怎么把windows上的文件上传倒虚拟机里),然后通过命令来构建环境

docker build -f Dockerfile.server -t chat-room-server .

如果是客户端:

docker build -f Dockerfile.client -t chat-room-client .

可以把这个过程理解成:

Dockerfile + 项目代码 ↓ docker build ↓ Docker 镜像

其中:

docker build 开始构建镜像 -f Dockerfile.client 指定使用 Dockerfile.client -t chat-room-client 给构建出来的镜像命名 . 使用当前目录作为构建上下文

镜像构建完成之后,可以通过docker images 来查看镜像是否构建完成

镜像构建完成之后就可以开始做“月饼”了,就是构建并启动容器:

docker run -d --name chat-room-server -p 8080:8080 chat-room-server

这里要涉及到一个特别的点

-p 8080:8080

这两个8080 不是同一个东西,分别代表

-p 宿主机端口 : 容器端口 ↑ ↑ 8080 8080

也就是:

把虚拟机(宿主机)的 8080 端口,映射到容器里的 8080 端口。

这个要根据你的实际情况来写

到这里,镜像和容器都准备好了,那是不是就可以直接运行了呢?哈哈,还差最后一个小问题。我们在 Windows 上运行客户端和服务端时,它们本质上是在同一台电脑上,通过localhost:8080就可以找到对方;但是现在把它们放进 Docker 之后,客户端和服务端变成了两个独立的容器,它们需要先处在同一个 Docker 网络里,客户端才能找到服务端。所以接下来我们要做的事情就是:创建一个 Docker 网络,把客户端和服务端放进去,让它们能够互相通信。听起来是不是很麻烦但实际上就一个命令

docker network create chat-room-net

然后把服务端容器加入这个网络

docker network connect chat-room-net chat-room-server

因为客户端是每加入一个都需要运行一个容器的所以直接启动客户端容器时指定这个网络:

docker run --rm -it \ --network chat-room-net \ -e SERVER_ADDR=chat-room-server:8080 \ chat-room-client

这样一顿操作之后你的代码就可以在任意电脑上的虚拟机里成功运行了,不过你是不是觉得非常麻烦,有什么方法可以直接一键启动吗,有的,兄弟有的。他就是Compose。不过这个就是纯文件内容了,下期再讲吧,希望对你有帮助

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 22:54:59

混沌拓扑学(HDT)演化论真相

副标题: 别再迷信"物竞天择"——自然选择从不"选中"谁,它只是"剩下"了谁。从随机突变到技术弥补,重新理解演化论、自然选择与幸存者偏差。演化并非简单遵循物竞天择,适者生存.SEO摘要: …

作者头像 李华
网站建设 2026/9/27 22:54:07

Python入门:零基础3天学会办公自动化,工作效率翻倍

在二零二六年这个把效率追求达到极致的职场环境里面, 假设你依旧还在使用手动复制粘贴 Excel 表格的方式处理数据, 还在逐个修改 Word 文档名称这样操作, 那么这种行为真的就是在毫无意义地浪费生命时光。办公自动化这一项技术能力, 目前已经不再属于程序员群体所独有的专业技能…

作者头像 李华
网站建设 2026/9/27 22:52:16

集成pageOffice到springboot项目关键步骤

集成pageOffice到springboot项目关键步骤 PageOffice(卓正软件)是国内常用的Web 在线 Office 文档编辑控件,用于 OA、政务、ERP 等 B/S 系统,在网页里直接打开、编辑、保存 Word/Excel/PPT,不需要下载上传文件&#xf…

作者头像 李华
网站建设 2026/9/27 22:51:52

高频核心硬件面试2026—通用电子方向深度精讲

本文为专栏内部精讲内容,聚焦硬件工程师面试中最具区分度的高频问题,每题配套考察点剖析、标准解法、易错项提醒、工程案例与关键计算,帮助读者在2026届招聘季中展现系统级工程思维与实战功底。 对于硬件工程师而言,面试是展现技术深度、工程严谨性与问题解决能力的核心舞…

作者头像 李华
网站建设 2026/9/27 22:50:07

小区宠物智能管理监控系统:从品种识别到风险预测的全链路实践

背景 随着城市社区宠物数量增长,物业管理面临三大痛点:1. 品种识别难 — 巡查人员无法快速判断宠物品种,难以执行品种管理规定2. 行为监控难 — 散养、扰民、伤人等事件缺乏实时记录与追溯3. 主人管理难 — 不文明养宠行为(不牵绳…

作者头像 李华
网站建设 2026/9/27 22:50:03

利用vmware安装Linux的具体操作以及其他问题

利用vmware安装Linux操作系统的详细步骤如上​2.内核是操作系统的核心部分。它直接管理计算机的硬件资源(如CPU、内存、硬盘、网络接口等),并向上层软件提供系统调用接口。 Shell:命令解释器,是用户与内核之间的“外壳…

作者头像 李华