服务器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"]
}
相关推荐
稳联技术老娜4 小时前
DeviceNet主站怎么连接西门子PLC,Profinet网关配置手册(那智机器人)
服务器·网络·数据库
三十..4 小时前
Ceph 三大存储接口深度实践与数据保护指南
运维·ceph
9分钟带帽4 小时前
linux_系统开机自动执行shell脚本
linux·服务器
蝶豆花5 小时前
基于商城系统的功能,自动化,性能-测试报告
运维·自动化
袋鼠云数栈5 小时前
从前端到基础设施,ACOS 如何打通企业全链路可观测
运维·前端·人工智能·数据治理·数据智能
黎阳之光5 小时前
视频孪生智护供水生命线:黎阳之光赋能医疗与园区水务高质量升级
运维·物联网·算法·安全·数字孪生
消失在人海中5 小时前
oracle 数据库多表关联查询
服务器·数据库·oracle
gsls2008085 小时前
JVM 堆内存参数 & Docker 容器适配,一次讲清楚
jvm·docker·容器
志栋智能6 小时前
AI驱动无代码:降低巡检超自动化的门槛
大数据·运维·网络·人工智能·自动化
嵌入式小能手6 小时前
飞凌嵌入式ElfBoard-进程间的通信之命名管道
linux·服务器·算法