当前位置: 首页 > news >正文

Docker linux 离线部署springcloud

搭建dcoker环境

1. 首先在有网络的机器上下载Docker的离线安装包:

   - 访问 https://download.docker.com/linux/static/stable/x86_64/

   - 下载对应版本的 docker-<version>.tgz 文件

2. 将下载的安装包传输到目标Linux机器上(可以使用U盘或其他存储设备)

3. 在目标机器上执行以下命令:

   ```bash

   # 解压安装包

   tar xzvf docker-<version>.tgz

   

   # 将docker二进制文件复制到系统目录

   sudo cp docker/* /usr/bin/

   

   # 创建docker服务

   sudo groupadd docker

   sudo useradd -g docker docker

   

   # 创建docker配置文件

   sudo mkdir -p /etc/docker

   sudo touch /etc/docker/daemon.json (没外网 删除 不然可能会启动不了)

   

   # 创建systemd服务文件

   sudo mkdir -p /etc/systemd/system

   sudo touch /etc/systemd/system/docker.service

4. 编辑docker.service文件,添加以下内容:

   

   [Unit]

   Description=Docker Application Container Engine

   Documentation=https://docs.docker.com

   After=network-online.target docker.socket firewalld.service

   Wants=network-online.target

   Requires=docker.socket

   [Service]

   Type=notify

   ExecStart=/usr/bin/dockerd

   ExecReload=/bin/kill -s HUP $MAINPID

   TimeoutSec=0

   RestartSec=2

   Restart=always

   StartLimitBurst=3

   StartLimitInterval=60s

   LimitNOFILE=infinity

   LimitNPROC=infinity

   LimitCORE=infinity

   TasksMax=infinity

   [Install]

   WantedBy=multi-user.target

5. 启动Docker服务:

   ```bash

   # 重新加载systemd配置

   sudo systemctl daemon-reload

   

   # 确保docker.socket服务存在

   sudo touch /etc/systemd/system/docker.socket

   

   # 编辑docker.socket文件,添加以下内容:

   

   [Unit]

   Description=Docker Socket for the API

   PartOf=docker.service

   [Socket]

   ListenStream=/var/run/docker.sock

   SocketMode=0660

   SocketUser=root

   SocketGroup=docker

   [Install]

   WantedBy=sockets.target

      # 启用并启动服务

   sudo systemctl enable docker.socket

   sudo systemctl enable docker.service

   sudo systemctl start docker.socket

   sudo systemctl start docker.service

(这里报错执行6启动成功执行7)或者直接删掉daemon.json 文件重新start

   ```

  1. 修改daemon.json 

# 创建目录

mkdir -p /etc/docker

# 复制内容 (不通外网没啥用)

tee /etc/docker/daemon.json <<-'EOF'

{

    "registry-mirrors": [

        "http://hub-mirror.c.163.com",

        "https://mirrors.tuna.tsinghua.edu.cn",

        "http://mirrors.sohu.com",

        "https://ustc-edu-cn.mirror.aliyuncs.com",

        "https://ccr.ccs.tencentyun.com",

        "https://docker.m.daocloud.io",

        "https://docker.awsl9527.cn"

    ]

}

EOF

# 重新加载配置

systemctl daemon-reload

# 重启Docker

systemctl restart docker

7. 验证安装:

   ```bash

   docker --version

   docker info

   ```

   - 使用 `systemctl status docker.service` 查看详细错误信息

安装mysql

1.在有网络的服务器上拉取镜像包

docker pull mysql:8.0.31

2.打包为tar上传到目标服务器

docker save -o /home/mysql-8.0.27.tar mysql:8.0.27

3.传输装载

docker load -i /home/mysql/mysql-8.0.27.tar

  1. 挂载启动

docker network create my-network (创建个docker网络)

创建挂载目录

mkdir -p  /home/mysql/log

mkdir  -p /home/mysql/data

mkdir  -p  /home/mysql/conf

docker run \

--name mysql -p 3306:3306 \

--network my-network \

-v /home/mysql/log:/var/log/mysql \

-v /home/mysql/data:/var/lib/mysql \

-v /home/mysql/conf:/etc/mysql/conf.d \

-e MYSQL_ROOT_PASSWORD='xxxx' \

-d mysql:8.0.27

#设置root账号密码和版本号 成功会返回一串编码

密码xxxx

56ecdc8667fa807506988884deaaa6abd824a9d0995da77bbfc4782bfcac54e9

  1. 连接验证

Docker ps / docker images

登录

docker exec -it mysql  mysql -uroot -xxxx

安装jdk

1.jdk在线下载打包离线包

docker pull openjdk:8-jdk

docker save -o openjdk8.tar openjdk:8-jdk

2.上传目标服务器并加载

docker load -i openjdk8.tar

  1. 验证

Docker images;

安装docker-compose

# 赋予执行权限

sudo chmod +x /usr/local/bin/docker-compose

# 验证安装

docker-compose --version

输出类似 Docker Compose version v2.x.x 即成功。

Nacos 启动

docker logs <nacos容器名或ID>

docker pull nacos/nacos-server:v2.2.3

docker save -o /home/nacos/nacos.tar nacos/nacos-server:2.2.0

docker load -i xx

mkdir -p /opt/nacos/logs /opt/nacos/data

docker run -d \

  --name nacos \

--network my-network \

  -p 8848:8848 \

  -v /opt/nacos/logs:/home/nacos/logs \

  -v /opt/nacos/data:/home/nacos/data \

  -e MODE=standalone \

  nacos/nacos-server:latest

使用 Docker Compose 启动 Nacos (推荐) 用这个

创建 docker-compose.yml 文件:

version: '3'

services:

  nacos:

    image: nacos/nacos-server:latest

    container_name: cmhs-nacos

    environment:

      MODE: standalone  # 注意这里改为 key: value 格式

    ports:

      - "8848:8848"

      - "9848:9848"

    volumes:

      - ./logs/:/home/nacos/logs

- ./nacos/data:/home/nacos/data

    networks:

      - my-network

    restart: always

networks:

  my-network:

driver: bridge  

name: my-network

external: true

然后运行:

docker-compose up -d

常用命令

移除镜像docker rm -f cmhs-nacos

停止并清理由 docker-compose up 或 docker-compose start 启动的所有容器、网络、卷和其他资源

docker-compose down

启动后登录后台添加nacos 配置yml文件

docker-compose up --build -d

启动gateway模块

/home/lz/cmhs-gateway/ 目录下文件

docker-compose.yml

dockerfile

nacos.env

Dockerfile内容:

# 基础镜像

FROM openjdk:8-jdk

# author

MAINTAINER cmhs

# 挂载目录

VOLUME /home/cmhs

# 创建目录

RUN mkdir -p /home/cmhs

# 指定路径

WORKDIR /home/cmhs

# 复制jar文件到路径

COPY ./jar/cmhs-gateway.jar /home/cmhs/cmhs-gateway.jar

# 启动网关服务

ENTRYPOINT ["java","-Xms64m","-Xmx1024m","-jar","cmhs-gateway.jar"]

docker-compose.yml内容:

version : '3.8'

services:

  cmhs-gateway:

    image: cmhs-gateway:latest

    container_name: cmhs-gateway

    restart: always

    mem_limit: 1024m

build:

  context: ./

      dockerfile: dockerfile

    env_file:

      - nacos.env

    volumes:

      - /etc/localtime:/etc/localtime:ro

      - ./logs:/opt/logs/cmhs-gateway

    networks:

      - my-network

networks:

  my-network:

    name: my-network

    external: true

nacos.env文件内容:

TZ=Asia/Shanghai

spring.cloud.nacos.discovery.server-addr=cmhs-nacos:8848

spring.cloud.nacos.discovery.username=nacos

spring.cloud.nacos.discovery.password=nacos

spring.cloud.nacos.config.server-addr=cmhs-nacos:8848

spring.cloud.nacos.config.username=nacos

spring.cloud.nacos.config.password=nacos

spring.profiles.active=dev

logging.level.root=debug

docker build -t cmhs-gateway .

docker-compose up -d

其他模块大同小异

docker-compose down  # 停止并删除旧容器

docker-compose up -d # 重新创建

docker-compose up --build -d

Yfc-admin&&yfc-harbor模块

docker-compose.yml

nacos.env

yfc-admin(文件夹)

yfc-harbor(文件夹)

docker-compose.yml:

version : '3.8'

services:

  cmhs-yfc-admin:

    image: cmhs-yfc-admin:latest

    container_name: cmhs-yfc-admin

    restart: always

    mem_limit: 2048m

    build:

      context: yfc-admin

      dockerfile: dockerfile

    env_file:

      - nacos.env

    volumes:

      - /etc/localtime:/etc/localtime:ro

      - ./yfc-admin/logs:/opt/logs/cmhs-yfc-admin

    networks:

      - my-network

  cmhs-yfc-harbor:

    image: cmhs-yfc-harbor:latest

    container_name: cmhs-yfc-harbor

    restart: always

    mem_limit: 2048m

    build:

      context: yfc-harbor

      dockerfile: dockerfile

    env_file:

      - nacos.env

    volumes:

      - /etc/localtime:/etc/localtime:ro

      - ./yfc-harbor/logs:/opt/logs/cmhs-yfc-harbor

    networks:

      - my-network

networks:

  my-network:

external: true

docker build -t cmhs-yfc-admin .

docker build -t cmhs-yfc-harbor .

docker-compose up -d (同时构建两个jar)

编写dockerfile文件

1.文件路径/home/lz/cmhs-

2.创建文件touch Dockerfile

3.编辑文件内容

# 基础镜像

FROM openjdk:8-jdk

# author

MAINTAINER cmhs

# 挂载目录

VOLUME /home/cmhs

# 创建目录

RUN mkdir -p /home/cmhs

# 指定路径

WORKDIR /home/cmhs

# 复制jar文件到路径

COPY ./jar/cmhs-gateway.jar /home/cmhs/cmhs-gateway.jar

# 启动网关服务

ENTRYPOINT ["java","-Xms64m","-Xmx1024m","-jar","cmhs-gateway.jar"]

  1. 构建镜像

docker build -t sunplus:1.0 . #最后的. 表示当前所在目录执行不可缺少

查看是否成功

Docker images;

  1. 启动java jar包

docker run -d \

 -v /home/sunplus:/app \  #挂载宿主机位置 实际启动的是/home/sunplus/下的jar包

 -v /home/sunplus/logs:/app/logs \  #挂载宿主机日志位置

 --name sunplus \

 --network my-network \ #设置与mysql同一网络

 -p 8089:8089 \ #端口

 sunplus:1.0 #容器名称版本号

说明:

--network my-network \ #设置与docker容器里的mysql同一网络

application-pr.yml 数据库连接用myql docker容器名称代替ip

url: jdbc:mysql://mysql:3306/database?

logback配置路径配置为容器路径

<property name="log.path" value="/app/logs" />

  1. 查看启动日志

docker logs -f <容器名称># 实时跟踪日志(类似 tail -f)

并查看宿主机目录文件是否挂载成功 /home/sunplus/logs

安装nginx

  1. 创建文件目录

mkdir -p /home/nginx/html/

mkdir -p /home/nginx/conf/

2.创建编辑配置文件

touch nginx.conf

vim nginx.conf;

以下为配置内容根据需求修改:

user nginx;

worker_processes 8;

error_log /var/log/nginx/error.log notice;

pid /var/run/nginx.pid;

events {

    worker_connections 1024;

}

http {

    include /etc/nginx/mime.types;

    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '

                    '$status $body_bytes_sent "$http_referer" '

                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    sendfile on;

    keepalive_timeout 600;

    gzip on;

    gzip_min_length 1024;

    client_body_buffer_size 400m;

    client_max_body_size 800m;

    underscores_in_headers on;

    upstream gatewaysever {

        least_conn;

        server cmhs-gateway:8080 weight=1 max_fails=3 fail_timeout=30;

    }

    map $http_upgrade $connection_upgrade {

        default upgrade;

        '' close;

    }

    #websocket

    upstream websocketserver {

        server cmhs-gateway:8080;

    }

    include /etc/nginx/conf.d/*.conf;

}

/conf.d/default.conf

server {

    listen 8001;

    listen [::]:8001;

    server_name localhost;

    # apk安装包

    location /apk/ {

        root /usr/share/nginx/html/apk;

        autoindex on;

    }

    

    # 药房 pc端 前端资源

location / {

root /usr/share/nginx/html/yfc-pc/dist;

index index.html index.htm;

# 处理静态资源缓存

try_files $uri $uri/ /index.html;

}

# 匹配静态资源(图片/CSS/JS等)

location ~* \.(gif|jpg|jpeg|png|svg|css|js|flv|ico|swf)$ {

root /usr/share/nginx/html/yfc-pc/dist;

expires max;

access_log off;

}

# 匹配 HTML 文件

location ~* \.(htm|html)$ {

root /usr/share/nginx/html/yfc-pc/dist;

expires -1;

add_header Cache-Control "no-store";

add_header Pragma "no-cache";

}

    # 药房 pda端 前端资源

    location /pharmacy/pda/ {

        alias /usr/share/nginx/html/yfc-pda/dist/;

        if ($request_uri ~ \.(gif|jpg|jpeg|png|svg|css|js|flv|ico|swf)(.*)) {

            expires max;

        }

        if ($request_filename ~* .*\.(?:htm|html)$) {

            expires -1;

            add_header Cache-Control 'no-store';

        }

        try_files $uri $uri/ /index.html /usr/share/nginx/html/yfc-pda/dist/index.html;

        index index.html index.htm;

    }


    # 后端服务统一网关

    location /manager/ {

        proxy_pass http://gatewaysever/;

        proxy_set_header host $host;

        proxy_set_header x-real-ip $remote_addr;

        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;

    }

    error_page 500 502 503 504 /50x.html;

    location = /50x.html {

        root /usr/share/nginx/html;

    }

}

3.加载上传的nginx离线包

docker load -i xx.tar

  1. 创建容器挂载启动

docker run -d \

  --name cmhs-nginx \

  --network my-network \

  -p 9110:8001 \

  -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \

  -v /home/nginx/conf/conf.d:/etc/nginx/conf.d \

  -v /home/nginx/html/yfc-pc/dist:/usr/share/nginx/html/yfc-pc/dist \

  -v /home/nginx/html/yfc-pda/dist:/usr/share/nginx/html/yfc-pda/dist \

-v /home/nginx/html:/usr/share/nginx/html \

  cmhs-nginx:1.0

安装redis

  1. 在有网络的服务器上拉取docker离线压缩包
  2. 上传到目标服务器并加载

docker load -i xx.tar

  1. 启动容器

docker run -d \

  --name cmhs-redis \

  --network my-network \

  -p 6379:6379 \

  cmhs-redis:1.0  

密码自己设置

一些用到的命令

首先停止并删除现有容器(保留数据卷)

docker stop sunplus

docker rm sunplus

删除镜像 docker rmi <IMAGE_ID>

docker build -t sunplus:1.0 .

docker images

Docker ps

Docker logs -f 容器名

chmod 755 xx 授权

docker restart sunplus  重启容器

查看容器ip

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名

验证容器是否在指定网络中

docker inspect 容器名 | grep NetworkMode

容器被删除docker rm nacos

需要重新执行完整的 docker run 命令

元数据(包括挂载卷配置)会被清除,必须重新运行 docker run 并指定 -v

需要修改挂载路径或其他参数

例如,想将 /opt/nacos/data 改为 /data/nacos,必须重新 docker run

sudo netstat -tulnp 查看端口

docker rmi -f abc123def456  # 强制删除(慎用)

cp file.txt /path/to/directory/newfilename.txt

mv oldname.txt newname.txt

导入数据库

docker exec -i mysql mysql -uroot -p123456

 databasename < /home/java/xx.sql

rm -r 逐级删除非空目录(谨慎使用)

rm -rf 

rm file 删除文件

mkdir -p  创建多级目录

touch xx.file 创建文件

systemctl status docker.service

sudo dockerd --debug

查看后100行日志

sudo journalctl -u docker --no-pager -n 50

sudo journalctl -u docker --no-pager -n 100

安装containerd

1. 确认是否已安装 containerd

bash

containerd --version

如果返回版本号(如 containerd 1.6.28),说明已安装但服务未配置。

如果提示 command not found,说明完全未安装。


2. 安装 containerd

Ubuntu/Debian

bash

sudo apt updatesudo apt install -y containerd.io

CentOS/RHEL

bash

sudo yum install -y containerd.io

3. 生成并启用 systemd 服务

(1)创建服务单元文件

bash

sudo mkdir -p /usr/local/lib/systemd/systemsudo nano /usr/local/lib/systemd/system/containerd.service

粘贴以下内容:

[Unit]

Description=containerd container runtimeDocumentation=https://containerd.ioAfter=network.target local-fs.target

[Service]

ExecStartPre=-/sbin/modprobe overlayExecStart=/usr/bin/containerdRestart=alwaysRestartSec=5Delegate=yesKillMode=processOOMScoreAdjust=-999LimitNOFILE=1048576LimitNPROC=infinityLimitCORE=infinity

[Install]

WantedBy=multi-user.target

(2)启用并启动服务

bash

sudo systemctl daemon-reload

sudo systemctl enable --now containerd

sudo systemctl status containerd


4. 配置 containerd

生成默认配置文件:

bash

sudo mkdir -p /etc/containerd

containerd config default | sudo tee /etc/containerd/config.toml

修改配置(如需调整):

bash

sudo nano /etc/containerd/config.toml

确保关键配置:

toml

[grpc]

  address = "/run/containerd/containerd.sock"

重启服务:

bash

sudo systemctl restart containerd


5. 验证安装

bash

sudo ctr images pull docker.io/library/hello-world:latestsudo ctr run docker.io/library/hello-world:latest test

如果成功运行,说明 containerd 已正常工作。


6. 关联 Docker(如果使用 Docker)

确保 Docker 配置指向正确的 containerd.sock

bash

sudo nano /etc/docker/daemon.json

添加:

json

{

  "runtimes": {

    "containerd": {

      "path": "/run/containerd/containerd.sock"

    }

  }}

重启 Docker:

bash

sudo systemctl restart docker

修复containerd

1. 确认 containerd 的安装位置

首先检查 containerd 的实际安装路径:

bash

which containerd

bash

sudo find / -name "containerd" -type f 2>/dev/null

常见正确路径:

/usr/bin/containerd(标准安装)

/usr/local/bin/containerd(手动编译安装)


2. 修复方案

情况 1:containerd 未安装

如果 which containerd 无输出,说明未安装:

bash

# Ubuntu/Debiansudo apt updatesudo apt install -y containerd.io

# CentOS/RHELsudo yum install -y containerd.io

# 验证安装

containerd --version

情况 2:containerd 安装在非默认路径

如果 containerd 存在但路径不是 /usr/local/bin/containerd(例如 /usr/bin/containerd):

bash

# 创建符号链接(推荐)sudo ln -s $(which containerd) /usr/local/bin/containerd

# 或直接修改服务文件sudo nano /usr/lib/systemd/system/containerd.service

将 ExecStart=/usr/local/bin/containerd 改为实际路径:

ini

ExecStart=/usr/bin/containerd

然后重新加载 systemd:

bash

sudo systemctl daemon-reload

sudo systemctl restart containerd

情况 3:手动安装但文件丢失

如果之前手动安装过 containerd 但文件被删除:

bash

# 重新下载二进制文件(以 v1.6.28 为例)wget https://github.com/containerd/containerd/releases/download/v1.6.28/containerd-1.6.28-linux-amd64.tar.gzsudo tar Cxzvf /usr/local containerd-1.6.28-linux-amd64.tar.gz

# 验证文件是否存在ls -l /usr/local/bin/containerd


3. 重建 systemd 服务文件

如果服务文件损坏,重新生成:

bash

sudo mkdir -p /usr/local/lib/systemd/systemsudo nano /usr/local/lib/systemd/system/containerd.service

粘贴以下内容:

ini

[Unit]Description=containerd container runtimeDocumentation=https://containerd.ioAfter=network.target local-fs.target

[Service]ExecStartPre=-/sbin/modprobe overlayExecStart=/usr/bin/containerdRestart=alwaysRestartSec=5Delegate=yesKillMode=processOOMScoreAdjust=-999LimitNOFILE=1048576LimitNPROC=infinityLimitCORE=infinity

[Install]WantedBy=multi-user.target

然后启用服务:

bash

sudo systemctl daemon-reload

sudo systemctl enable --now containerd


4. 验证修复

bash

sudo systemctl status containerd

sudo ctr version  # 测试 containerd 功能

正常输出应显示:

containerd github.com/containerd/containerd v1.6.28 ...

方法2:手动挂载 cgroups

临时解决方案(重启后失效):

sudo mkdir /sys/fs/cgroup/devices

sudo mount -t cgroup -o devices none /sys/fs/cgroup/devices

确保用户有权限访问 Docker

Docker 默认需要 root 或 docker 用户组权限:

# 将当前用户加入 docker 组

sudo usermod -aG docker $USER

# 更新组权限(需重新登录或运行)

newgrp docker

# 检查是否生效groups

⚠️ 重要:重新登录终端或重启生效

5. 常见问题及解决

(1) Containerd 未运行

Docker 依赖 containerd

sudo systemctl status containerd

sudo systemctl start containerd

禁用用户态代理(推荐)

编辑 Docker 配置文件 /etc/docker/daemon.json

sudo nano /etc/docker/daemon.json

添加以下内容(如果文件不存在则新建):

json

{

  "userland-proxy": false}

保存后重启 Docker:

sudo systemctl restart docker

http://www.dtcms.com/a/426781.html

相关文章:

  • 第 2 天:搭建 C 语言开发环境 ——VS Code/Dev-C++/Code::Blocks 安装与配置全指南
  • 基于 Celery 的分布式文件监控系统
  • CATIA二次开发(2)C#启用AOT
  • Linux 驱动开发与内核通信机制——超详细教程
  • 【langgraph】本地部署方法及实例分析
  • Linux入门指南:从零掌握基础指令
  • 做笔记的网站源码江永网站建设
  • 是时候重启了:AIGC将如何重构UI设计师的学习路径与知识体系?
  • uniapp 请求接口封装和使用
  • AIGC重构数据可视化:你是进化中的“驯兽师”还是被替代的“画图工”?
  • Apache Doris 内部数据裁剪与过滤机制的实现原理
  • 专业做网站流程小程序开发步骤大全
  • C语言基础之指针2
  • 淘客网站怎么做 知乎wordpress淘宝联盟插件
  • flink工作流程
  • openHarmony之storage_daemon:分区挂载与设备节点管理机制讲解
  • 建站怎么赚钱个人官方网站怎么建设
  • 学习笔记093——Windows系统如何定时备份远程服务器的mysql文件到本地?
  • 操作系统内核架构深度解析:从单内核、微内核到鸿蒙分布式设计
  • MySQL 架构全景解析
  • .NET MVC中实现后台商品列表功能
  • oracle logwr,ckpt,dbwn 如何协同工作的
  • C# 网络通讯核心知识点笔记
  • Ubuntu之apt安装ClickHouse数据库
  • 在线音乐网站开发现状网站全屏弹出窗口
  • 泛型在Java集合框架中的应用有哪些?
  • 服务器中使用Docker部署前端项目
  • mysql之二进制日志
  • 【完整源码+数据集+部署教程】染色体图像分割系统: yolov8-seg-KernelWarehouse
  • Docker MySQL 使用全流程