服务器lunix制作 docker镜像

安装 Docker(服务器)

复制代码
curl -fsSL https://get.docker.com | bash
下载报错 
先把 CentOS 8 的 repo 切换到 vault 源
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
更新缓存:
dnf clean all
dnf makecache
然后重新安装 Docker:
curl -fsSL https://get.docker.com | bash

启动:

复制代码
systemctl start docker
systemctl enable docker

查看:

复制代码
docker info

版本过低解决办法

使用国内镜像

复制代码
wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-24.0.6.tgz
  1. 然后解压、移动到 /usr/local/bin:

    tar xzvf docker-24.0.6.tgz
    sudo mv docker/* /usr/local/bin/
    dockerd &
    docker run hello-world

部署

复制代码
明白了,我帮你写一个 完整的一键部署脚本,适配你现在的目录结构(后端 /usr/www/,前端 /usr/local/nginx/,Nginx 配置在前端目录下

一键部署脚本示例

  • 保存为 /usr/deploy.sh:
复制代码
#!/bin/bash
# 一键部署脚本 - NestJS + 前端 + MySQL + Redis + Nginx
# 适配目录:
# 后端:/usr/www
# 前端:/usr/local/nginx
# Nginx 配置:/usr/local/nginx/default.conf

set -e

echo "===== 开始部署 Docker 环境 ====="

# 1️⃣ 创建 docker-compose.yml
cat > /usr/docker-compose.yml << 'EOF'
version: '3'

services:
  backend:
    build: /usr/www
    container_name: backend
    ports:
      - "3000:3000"
    depends_on:
      - mysql
      - redis

  frontend:
    build: /usr/local/nginx
    container_name: frontend
    ports:
      - "5173:5173"

  mysql:
    image: mysql:8
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  redis:
    image: redis
    container_name: redis
    ports:
      - "6379:6379"

  nginx:
    image: nginx:stable
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - /usr/local/nginx:/etc/nginx/conf.d
      - /usr/local/nginx/dist:/usr/share/nginx/html
    depends_on:
      - frontend
      - backend

volumes:
  mysql_data:
EOF

echo "✅ docker-compose.yml 创建完成"

# 2️⃣ 构建镜像
echo "===== 构建后端镜像 ====="
docker-compose -f /usr/docker-compose.yml build backend

echo "===== 构建前端镜像 ====="
docker-compose -f /usr/docker-compose.yml build frontend

# 3️⃣ 启动全部服务
echo "===== 启动所有服务 ====="
docker-compose -f /usr/docker-compose.yml up -d

# 4️⃣ 显示容器状态
echo "===== 当前容器状态 ====="
docker ps

echo "===== 部署完成 ====="
echo "访问前端: http://<服务器IP>/"
echo "后端 API: http://<服务器IP>:3000/"
echo "MySQL: 3306, Redis: 6379"

使用方法

  1. 保存脚本:

    sudo nano /usr/deploy.sh

    粘贴上面的脚本,保存

  2. 给脚本加可执行权限:

    sudo chmod +x /usr/deploy.sh

  3. 运行部署脚本:

    sudo /usr/deploy.sh

  4. 部署完成后,访问:

    前端页面:http://服务器IP/
    后端 API:http://服务器IP:3000/
    MySQL 3306
    Redis 6379

脚本特点

  • 完全一键:创建 docker-compose.yml → 构建镜像 → 启动容器
  • 自动挂载你的前端和 Nginx 配置
  • 数据库持久化使用 Docker volume
  • 可随时 docker-compose down 停止服务

可能报错

root@iZ2vc2rdyl4yp4nt4hlnpkZ usr# ls -l /usr/deploy.sh

-rwxr-xr-x 1 root root 1836 3月 11 15:14 /usr/deploy.sh

复制代码
转换为 Unix 格式
sudo dos2unix /usr/deploy.sh

如果提示 command not found,先安装 dos2unix:
sudo dnf install -y dos2unix

确认可执行权限(你已经有了,确认无误):
sudo chmod +x /usr/deploy.sh

执行脚本
sudo /usr/deploy.sh
或者切换到 /usr/:
cd /usr
sudo ./deploy.sh
  1. root@iZ2vc2rdyl4yp4nt4hlnpkZ usr# sudo chmod +x deploy.sh
    root@iZ2vc2rdyl4yp4nt4hlnpkZ usr# sudo ./deploy.sh
    ===== 开始部署 Docker 环境 =====
    ✅ docker-compose.yml 创建完成
    ===== 构建后端镜像 =====
    ./deploy.sh:行69: docker: 未找到命令
    root@iZ2vc2rdyl4yp4nt4hlnpkZ usr#

    说明 脚本执行时找不到 docker 命令,虽然你在终端输入 docker version 可以看到版本,但在 sudo ./deploy.sh 里,root 环境的 PATH 里可能没有 Docker 的安装路径。

    确认 Docker 路径

    which docker
    在脚本开头强制设置 PATH 也就是which 显示的路径
    deploy.sh 开头加一行:
    #!/bin/bash

    一键部署脚本

    export PATH=$PATH:/usr/bin

安装 Docker Compose V2(最推荐

复制代码
docker compose version

如果提示:
docker: 'compose' is not a docker command
说明没有安装。

mkdir -p ~/.docker/cli-plugins/

curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 \
-o ~/.docker/cli-plugins/docker-compose

chmod +x ~/.docker/cli-plugins/docker-compose
然后测试:
docker compose version
如果出现:
Docker Compose version v2.xx
就成功了。
再运行你的脚本:sudo ./deploy.sh 就能正常运行

制作镜像

前后端各一个 Dockerfile ⭐推荐

复制代码
/usr/project
│
├─ backend
│   ├─ Dockerfile
│   ├─ package.json
│   └─ src
│
├─ frontend
│   ├─ Dockerfile
│   ├─ package.json
│   └─ src
│
└─ docker-compose.yml

backend/Dockerfile(NestJS)

复制代码
FROM node:20

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

EXPOSE 3000

CMD ["node","dist/main.js"]

frontend/Dockerfile(Vue / React / Vite)

复制代码
FROM node:20 as build

WORKDIR /app

COPY . .

RUN npm install
RUN npm run build

FROM nginx:stable

COPY --from=build /app/dist /usr/share/nginx/html

docker-compose.yml

复制代码
services:

  backend:
    build: ./backend
    ports:
      - "3000:3000"
    depends_on:
      - mysql
      - redis

  frontend:
    build: ./frontend
    ports:
      - "80:80"

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: 123456

  redis:
    image: redis:7

启动

复制代码
docker compose up -d --build

如何完全本地构建(不用拉国外数据)

方法一:先把基础镜像拉到本地(国内源或提前下载)

在有网络的机器上拉:

复制代码
docker pull node:20
docker pull nginx:stable
docker pull mysql:8
docker pull redis:7

保存成 tar 包:

复制代码
docker save node:20 -o node20.tar
docker save nginx:stable -o nginx.tar

拷贝到 离线服务器,加载镜像:

复制代码
docker load -i node20.tar
docker load -i nginx.tar

构建你的镜像时就不需要联网了:

复制代码
docker build -t my-backend .

完全自定义基础镜像

  • 比如你不想用 node:20,自己做一个最小 Linux + Node:
复制代码
FROM ubuntu:22.04

RUN apt-get update && apt-get install -y curl gnupg
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
RUN apt-get install -y nodejs

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

CMD ["node", "dist/main.js"]


esc ---:wq ---回车

使用国内镜像加速器(最简单)

复制代码
sudo vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
相关推荐
zandy10112 分钟前
地址解析厂商推荐:分行业地址服务能力选型与技术分析
大数据·运维·人工智能
财迅通Ai2 分钟前
“光纤传感+AI”双轮驱动加速成长,光格科技步入资产数字化运维快车道
运维·人工智能·科技·光格科技
laowangpython41 分钟前
昆仑通态 Mcgs Pro软件安装步骤(附安装包)Mcgs Pro 3.3.6 下载安装教程(保姆级)
java·服务器·数据库·其他
不能只会打代码1 小时前
校享云 — 高校智慧后勤平台微服务架构设计与实践
spring cloud·docker·微服务·nacos·vue·校享云
学无止境_永不停歇1 小时前
3. 进程状态
linux·服务器
Splashtop高性能远程控制软件1 小时前
本地部署 vs 公有云 vs 混合架构:一份可对照落地的 IT 架构选型指南
运维·架构·远程控制·splashtop
kdxiaojie2 小时前
Linux 驱动研究 —— V4L2 (2)
linux·运维·笔记·学习
蝶恋舞者2 小时前
怎样设置软件开机自启动(用的最多,最简单)
linux·运维·服务器
Dawn-bit2 小时前
Linux打包压缩与用户权限管理详解
linux·服务器·数据库
段一凡-华北理工大学3 小时前
AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章23:从Demo到上线:Agent应用的架构设计、性能优化与成本控制实战
运维·网络·人工智能·性能优化·高炉炼铁·工业智能体