根据本文脚本展示内容可以实现多种容器挂载
演示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
else
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
fi
yum clear all
yum 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; then
echo "正在安装 Docker..."
curl -fsSL https://get.docker.com | bash -s docker
systemctl start docker
systemctl enable docker
else
echo "Docker 已安装,跳过安装步骤"
fi
}
# 创建 Docker 网络
create_network() {
if ! docker network inspect ${DOCKER_NETWORK} &> /dev/null; then
docker 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 || true
echo "启动 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_change
install_docker
create_directories
create_network
start_mysql
start_nginx
start_redis
start_elasticsearch
echo ""
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 "$@"
有问题可以在评论区讨论