shell脚本实现docker运行镜像挂载

发布于:2025-05-16 ⋅ 阅读:(14) ⋅ 点赞:(0)

根据本文脚本展示内容可以实现多种容器挂载

演示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 
  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 "$@"

有问题可以在评论区讨论


网站公告

今日签到

点亮在社区的每一天
去签到