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.mzph.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…