【2025】快速部署安装docker以及项目搭建所必要的底子环境(mysql、redis、n ...

打印 上一主题 下一主题

主题 1905|帖子 1905|积分 5715

前言

该文章主要用于实现快速部署docker以及相干web服务所必要的底子环境容器。
编写该文章主要是由于公司的项目前面都是使用jar包进行部署,目进步行升级改造为docker部署。由于jar部署的项目,很容易出现部署人员离职后,如果部署文件写的不敷详细,会造成找 项目部署地址都非常贫苦,并且环境不一致等问题,所以改造为docker部署。
但docker部署每一个服务器都要去重新敲一遍命令部署docker,然后又都还必要去一个个部署项目所必要的相干数据库以及其他的一些中间件就会很累,所以就想到了通过编写.sh文件以及docker compose,实现一键部署。
!!!觉得内容太多了贫苦,可以直接移动到最背面拉取我上传git上的代码下面直接部署
一、介绍

该项目主要包括了docekr-run.sh、docker-compose.yml两个部署文件,以及config文件夹下的mysql、conf、nacos、nginx的用于容器映射的配置文件。

二、修改docker配置

1、修改docker-run.sh脚本

  2、修改docker-compose.yml文件


  • 添加docker-compose.yml
    创建一个docker-compose.yml文件把下面内容复制进去

    • ports:为ip映射,把主机的ip改为自己主机的ip
    • volumes:容器映射,把前面的路径改为自己必要映射的路径(按照我的创建,不消改也可以)
    1. #!/bin/bash
    2. # 如果命令以非零状态退出,则立即退出脚本。
    3. set -e
    4. # 在替换时,将未设置的变量视为错误。
    5. set -u
    6. # 管道命令的返回值将是最后一个以非零状态退出的命令的退出状态,
    7. # 或者如果所有命令都成功退出则返回零。
    8. set -o pipefail
    9. # ========== Docker 安装配置 ==========
    10. # 1. 更新软件包索引并安装必要的依赖
    11. echo "--> 正在更新软件包索引并安装必要的依赖..."
    12. sudo dnf makecache
    13. sudo dnf install -y dnf-utils openssl # 确保 openssl 已安装
    14. # 2. 卸载旧版本的 Docker(如果存在)
    15. echo "--> 正在尝试移除可能存在的旧 Docker 软件包..."
    16. sudo dnf remove -y docker \
    17.                   docker-client \
    18.                   docker-client-latest \
    19.                   docker-common \
    20.                   docker-latest \
    21.                   docker-latest-logrotate \
    22.                   docker-logrotate \
    23.                   docker-engine \
    24.                   docker-ce \
    25.                   docker-ce-cli \
    26.                   containerd.io \
    27.                   runc || true
    28. # 3. 设置 Docker 软件仓库
    29. echo "--> 正在添加官方 Docker 软件仓库..."
    30. sudo yum config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    31. sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo || echo "Sed command skipped or failed, continuing..."
    32. # 4. 安装 Docker 引擎
    33. echo "--> 正在安装 Docker 引擎..."
    34. sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    35. # 5. 确保 Docker 服务启动并设置开机自启(稍后会重启)
    36. echo "--> 正在启动并设置开机自启 Docker 服务 (初始启动)..."
    37. sudo systemctl start docker
    38. sudo systemctl enable docker
    39. sudo systemctl status docker --no-pager
    40. # 6. 确保 /home/docker 和数据目录存在
    41. DOCKER_DATA="/home/docker/docker-data"
    42. echo "--> 确保 Docker 数据目录 '$DOCKER_DATA' 存在..."
    43. sudo mkdir -p $DOCKER_DATA
    44. # ========== 询问用户是否启用 TLS ==========
    45. ENABLE_TLS=""
    46. while [[ "$ENABLE_TLS" != "yes" && "$ENABLE_TLS" != "no" ]]; do
    47.     read -p "是否启用 TLS 以允许安全的远程 Docker 连接? (yes/no): " user_input
    48.     ENABLE_TLS=$(echo "$user_input" | tr '[:upper:]' '[:lower:]') # 转为小写
    49.     if [[ "$ENABLE_TLS" != "yes" && "$ENABLE_TLS" != "no" && "$ENABLE_TLS" != "y" && "$ENABLE_TLS" != "n" ]]; then
    50.         echo "无效输入,请输入 'yes' 或 'no'."
    51.         ENABLE_TLS="" # 重置以便循环继续
    52.     elif [[ "$ENABLE_TLS" == "y" ]]; then
    53.          ENABLE_TLS="yes"
    54.     elif [[ "$ENABLE_TLS" == "n" ]]; then
    55.          ENABLE_TLS="no"
    56.     fi
    57. done
    58. # ========== 根据用户选择执行操作 ==========
    59. if [[ "$ENABLE_TLS" == "yes" ]]; then
    60.     # --- 执行 TLS 证书生成 ---
    61.     echo "===== 用户选择启用 TLS,开始生成 Docker TLS 证书 ====="
    62.     # --- TLS 相关配置信息 ---
    63.     SERVER_IP="10.211.55.6"   # !!! 重要: 使用Docker客户端连接到服务器的实际IP地址
    64.     PASSWORD="123456"        # !!! 重要: 请修改为强密码  !!
    65.     COUNTRY="CN"
    66.     STATE="xx省"
    67.     CITY="xx市"
    68.     ORGANIZATION="xxxx有限公司"
    69.     ORGANIZATIONAL_UNIT="Dev"
    70.     EMAIL="123456@qq.com"
    71.     CERT_DIR="/home/docker/tls" # 定义证书存放目录
    72.     # --- 配置结束 ---
    73.     echo "--> 确保 '/home/docker/tls' 目录存在..."
    74.     sudo mkdir -p $CERT_DIR
    75.     echo "--> 切换到证书目录: $CERT_DIR"
    76.     cd "$CERT_DIR"
    77.     echo "--> 生成 CA 私钥 (ca-key.pem)..."
    78.     openssl genrsa -aes256 -passout pass:$PASSWORD -out ca-key.pem 4096
    79.     echo "--> 生成 CA 证书 (ca.pem)..."
    80.     openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca.pem \
    81.       -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER_IP/emailAddress=$EMAIL"
    82.     echo "--> 生成服务器私钥 (server-key.pem)..."
    83.     openssl genrsa -out server-key.pem 4096
    84.     echo "--> 生成服务器证书签名请求 (server.csr)..."
    85.     openssl req -subj "/CN=$SERVER_IP" -new -key server-key.pem -out server.csr
    86.     echo "--> 使用 CA 签发服务器证书 (server-cert.pem)..."
    87.     echo "subjectAltName = IP:$SERVER_IP" > server-ext.cnf
    88.     openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca-key.pem \
    89.       -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem -extfile server-ext.cnf
    90.     echo "--> 生成客户端私钥 (key.pem)..."
    91.     openssl genrsa -out key.pem 4096
    92.     echo "--> 生成客户端证书签名请求 (client.csr)..."
    93.     openssl req -subj '/CN=client' -new -key key.pem -out client.csr
    94.     echo "--> 创建客户端证书扩展文件 (extfile.cnf)..."
    95.     echo "extendedKeyUsage=clientAuth" > extfile.cnf
    96.     echo "--> 使用 CA 签发客户端证书 (cert.pem)..."
    97.     openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca-key.pem \
    98.       -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem -extfile extfile.cnf
    99.     echo "--> 调整证书和密钥文件权限..."
    100.     # 使用 sudo 确保权限设置成功,即使脚本以非 root 用户执行(但需要 sudo 权限)
    101.     sudo chmod 0774 ca-key.pem key.pem server-key.pem
    102.     sudo chmod 0774 ca.pem server-cert.pem cert.pem
    103.     echo "--> 清理临时文件..."
    104.     rm -f client.csr server.csr server-ext.cnf extfile.cnf ca.srl
    105.     echo "===== TLS 证书生成完成 ====="
    106. else
    107.     # --- 用户选择不启用 TLS ---
    108.     echo "===== 用户选择不启用 TLS ====="
    109.     echo "--> 仅配置镜像加速和数据目录..."
    110. fi
    111.     # --- 配置 daemon.json  ---
    112.     echo "--> 正在写入 '/etc/docker/daemon.json' 配置文件..."
    113.     sudo bash -c 'cat <<EOF > /etc/docker/daemon.json
    114. {
    115.   "registry-mirrors": ["https://zhengfp.cn"],
    116.   "data-root": "$DOCKER_DATA"
    117. }
    118. EOF'
    119. # ========== 应用配置并完成后续步骤 ==========
    120. echo "--> '/etc/docker/daemon.json' 配置写入完成。内容如下:"
    121. sudo cat /etc/docker/daemon.json
    122. # 7. 重启 Docker 服务以应用配置
    123. echo "--> 正在重启 Docker 服务以应用 daemon.json 配置..."
    124. sudo systemctl restart docker
    125. # 8. 验证 Docker 服务状态
    126. echo "--> 正在检查 Docker 服务状态,确认配置已生效..."
    127. sudo systemctl status docker --no-pager
    128. # 9. 将当前用户添加到 docker 组(可选)
    129. echo "--> 正在将当前用户 ($USER) 添加到 'docker' 用户组..."
    130. sudo usermod -aG docker $USER
    131. echo "# 重要提示:                                                         #"
    132. echo "# 用户组更改需要 退出登录 并 重新登录 才能生效。                    #"
    133. echo "# 或者,运行 'newgrp docker' 启动具有新组成员身份的新 Shell。         #"
    134. # 10. 最终验证说明 (根据 TLS 选择显示不同信息)
    135. echo "===== Docker 安装和配置脚本执行完毕 ====="
    136. echo "镜像加速器: https://zhengfp.cn"
    137. echo "数据目录: $DOCKER_DATA"
    138. if [[ "$ENABLE_TLS" == "yes" ]]; then
    139.     echo "######################################################################"
    140.     echo "                                                          "
    141.     echo "# 重要提示:需要到/usr/lib/systemd/system/docker.service目录去配置Docker 的TLS用于远程服务器连接,执行下面命令"
    142.     echo "# >>> 打开docker.service文件                                   "
    143.     echo "   vim /usr/lib/systemd/system/docker.service             "
    144.     echo ""
    145.     echo "# >>> 将下面内容加入到 [Service] 节点的ExecStart后面      "
    146.     echo " -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert=$CERT_DIR/ca.pem --tlscert=$CERT_DIR/server-cert.pem --tlskey=$CERT_DIR/server-key.pem"
    147.     echo ""
    148.     echo " 更新配置:systemctl daemon-reload"
    149.     echo " 重启docker:systemctl restart docker"
    150.     echo " 查看是否启动成功:systemctl status docker"
    151.     echo ""
    152.     echo "######################################################################"
    153.     echo ""
    154.     echo "要从远程客户端连接,你需要以下文件 (位于 $CERT_DIR 目录):"
    155.     echo "  - CA 证书: ca.pem"
    156.     echo "  - 客户端证书: cert.pem"
    157.     echo "  - 客户端私钥: key.pem"
    158.     echo ""
    159.     echo "远程连接命令示例 (需将证书文件复制到客户端):"
    160.     echo "  docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$SERVER_IP:2376 version"
    161.     echo ""
    162.     echo "!!!重要防火墙提示!!!"
    163.     echo "请确保防火墙允许 TCP 端口 2376 的入站连接或。"
    164.     echo "例如,使用 firewalld:"
    165.     echo "  sudo firewall-cmd --permanent --add-port=2376/tcp"
    166.     echo "  sudo firewall-cmd --reload"
    167. else
    168.     echo "Docker 未启用 TLS 远程连接,仅监听在本地 Unix 套接字 unix:///var/run/docker.sock。"
    169.     echo "  docker ps"
    170. fi
    171. echo ""
    172. echo "使用 'docker info | grep -E 'TLS|Hosts|Docker Root Dir|Registry Mirrors|Server Version"' 查看详细配置。"
    复制代码
          

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表