離線環境下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 創建文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77068.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77068.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77068.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式專題-Redis Cluster集群運維與核心原理剖析

一. 哨兵集群與Redis Cluster 架構異同&#xff1a; redis單機內存不會超過10g&#xff0c;如果太大的話bgsave命令的話對單節點壓力過大。 節點多了&#xff0c;之間的通信也會非常緩慢。 redis集群模式下對從節點是沒有讀取操作的&#xff0c;只在主節點進行讀取操作。 哨…

使用 Node.js、Express 和 React 構建強大的 API

了解如何使用 Node.js、Express 和 React 創建一個強大且動態的 API。這個綜合指南將引導你從設置開發環境開始&#xff0c;到集成 React 前端&#xff0c;并利用 APIPost 進行高效的 API 測試。無論你是初學者還是經驗豐富的開發者&#xff0c;這篇文章都適合你。 今天&#…

智慧聲防:構筑海濱浴場安全屏障的應急廣播系

海濱浴場是夏季旅游的熱門目的地&#xff0c;但潮汐變化、離岸流、突發天氣、溺水事故等安全隱患時刻威脅著游客安全。傳統的安全管理依賴人工瞭望和喊話&#xff0c;存在覆蓋范圍有限、響應速度慢等問題。“智慧聲防”應急廣播系統&#xff0c;通過智能化、網絡化、多場景協同…

Redis之緩存穿透

Redis之緩存穿透 文章目錄 Redis之緩存穿透一、什么是緩存穿透&#xff1f;二、緩存穿透常見的解決方案1. 緩存空對象&#xff08;Null Caching&#xff09;2. 布隆過濾器&#xff08;Bloom Filter&#xff09;?3. 互斥鎖&#xff08;Mutex Lock&#xff09;?4. 接口層校驗5.…

【藍橋杯】顏色平衡樹

思路 顏色平衡樹&#xff0c;即子樹中的節點顏色均勻分布。所以要確認一個子樹是否為顏色平衡樹&#xff0c;需要得到它的所有節點的顏色&#xff0c;也就是要深搜它所有的子樹。 這個想法就很標準的啟發式合并了&#xff0c;何為啟發式合并&#xff1f;簡單來說&#xff0c;…

自動化測試工具playwright中文文檔-------14.Chrome 插件

介紹 注意 插件僅在以持久化上下文啟動的 Chrome/Chromium 瀏覽器中工作。請謹慎使用自定義瀏覽器參數&#xff0c;因為其中一些可能會破壞 Playwright 的功能。 以下是獲取位于 ./my-extension 的 Manifest v2 插件背景頁面句柄的代碼示例。 from playwright.sync_api imp…

讓 Python 腳本在后臺持續運行:架構級解決方案與工業級實踐指南

讓 Python 腳本在后臺持續運行&#xff1a;架構級解決方案與工業級實踐指南 一、生產環境需求全景分析 1.1 后臺進程的工業級要求矩陣 維度開發環境要求生產環境要求容災要求可靠性單點運行集群部署跨機房容災可觀測性控制臺輸出集中式日志分布式追蹤資源管理無限制CPU/Memo…

MyBatis 詳解

1. 什么是 MyBatis&#xff1f; MyBatis 是一款優秀的 持久層框架&#xff0c;它通過 XML 或注解配置&#xff0c;將 Java 對象&#xff08;POJO&#xff09;與數據庫操作&#xff08;SQL&#xff09;進行靈活映射&#xff0c;簡化了 JDBC 的復雜操作。 核心思想&#xff1a;S…

循環神經網絡 - 深層循環神經網絡

如果將深度定義為網絡中信息傳遞路徑長度的話&#xff0c;循環神經網絡可以看作既“深”又“淺”的網絡。 一方面來說&#xff0c;如果我們把循環網絡按時間展開&#xff0c;長時間間隔的狀態之間的路徑很長&#xff0c;循環網絡可以看作一個非常深的網絡。 從另一方面來 說&…

GoLand 標紅但程序可正常運行:由符號索引緩存失效引起的假報錯問題

問題描述&#xff1a; 在 GoLand 中&#xff0c;api/tls.go 文件中引用了 api/type.go 中定義的結構體 Options&#xff0c;但 GoLand 把 Options 標紅顯示為未定義&#xff08;undefined symbol&#xff09;&#xff0c;盡管程序實際可以正常編譯和運行&#xff08;go build /…

python-各種文件(txt,xls,csv,sql,二進制文件)讀寫操作、文件類型轉換、數據分析代碼講解

1.文件txt讀寫標準用法 1.1寫入文件 要讀取文件&#xff0c;首先得使用 open() 函數打開文件。 file open(file_path, moder, encodingNone) file_path&#xff1a;文件的路徑&#xff0c;可以是絕對路徑或者相對路徑。mode&#xff1a;文件打開模式&#xff0c;r 代表以…

Uniapp:確認框

目錄 一、 出現場景二、 效果展示三、具體使用 一、 出現場景 在項目的開發中&#xff0c;會經常出現刪除數據的情況&#xff0c;如果直接刪除的話&#xff0c;可能會存在誤刪&#xff0c;用戶體驗不好&#xff0c;所以需要增加一個消息提示&#xff0c;提醒用戶是否刪除。 二…

解密 Vue 打包策略

1. 總體概述 在現代前端開發中&#xff0c;Vue 已成為流行框架之一&#xff0c;開發者通常使用 webpack、vite 或 vue-cli 來構建項目。可能會困惑&#xff1a; 為什么源碼中的資源引用路徑與打包后實際產出的路徑會不一樣&#xff1f;靜態路徑與動態路徑到底如何正確書寫&am…

Golang|接口并發測試和壓力測試

文章目錄 這里出現某些獎品和數據庫中庫存量不一致的問題原因就是在并發的情況下&#xff0c;sync.Map仍然會出現臟寫問題&#xff0c;就是在同時操作下的操作覆蓋問題可以先把數據放到channel里&#xff0c;然后用一個單一的協程負責讀取channel并寫入map

CentOS下,Xftp中文文件名亂碼的處理方式

亂碼原因 中文版Windows默認使用GBK編碼&#xff0c;現代Linux發行版&#xff08;如CentOS、Ubuntu等&#xff09;默認使用UTF-8編碼。Windows下正常的編碼&#xff0c;可能在linux下無法識別&#xff0c;例如&#xff1a;Windows的GBK字節0xD6D0被Linux用UTF-8解碼時&#xf…

解決 Vue 中 input 輸入框被賦值后,無法再修改和編輯的問題

目錄 需求&#xff1a; 出現 BUG&#xff1a; Bug 代碼復現 解決問題&#xff1a; 解決方法1&#xff1a; 解決方法2 關于 $set() 的補充&#xff1a; 需求&#xff1a; 前段時間&#xff0c;接到了一個需求&#xff1a;在選擇框中選中某個下拉菜單時&#xff0c;對應的…

【含文檔+PPT+源碼】基于微信小程序的衛生院預約掛號管理系統的設計與實現

項目視頻介紹&#xff1a; 畢業作品基于微信小程序的衛生院預約掛號管理系統的設計與實現 課程簡介&#xff1a; 本課程演示的是一款基于微信小程序的衛生院預約掛號管理系統的設計與實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習…

【Vue】案例——To do list:

【Vue】案例——To do list&#xff1a; 一、案例介紹&#xff1a;二、效果展示&#xff08;如圖&#xff09;三、主要功能&#xff1a;四、技術要點&#xff1a;補充&#xff1a;【Vue】Vue模板語法(點擊可跳轉)補充&#xff1a;【Vue】數據綁定&#xff08;單雙向&#xff09…

導入 .sql 文件到 云服務器上的MySQL中

導入 .sql 文件到 云服務器上的MySQL中 步驟 1&#xff1a;確保 .sql 文件已上傳到云服務器步驟 2&#xff1a;登錄到云服務器步驟 3&#xff1a;檢查文件是否成功傳輸步驟 4&#xff1a;登錄 MySQL步驟 5&#xff1a;創建空數據庫&#xff08;如果尚未創建&#xff09;步驟 6&…

我的機器學習之路(初稿)

文章目錄 一、機器學習定義二、核心三要素三、算法類型詳解1. 監督學習&#xff08;帶標簽數據&#xff09;2. 無監督學習&#xff08;無標簽數據&#xff09;3. 強化學習&#xff08;決策優化&#xff09;(我之后主攻的方向) 四、典型應用場景五、學習路線圖六、常見誤區警示七…