根据本文脚本展示内容可以实现多种容器挂载
演示nginx挂载
创建挂载目录
mkdir -p /data/nginx/{conf,html,logs}
参数含义:
--name
docker run -d
给运行的镜像取名 -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 "$@"
有问题可以在评论区讨论