Docker容器化部署编译运行模块

1. 核心准备:Dockerfile 文件

2. 构建镜像 (Build)

在 Dockerfile 所在目录下执行 加上 --no-cache 避免旧缓存干扰。

sudo docker build --no-cache -f Dockerfile.compile_server -t oj_compiler_i:v4 .

构建镜像名为oj_compiler_i:v4

3. 本地多节点启动 (Run Local)

在一台机器上模拟三个判题节点。分别给这三个结点取名为 node_808x

cpp 复制代码
# 节点1:宿主机 8081 -> 容器 8080
sudo docker run -d -p 8081:8080 --name node_8081 oj_compiler_i:v4

# 节点2:宿主机 8082 -> 容器 8080
sudo docker run -d -p 8082:8080 --name node_8082 oj_compiler_i:v4

# 节点3:宿主机 8083 -> 容器 8080
sudo docker run -d -p 8083:8080 --name node_8083 oj_compiler_i:v4

查看当前docker中的进程

停止正在运行的docker容器

cpp 复制代码
sudo docker stop node_8081 node_8082 node_8083

重启相应的docker容器

bash 复制代码
sudo docker start node_8081 node_8082 node_8083

4. 跨主机部署 (Run Remote)

将判题服务扩展到另一台电脑(假设 IP 为 192.168.1.200)。

步骤 A:在本机打包镜像

bash 复制代码
sudo docker save -o oj_compiler.tar oj_compiler_i:v4

打包形成tar文件,新的机器直接使用这个文件

步骤 B:传输到新电脑

bash 复制代码
scp oj_compiler.tar 用户名@192.168.1.200:~/

步骤 C:在新电脑加载并运行

cpp 复制代码
# 1. 加载镜像
sudo docker load -i oj_compiler.tar

# 2. 启动容器 (直接用 8080 即可)
sudo docker run -d -p 8080:8080 --name node_remote_1 oj_compiler_i:v4

# 3. 放行防火墙
sudo ufw allow 8080/tcp

5. 日常运维命令 (Maintenance)

我的oj服务在本地的8080端口,然后配置文件里面写了三台8081 8082 8083三个端口的本地主机,现在AI给我写了一份docker文件,我应该如何使用,我从来没有docker部署经验,请一步一步指导,比如我在当前文件界面启动oj服务器,在linux系统的其他比如我新建一个文件夹,再这个文件夹里面如何部署docker?

以下是dockerfile文件,你在看看,我这边是有一个compile_server文件夹和comm文件夹,dockerfile和它俩在同一个目录下,comm里面的文件有编译运行模块需要使用的内容

cpp 复制代码
# 1. 编译阶段:使用 Ubuntu 22.04
FROM ubuntu:22.04 AS builder

ENV DEBIAN_FRONTEND=noninteractive

# 安装编译依赖
RUN apt-get update && apt-get install -y \
    g++ \
    make \
    libjsoncpp-dev \
    libboost-dev \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /src

# 将当前目录下的所有文件(包括 compile_server 和 comm)复制进去
COPY . .

# 编译项目
RUN cd compile_server && make

# ----------------------------------------------------

# 2. 运行阶段:【关键修改】必须也是 Ubuntu 22.04,否则库对不上!
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

# 安装运行时的依赖
# 注意:这里安装的 libjsoncpp-dev 在 22.04 下才是 v25 版本
RUN apt-get update && apt-get install -y \
    g++ \
    libjsoncpp-dev \
    libboost-dev \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# 从编译阶段把生成的可执行文件拷过来
COPY --from=builder /src/compile_server/compile_server .

# 创建临时目录
RUN mkdir -p temp

# 暴露端口
EXPOSE 8080

# 启动服务
CMD ["./compile_server", "8080"]
相关推荐
En^_^Joy23 分钟前
Nginx 从入门到精通:配置、原理与实战详解
运维·nginx
玖石书40 分钟前
WSL2 手动安装 Ubuntu 24.04 到指定磁盘位置
linux·运维·ubuntu·wsl
随便做点啥2 小时前
32卡-64G-910B4-16后端-(Qwen3.8-27B-W8A8)集群部署报告
运维·服务器·经验分享·docker·vllm
CJY6218 小时前
k8spod管理
云原生·容器·kubernetes
2601_962218478 小时前
万象生鲜系统区块链溯源技术帮助生鲜企业搭建食品安全数字化体系
大数据·运维·微服务·云原生·架构
智塑未来8 小时前
中小公司在线文档选型:从协作入口到安全边界
运维·安全
新时代牛马8 小时前
Linux 内核入门地图:架构、源码目录与五大子系统
linux·运维·架构
智购科技无人售货机厂家8 小时前
2026自动售货机制冷系统维护指南:从散热器清洁到压缩机换油的工程实践~YH
运维·redis·物联网·缓存·架构
剑客的茶馆8 小时前
开发者,运维怎样转行FDE?
运维·ai·开发·fde
Julien20049 小时前
控制 SELinux 文件上下文
linux·运维·服务器