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

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.xdnf.cn/news/408007.html

相关文章:

  • 【分享】利用自定义表单,文件摆渡系统实现数据合规与高效流转
  • Spark,hadoop 集群的常用命令
  • 科技快讯 | 字节跳动开源一款Deep Research项目;全球首个氮化镓量子光源芯片发布
  • 如何使用 Winget 命令安装 Microsoft Teams
  • 2.2 微积分的解释
  • Xubuntu系统详解
  • 解决pip安装PyPI默认源速度慢
  • TCPIP详解 卷1协议 八 ICMPv4和ICMPv6 Internet控制报文协议
  • Bash 执行命令的基本流程
  • [Java][Leetcode middle] 121. 买卖股票的最佳时机
  • tensorflow-cpu
  • 9.渐入佳境 -- 套接字的多种可选项
  • 配置yarn模式
  • 使用 gma 绘制汉魏洛阳城
  • 针对面试-mysql篇
  • 人工智能100问☞第21问:神经网络如何模拟人脑结构?
  • 自适应主从复制模拟器的构建与研究
  • mysql dump 导入导出用法
  • 2024河南省赛vp补题
  • SQL:JOIN 进阶
  • 基于大模型的原发性醛固酮增多症全流程预测与诊疗方案研究
  • UI自动化测试框架:PO 模式+数据驱动
  • 【深度学习】目标检测算法大全
  • 数组对象 按照对象中的某个字段排序
  • 《Python星球日记》 第59天:生成对抗网络(GAN)
  • labview硬件采集<2>——使用布尔控件控制硬件的LED
  • java----------->代理模式
  • Python爬虫实战:研究ajax异步渲染加密
  • 全球变暖-bfs
  • 健康养生指南:解锁活力生活的科学密码