服务器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"]
}
相关推荐
❀͜͡傀儡师2 小时前
docker部署Antigravity-Manager
运维·docker·容器·antigravity
sg_knight2 小时前
Docker环境下的MinIO安装,以及如何正确配置数据持久化(避坑篇)
运维·docker·容器·minio·ftp·cos·oss
Agent产品评测局3 小时前
物流供应链自动化解决方案选型,全链路提效指南:从硬件集成到AI Agent的演进路径
运维·人工智能·ai·chatgpt·自动化
会飞的大可3 小时前
Docker容器项目无法访问MySQL的解决策略
mysql·docker·容器
钟智强3 小时前
Linux SSH密码爆破脚本,从原理到实践
linux·运维·ssh
Linux蓝魔4 小时前
麒麟官方yum源配置V10SP2-V10SP3-V10SP3-2403
大数据·linux·运维
helloliyh4 小时前
linux 删除指定日期目录(包括目录下文件)
linux·运维·服务器
野犬寒鸦4 小时前
Redis复习记录Day03
服务器·redis·后端·面试·bootstrap·mybatis
半个俗人4 小时前
06.Linux用户权限相关命令
linux·运维·服务器
涛声依旧393164 小时前
构建部署kubernetes所需主机
linux·运维·云原生·容器·kubernetes