服务器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 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"]
}
相关推荐
人间打气筒(Ada)2 小时前
zabbix进阶与分布式-主被动模式/自动发现
运维·zabbix·监控·自动发现·主被动模式
运维老司机2 小时前
国产鲲鹏服务器 Kylin Linux 部署 TiDB v8.5.5 实战(TiUP 单机部署完整教程)
linux·服务器·kylin
柏木乃一2 小时前
Linux线程(6)生产消费者模型
linux·运维·服务器·c++·分布式·线程·生产消费
银河麒麟操作系统2 小时前
服务器通用(全架构)【深入解析文件操作中的常见问题:空洞、传输与大小差异】技术文章
运维·服务器·数据库
smile_5me2 小时前
RK3588 Ubuntu显示异常
linux·运维·ubuntu
艾莉丝努力练剑2 小时前
【MYSQL】MYSQL学习的一大重点:MYSQL库的操作
android·linux·运维·数据库·人工智能·学习·mysql
小鸡吃米…2 小时前
Python 中的并发 —— 简介
服务器·数据库·python
sssvangen2 小时前
OpenClaw免费自动部署脚本-docker版
运维·docker·容器
GEO_Huang2 小时前
定义未来办公:数谷AgentOffice如何实现规模化提效
大数据·运维·人工智能·自动化·aigc