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

离线环境下docker启动springboot项目

Docker linux 离线部署springboot

搭建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

   ```

6.修改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 /home/mysql/log

Mkdir /home/mysql/data

Mkdir /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/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.27 

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

56ecdc8667fa807506988884deaaa6abd824a9d0995da77bbfc4782bfcac54e9

  1. 连接验证

Docker ps / docker images

登录

docker exec -it mysql  mysql -uroot -p123456

安装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;

编写Dockerfile文件

1.文件路径/home/sunplus/

2.创建文件touch Dockerfile

3.编辑文件内容

FROM openjdk:8-jdk

#时区 

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \

        echo $TZ > /etc/timezone

#容器目录

WORKDIR /app

复制java jar包从宿主机路径位置(/home/sunplus/sunplus-cloudclinic.jar)

到容器位置(xxxxx/app/sunplus-cloudclinic.jar)

COPY  ./sunplus-cloudclinic.jar  ./sunplus-cloudclinic.jar

RUN mkdir -p /app/logs && \ #创建容器日志目录并授权

        chmod -R 777 /app/logs

#变量 下面启动用 

ENV JAVA_OPTS="-Xms512m -Xmx512m -XX:-HeapDumpOnOutOfMemoryError" \

    SPRING_PROFILES_ACTIVE=local

#指定服务端口 

EXPOSE 8089

# 指定docker容器启动时运行jar包 (java -jar xx.jar) ./sunplus-cloudclinic.jar容器jar位置

CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar ./sunplus-cloudclinic.jar

  1. 构建镜像

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

.:这个点表示构建上下文(context)的路径

  • 这里指的是当前目录

  • Docker 会查找当前目录下的 Dockerfile 文件来构建镜像

查看是否成功

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;

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

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {

types {

text/html                             html htm shtml;

text/css                              css;

text/xml                              xml;

image/gif                             gif;

image/jpeg                            jpeg jpg;

application/javascript                js;

image/png                             png;

}

        listen       80;

        server_name  localhost;

       

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

location ~* \.(html|htm|gif|jpg|svg|jpeg|bmp|png|ico|txt|js|css|ttf)$  {

            root   /home/nginx/html/cloudclinich5;

            index  index.html;

            try_files $uri $uri/ /index.html;

}

location / {

proxy_pass http://sunplus:8089;

}

        

    }

}

3.加载上传的nginx离线包

docker load -i xx.tar

4.创建容器挂载启动

docker run -d \

  --name nginx \

  --network my-network \

  -p 80:80 \

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

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

  cmhs-nginx:1.0

安装redis

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

docker load -i xx.tar

  1. 启动容器

docker run -d \

  --name redis \

  --network my-network \

  -p 6379:6379 \

  -e REDIS_PASSWORD=123456\

  cmhs-redis:1.0 \

  redis-server --requirepass 123456

一些用到的命令

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

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 exec -i mysql mysql -uroot -p123456

 databasename < /home/java/xx.sql

rm -r 逐级删除非空目录

Rm file 删除文件

mkdir -p  创建多级目录

Touch xx.file 创建文件

相关文章:

  • 过往记录系列 篇五:市场黑天鹅事件历史梳理
  • 众趣科技丨数字孪生技术,赋能交通公共设施管理数字化升级
  • C++有关内存的那些事
  • SQL Server AlwaysOn (SQL 查询数据详解及监控用途)
  • 《Vue Router实战教程》4.路由的匹配语法
  • 为啥物联网用MQTT?
  • 电子元器件 + 模拟电路硬件零基础入门
  • 3.1.3.2 Spring Boot使用Servlet组件
  • Java 基础(4)—Java 对象布局及偏向锁、轻量锁、重量锁介绍
  • 从算法到应用:DeepSeek 如何重塑 AI 交互新范式?
  • Transformers 是工具箱,BERT 是工具。
  • 响应“十四五”新型储能规划!储能电站如何用高精度电表满足“双向计量”要求?
  • 服务器安装Jupyter Notebook
  • 软考系统架构设计师之物联网与边缘计算笔记
  • 深入解析多表联查(MySQL)
  • ubuntu 20.04 安装源码编译 ros humble过程
  • 基于混合编码器和边缘引导的拉普拉斯金字塔网络用于遥感变化检测
  • c# 数据结构 链表篇 有关单链表的一切
  • java 项目
  • AI多模态论文解读:OmniCaptioner:多领域视觉描述生成框架(附脑图)
  • 网站全屏大图代码/seo搜索优化 指数
  • 有做网站吗/友情链接平台网站
  • 做网站时无法上传图片/建网站建设
  • wordpress贴吧吧/手机网站排名优化软件
  • wordpress 安装500/郑州seo线上推广系统
  • app开发需要多久/seo优化推广教程