shell腳本實現docker運行鏡像掛載

根據本文腳本展示內容可以實現多種容器掛載

演示nginx掛載

創建掛載目錄
??? mkdir -p? /data/nginx/{conf,html,logs}?

參數含義:

docker run -d --name? 給運行的鏡像取名 -v /宿主機/目錄:/容器內/目錄?鏡像名

示例:

docker啟動nginx(當前使用docker默認網絡)

??? docker run -d --name nginx \
??????? -p 80:80 \
??????? -v /data/nginx/conf:/etc/nginx/conf.d \
??????? -v /data/nginx/html:/usr/share/nginx/html \
??????? -v /data/nginx/logs:/var/log/nginx \
??????? --restart unless-stopped \
??????? nginx:latest

完整shell腳本(包含Redis,MySQL,es,nginx)

若有需要,可自行擴展

#!/bin/bash# 配置參數(可根據需求修改)
DOCKER_NETWORK="my_network"                # 自定義 Docker 網絡
VOLUME_DIR="./docker_data"                  # 掛載目錄根路徑# MySQL 配置
MYSQL_ROOT_PASSWORD="RootPass123!"         # MySQL root 密碼
MYSQL_PORT=3306                            # 映射的 MySQL 端口# Nginx 配置
NGINX_HTTP_PORT=80                         # HTTP 端口
NGINX_HTTPS_PORT=443                       # HTTPS 端口# Redis 配置
REDIS_PASSWORD="RedisPass123!"             # Redis 密碼
REDIS_PORT=6379                            # 映射的 Redis 端口# Elasticsearch 配置
ES_PORT=9200                               # REST API 端口
ES_TCP_PORT=9300                           # 集群通信端口#yum源替換
yum_change(){echo '替換為阿里源'if -e /etc/yum.repo.d/ CentOS-Base.repo ; then mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak elsecurl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repofiyum clear allyum makecache
}# 創建掛載目錄
create_directories() {echo "創建掛載目錄..."mkdir -p \${VOLUME_DIR}/mysql/{data,conf.d} \${VOLUME_DIR}/nginx/{conf,html,logs} \${VOLUME_DIR}/redis/data \${VOLUME_DIR}/elasticsearch/{data,plugins}# 設置 Elasticsearch 目錄權限chmod -R 777 ${VOLUME_DIR}/elasticsearch
}# 安裝 Docker
install_docker() {if ! command -v docker &> /dev/null; thenecho "正在安裝 Docker..."curl -fsSL https://get.docker.com | bash -s dockersystemctl start dockersystemctl enable dockerelseecho "Docker 已安裝,跳過安裝步驟"fi
}# 創建 Docker 網絡
create_network() {if ! docker network inspect ${DOCKER_NETWORK} &> /dev/null; thendocker network create ${DOCKER_NETWORK}fi
}# 啟動 MySQL
start_mysql() {echo "啟動 MySQL 容器..."docker run -d --name mysql \--network ${DOCKER_NETWORK} \-p ${MYSQL_PORT}:3306 \-v ${VOLUME_DIR}/mysql/data:/var/lib/mysql \-v ${VOLUME_DIR}/mysql/conf.d:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \--restart unless-stopped \mysql:8.0
}# 啟動 Nginx
start_nginx() {echo "啟動 Nginx 容器..."docker run -d --name nginx \--network ${DOCKER_NETWORK} \-p ${NGINX_HTTP_PORT}:80 \-p ${NGINX_HTTPS_PORT}:443 \-v ${VOLUME_DIR}/nginx/conf:/etc/nginx/conf.d \-v ${VOLUME_DIR}/nginx/html:/usr/share/nginx/html \-v ${VOLUME_DIR}/nginx/logs:/var/log/nginx \--restart unless-stopped \nginx:latest
}# 啟動 Redis
start_redis() {echo "啟動 Redis 容器..."docker run -d --name redis \--network ${DOCKER_NETWORK} \-p ${REDIS_PORT}:6379 \-v ${VOLUME_DIR}/redis/data:/data \-e REDIS_PASSWORD=${REDIS_PASSWORD} \--restart unless-stopped \redis:alpine \redis-server --requirepass ${REDIS_PASSWORD}
}# 啟動 Elasticsearch
start_elasticsearch() {echo "配置系統參數..."sysctl -w vm.max_map_count=262144 2>/dev/null || trueecho "啟動 Elasticsearch 容器..."docker run -d --name elasticsearch \--network ${DOCKER_NETWORK} \-p ${ES_PORT}:9200 \-p ${ES_TCP_PORT}:9300 \-v ${VOLUME_DIR}/elasticsearch/data:/usr/share/elasticsearch/data \-v ${VOLUME_DIR}/elasticsearch/plugins:/usr/share/elasticsearch/plugins \-e "discovery.type=single-node" \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \--restart unless-stopped \elasticsearch:8.13.0
}# 主執行流程
main() {set -e  # 遇到錯誤立即退出yum_changeinstall_dockercreate_directoriescreate_networkstart_mysqlstart_nginxstart_redisstart_elasticsearchecho ""echo "========================================"echo "所有服務已成功部署!"echo "服務訪問信息:"echo "- MySQL:     localhost:${MYSQL_PORT} (root/${MYSQL_ROOT_PASSWORD})"echo "- Nginx:     http://localhost:${NGINX_HTTP_PORT}"echo "- Redis:     localhost:${REDIS_PORT} (密碼: ${REDIS_PASSWORD})"echo "- Elasticsearch: http://localhost:${ES_PORT}"echo "========================================"echo "掛載目錄路徑: $(realpath ${VOLUME_DIR})"
}main "$@"

有問題可以在評論區討論

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

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

相關文章

WiseAD:基于視覺-語言模型的知識增強型端到端自動駕駛——論文閱讀

《WiseAD: Knowledge Augmented End-to-End Autonomous Driving with Vision-Language Model》2024年12月發表,來自新加坡國立和浙大的論文。 在快速發展的視覺語言模型(VLM)中,一般人類知識和令人印象深刻的邏輯推理能力的出現&a…

NestJS 知識框架

一、核心概念 1. 架構基礎 基于 Express/Fastify 的 Node.js 框架 采用模塊化設計 使用 TypeScript 構建(也支持 JavaScript) 借鑒 Angular 的設計理念 2. 主要組件 模塊 (Module): 應用的基本組織單元 控制器 (Controller): 處理 HTTP 請求 服務…

深入理解 Istio v1.25.2

要深入理解 Istio 的最新版本(截至 2025 年 5 月,最新版本為 1.25.2,發布Iweb:1?)源碼,我們可以通過分析其核心組件和代碼結構來加深對 Istio 的理解。以下是對 Istio 源碼的解讀,結合其架構和功能&#x…

星際籃球爭霸賽/MVP爭奪戰 - 華為OD機試真題(A卷、Java題解)

華為OD機試題庫《C》限時優惠 9.9 華為OD機試題庫《Python》限時優惠 9.9 華為OD機試題庫《JavaScript》限時優惠 9.9 針對刷題難,效率慢,我們提供一對一算法輔導, 針對個人情況定制化的提高計劃(全稱1V1效率更高)。 看…

Kubernetes etcd 故障恢復(1)

1.查看集群狀態 獲取主節點和故障節點id ETCDCTL_API3 ./etcdctl --cacert/etc/kubernetes/ssl/new-ca.pem --cert/etc/kubernetes/ssl/etcd.pem --key/etc/kubernetes/ssl/etcd-key.pem --endpoints"https://192.168.7.132:2379,https://192.168.7.134:2379,https://19…

在UI原型設計中,低、高保真原型圖有什么區別?

在數字產品開發中,原型(Prototype) 是連接創意與落地的橋梁。它通過可視化的方式驗證功能、交互與用戶體驗,避免開發資源浪費。而低保真(Lo-Fi)與高保真(Hi-Fi)原型,則是…

使用FastAPI和React以及MongoDB構建全棧Web應用02 前言

Who this book is for 本書適合哪些人閱讀 This book is designed for web developers who aspire to build robust, scalable, and efficient web applications. It caters to a broad spectrum of developers, from those with foundational knowledge to experienced prof…

linux下minio的進程管理腳本

準備工作: 參考鏈接: Deploy MinIO: Single-Node Single-Drive — MinIO Object Storage for Linux 下載: wget https://dl.min.io/server/minio/release/linux-amd64/minio kill-app.sh #!/bin/bash # 文件名: kill-app.sh…

【Linux】編譯安裝 opencv 并鏈接到 VSCode

一、背景 最近打算把現有的一個 python 程序用 c 重寫,進一步提升性能。編輯器使用 VSCode,三方庫需要用到 opencv,要進行編譯安裝。 二、編譯安裝 opencv 1. 更新源 sudo apt update && sudo apt upgrade 2. 安裝依賴庫 安裝編…

Ubuntu 安裝 HAProxy

HAProxy 是什么 HAProxy(High Availability Proxy) 是一個 高性能、高可用的 TCP 和 HTTP 負載均衡器與代理服務器。 HAProxy 的特點 特性說明支持協議HTTP、HTTPS、TCP高性能使用 C 語言編寫,性能極高高可用與 Keepalived 配合可實現主備健…

Mysql--基礎知識點--91.2--processlist

在 MySQL 中,SHOW PROCESSLIST 是一個常用命令,用于查看當前數據庫服務器上所有正在運行的線程(進程)信息。以下是關鍵點說明: 1. 命令用法 SHOW FULL PROCESSLIST;輸出字段: 列名含義Id線程唯一標識符&am…

Git標簽刪除腳本解析與實踐:輕松管理本地與遠程標簽

Git 標簽刪除腳本解析與實踐:輕松管理本地與遠程標簽 在 Git 版本控制系統中,標簽常用于標記重要的版本節點,方便追溯和管理項目的不同階段。隨著項目的推進,一些舊標簽可能不再需要,此時就需要對它們進行清理。本文將通過一個完整的腳本,詳細介紹如何刪除本地和遠程的 …

K8S - Harbor 鏡像倉庫部署與 GitLab CI 集成實戰

引言 在 Kubernetes 環境中,容器鏡像的存儲與管理至關重要。企業級鏡像倉庫(如 Harbor)為團隊提供了安全、穩定、可擴展的鏡像管理解決方案。 一、Harbor 安裝與配置 Harbor 是由 VMware 開源的企業級云原生鏡像倉庫,它不僅支持…

2025年best好用的3dsmax插件和腳本

copitor 可以從一個3dsmax場景里將物體直接復制到另一個場景中 Move to surface 這個插件可以將一些物體放到一個平面上 instancer 實體器,舉例:場景中有若干獨立的光源,不是實體對象,我們可以使用instancer將他變成實體。 paste …

Python爬蟲實戰:研究nodejs aes加密

1. 引言 1.1 研究背景與意義 在當今數字化時代,Web 數據的價值日益凸顯。通過爬蟲技術獲取公開數據并進行分析,能夠為企業決策、學術研究等提供有力支持。然而,為了保護數據安全和隱私,許多網站采用了加密技術對數據進行保護,其中 AES 加密是一種常見且安全的加密算法。…

LGDRL:基于大型語言模型的深度強化學習在自動駕駛決策中的應用

《Large Language Model guided Deep Reinforcement Learning for Decision Making in Autonomous Driving》2024年12月發表,來自北理工的論文。 深度強化學習(DRL)在自動駕駛決策方面顯示出巨大的潛力。然而,由于DRL的學習效率低…

TDEngine 與 Grafana

目錄 實踐目錄 Grafana 參考文檔 實踐目錄 10.60.100.194:/home/dualven/tdengine Grafana systemctl status grafana-server http://10.60.100.194:3000/ 這個端口與mydoor的new server服務沖突 (同時只開一個) 參考文檔 運行監…

Edge瀏覽器打開PDF文件顯示空白(每次需要等上一會)

概述 部分pdf文件用edge瀏覽器打開顯示空白,需要等一會才能顯示出來,這很讓人難以接受,用其他瀏覽器和pdf閱讀器打開是正常的,該怎么操作解決,卸載重裝,修復,重置瀏覽器等都無效。 解決辦法 可…

uniapp小程序輪播圖高度自適應優化詳解

在微信小程序開發過程中,輪播圖組件(swiper)是常用的UI元素,但在實際應用中經常遇到高度不匹配導致的空白問題。本文詳細記錄了一次輪播圖高度優化的完整過程,特別是針對固定寬高比圖片的精確適配方案。 問題背景 在開發"零工市場&quo…

Android第三次面試總結之網絡篇補充

一、網絡模型:OSI 七層 vs TCP/IP 四層(必考點) 1. 分層模型對比 OSI 七層模型TCP/IP 四層模型核心功能Android 相關場景應用層(7 層)應用層定義數據格式(HTTP/HTTPS/FTP/API)OkHttp/Retrofit…