根據本文腳本展示內容可以實現多種容器掛載
演示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 "$@"
有問題可以在評論區討論