最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

部署安裝docker及項(xiàng)目搭建所需要的基礎(chǔ)環(huán)境實(shí)踐(mysql、redis、nginx、nacos)

 更新時(shí)間:2025年07月18日 17:12:49   作者:方漸鴻  
本文介紹通過docker-run.sh和docker-compose.yml實(shí)現(xiàn)一鍵部署Docker及Web服務(wù),解決環(huán)境不一致問題,包含MySQL、Nacos、Nginx等配置,并提供GitHub代碼鏈接便于直接使用

前言

該文章主要用于實(shí)現(xiàn)快速部署docker以及相關(guān)web服務(wù)所需要的基礎(chǔ)環(huán)境容器。

編寫該文章主要是因?yàn)楣镜捻?xiàng)目前面都是使用jar包進(jìn)行部署,目前進(jìn)行升級改造為docker部署。因?yàn)閖ar部署的項(xiàng)目,很容易出現(xiàn)部署人員離職后,如果部署文件寫的不夠詳細(xì),會造成找 項(xiàng)目部署地址都非常麻煩,并且環(huán)境不一致等問題,所以改造為docker部署。

但docker部署每一個(gè)服務(wù)器都要去重新敲一遍命令部署docker,然后又都還需要去一個(gè)個(gè)部署項(xiàng)目所需要的相關(guān)數(shù)據(jù)庫以及其他的一些中間件就會很累,所以就想到了通過編寫.sh文件以及docker compose,實(shí)現(xiàn)一鍵部署。

?。。∮X得內(nèi)容太多了麻煩,可以直接移動(dòng)到最后面拉取我上傳git上的代碼下面直接部署

一、介紹

該項(xiàng)目主要包括了docekr-run.sh、docker-compose.yml兩個(gè)部署文件,以及config文件夾下的mysql、conf、nacos、nginx的用于容器映射的配置文件。

二、修改docker配置

1、修改docker-run.sh腳本

CentOS部署文件

創(chuàng)建一個(gè)docker-run.sh文件。然后把下面的腳本復(fù)制進(jìn)去,

  • 修改DOCKER_DATA=""改為自己要存儲docker容器的目錄。
  • 修改SERVER_IP= ip改為自己服務(wù)器的ip地址
  • 修改自己公司的信息
  • 修改CERT_DIR="/home/docker/tls"為自己要存放tls證書的目錄地址(如果要進(jìn)行遠(yuǎn)程TCP連接)
#!/bin/bash

# 如果命令以非零狀態(tài)退出,則立即退出腳本。
set -e
# 在替換時(shí),將未設(shè)置的變量視為錯(cuò)誤。
set -u
# 管道命令的返回值將是最后一個(gè)以非零狀態(tài)退出的命令的退出狀態(tài),
# 或者如果所有命令都成功退出則返回零。
set -o pipefail

# ========== Docker 安裝配置 ==========

# 1. 更新軟件包索引并安裝必要的依賴
echo "--> 正在更新軟件包索引并安裝必要的依賴..."
sudo dnf makecache
sudo dnf install -y dnf-utils openssl # 確保 openssl 已安裝

# 2. 卸載舊版本的 Docker(如果存在)
echo "--> 正在嘗試移除可能存在的舊 Docker 軟件包..."
sudo dnf remove -y docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  docker-ce \
                  docker-ce-cli \
                  containerd.io \
                  runc || true

# 3. 設(shè)置 Docker 軟件倉庫
echo "--> 正在添加官方 Docker 軟件倉庫..."
sudo yum config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
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..."

# 4. 安裝 Docker 引擎
echo "--> 正在安裝 Docker 引擎..."
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 5. 確保 Docker 服務(wù)啟動(dòng)并設(shè)置開機(jī)自啟(稍后會重啟)
echo "--> 正在啟動(dòng)并設(shè)置開機(jī)自啟 Docker 服務(wù) (初始啟動(dòng))..."
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker --no-pager

# 6. 確保 /home/docker 和數(shù)據(jù)目錄存在
DOCKER_DATA="/home/docker/docker-data"

echo "--> 確保 Docker 數(shù)據(jù)目錄 '$DOCKER_DATA' 存在..."
sudo mkdir -p $DOCKER_DATA

# ========== 詢問用戶是否啟用 TLS ==========
ENABLE_TLS=""
while [[ "$ENABLE_TLS" != "yes" && "$ENABLE_TLS" != "no" ]]; do
    read -p "是否啟用 TLS 以允許安全的遠(yuǎn)程 Docker 連接? (yes/no): " user_input
    ENABLE_TLS=$(echo "$user_input" | tr '[:upper:]' '[:lower:]') # 轉(zhuǎn)為小寫
    if [[ "$ENABLE_TLS" != "yes" && "$ENABLE_TLS" != "no" && "$ENABLE_TLS" != "y" && "$ENABLE_TLS" != "n" ]]; then
        echo "無效輸入,請輸入 'yes' 或 'no'."
        ENABLE_TLS="" # 重置以便循環(huán)繼續(xù)
    elif [[ "$ENABLE_TLS" == "y" ]]; then
         ENABLE_TLS="yes"
    elif [[ "$ENABLE_TLS" == "n" ]]; then
         ENABLE_TLS="no"
    fi
done

# ========== 根據(jù)用戶選擇執(zhí)行操作 ==========
if [[ "$ENABLE_TLS" == "yes" ]]; then
    # --- 執(zhí)行 TLS 證書生成 ---
    echo "===== 用戶選擇啟用 TLS,開始生成 Docker TLS 證書 ====="

    # --- TLS 相關(guān)配置信息 ---
    SERVER_IP="10.211.55.6"   # !?。?重要: 使用Docker客戶端連接到服務(wù)器的實(shí)際IP地址
    PASSWORD="123456"        # ?。?! 重要: 請修改為強(qiáng)密碼  !!
    COUNTRY="CN"
    STATE="xx省"
    CITY="xx市"
    ORGANIZATION="xxxx有限公司"
    ORGANIZATIONAL_UNIT="Dev"
    EMAIL="123456@qq.com"
    CERT_DIR="/home/docker/tls" # 定義證書存放目錄
    # --- 配置結(jié)束 ---
    echo "--> 確保 '/home/docker/tls' 目錄存在..."
    sudo mkdir -p $CERT_DIR

    echo "--> 切換到證書目錄: $CERT_DIR"
    cd "$CERT_DIR"

    echo "--> 生成 CA 私鑰 (ca-key.pem)..."
    openssl genrsa -aes256 -passout pass:$PASSWORD -out ca-key.pem 4096

    echo "--> 生成 CA 證書 (ca.pem)..."
    openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca.pem \
      -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER_IP/emailAddress=$EMAIL"

    echo "--> 生成服務(wù)器私鑰 (server-key.pem)..."
    openssl genrsa -out server-key.pem 4096

    echo "--> 生成服務(wù)器證書簽名請求 (server.csr)..."
    openssl req -subj "/CN=$SERVER_IP" -new -key server-key.pem -out server.csr

    echo "--> 使用 CA 簽發(fā)服務(wù)器證書 (server-cert.pem)..."
    echo "subjectAltName = IP:$SERVER_IP" > server-ext.cnf
    openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca-key.pem \
      -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem -extfile server-ext.cnf

    echo "--> 生成客戶端私鑰 (key.pem)..."
    openssl genrsa -out key.pem 4096

    echo "--> 生成客戶端證書簽名請求 (client.csr)..."
    openssl req -subj '/CN=client' -new -key key.pem -out client.csr

    echo "--> 創(chuàng)建客戶端證書擴(kuò)展文件 (extfile.cnf)..."
    echo "extendedKeyUsage=clientAuth" > extfile.cnf

    echo "--> 使用 CA 簽發(fā)客戶端證書 (cert.pem)..."
    openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca-key.pem \
      -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem -extfile extfile.cnf

    echo "--> 調(diào)整證書和密鑰文件權(quán)限..."
    # 使用 sudo 確保權(quán)限設(shè)置成功,即使腳本以非 root 用戶執(zhí)行(但需要 sudo 權(quán)限)
    sudo chmod 0774 ca-key.pem key.pem server-key.pem
    sudo chmod 0774 ca.pem server-cert.pem cert.pem

    echo "--> 清理臨時(shí)文件..."
    rm -f client.csr server.csr server-ext.cnf extfile.cnf ca.srl

    echo "===== TLS 證書生成完成 ====="


else

    # --- 用戶選擇不啟用 TLS ---
    echo "===== 用戶選擇不啟用 TLS ====="
    echo "--> 僅配置鏡像加速和數(shù)據(jù)目錄..."

fi

    # --- 配置 daemon.json  ---
    echo "--> 正在寫入 '/etc/docker/daemon.json' 配置文件..."
    sudo bash -c 'cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": ["https://zhengfp.cn"],
  "data-root": "$DOCKER_DATA"
}

EOF'


# ========== 應(yīng)用配置并完成后續(xù)步驟 ==========
echo "--> '/etc/docker/daemon.json' 配置寫入完成。內(nèi)容如下:"
sudo cat /etc/docker/daemon.json

# 7. 重啟 Docker 服務(wù)以應(yīng)用配置
echo "--> 正在重啟 Docker 服務(wù)以應(yīng)用 daemon.json 配置..."
sudo systemctl restart docker

# 8. 驗(yàn)證 Docker 服務(wù)狀態(tài)
echo "--> 正在檢查 Docker 服務(wù)狀態(tài),確認(rèn)配置已生效..."
sudo systemctl status docker --no-pager

# 9. 將當(dāng)前用戶添加到 docker 組(可選)
echo "--> 正在將當(dāng)前用戶 ($USER) 添加到 'docker' 用戶組..."
sudo usermod -aG docker $USER
echo "# 重要提示:                                                         #"
echo "# 用戶組更改需要 退出登錄 并 重新登錄 才能生效。                    #"
echo "# 或者,運(yùn)行 'newgrp docker' 啟動(dòng)具有新組成員身份的新 Shell。         #"


# 10. 最終驗(yàn)證說明 (根據(jù) TLS 選擇顯示不同信息)
echo "===== Docker 安裝和配置腳本執(zhí)行完畢 ====="
echo "鏡像加速器: https://zhengfp.cn"
echo "數(shù)據(jù)目錄: $DOCKER_DATA"

if [[ "$ENABLE_TLS" == "yes" ]]; then
    echo "######################################################################"
    echo "                                                          "
    echo "# 重要提示:需要到/usr/lib/systemd/system/docker.service目錄去配置Docker 的TLS用于遠(yuǎn)程服務(wù)器連接,執(zhí)行下面命令"
    echo "# >>> 打開docker.service文件                                   "
    echo "   vim /usr/lib/systemd/system/docker.service             "
    echo ""
    echo "# >>> 將下面內(nèi)容加入到 [Service] 節(jié)點(diǎn)的ExecStart后面      "
    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"
    echo ""
    echo " 更新配置:systemctl daemon-reload"
    echo " 重啟docker:systemctl restart docker"
    echo " 查看是否啟動(dòng)成功:systemctl status docker"
    echo ""
    echo "######################################################################"
    echo ""
    echo "要從遠(yuǎn)程客戶端連接,你需要以下文件 (位于 $CERT_DIR 目錄):"
    echo "  - CA 證書: ca.pem"
    echo "  - 客戶端證書: cert.pem"
    echo "  - 客戶端私鑰: key.pem"
    echo ""
    echo "遠(yuǎn)程連接命令示例 (需將證書文件復(fù)制到客戶端):"
    echo "  docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$SERVER_IP:2376 version"
    echo ""
    echo "?。?!重要防火墻提示!??!"
    echo "請確保防火墻允許 TCP 端口 2376 的入站連接或。"
    echo "例如,使用 firewalld:"
    echo "  sudo firewall-cmd --permanent --add-port=2376/tcp"
    echo "  sudo firewall-cmd --reload"
else
    echo "Docker 未啟用 TLS 遠(yuǎn)程連接,僅監(jiān)聽在本地 Unix 套接字 unix:///var/run/docker.sock。"
    echo "  docker ps"
fi
echo ""
echo "使用 'docker info | grep -E 'TLS|Hosts|Docker Root Dir|Registry Mirrors|Server Version\"' 查看詳細(xì)配置。"

ubuntu執(zhí)行腳本

修改的內(nèi)容和上面一致

#!/bin/bash

# 如果命令以非零狀態(tài)退出,則立即退出腳本。
set -e
# 在替換時(shí),將未設(shè)置的變量視為錯(cuò)誤。
set -u
# 管道命令的返回值將是最后一個(gè)以非零狀態(tài)退出的命令的退出狀態(tài),
# 或者如果所有命令都成功退出則返回零。
set -o pipefail

# ========== Docker 安裝配置 (Ubuntu 版本) ==========

# 1. 更新軟件包索引并安裝必要的依賴
echo "--> [Ubuntu] 正在更新軟件包索引并安裝必要的依賴..."
sudo apt-get update
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    openssl # 確保 openssl 已安裝 (通常已存在,安全起見添加)

# 2. 卸載 Docker(如果存在)
echo "--> [Ubuntu] 正在嘗試移除可能存在的舊 Docker 軟件包..."
sudo apt-get remove -y docker docker-engine docker.io containerd runc || true # 使用 Ubuntu 常見的舊包名
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y

# 3. 設(shè)置 Docker 軟件倉庫 (使用官方推薦方法 + Aliyun 鏡像)
echo "--> [Ubuntu] 正在添加 Docker 官方 GPG 密鑰 (使用 Aliyun 鏡像)..."
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo "--> [Ubuntu] 正在設(shè)置 Docker 軟件倉庫 (使用 Aliyun 鏡像)..."
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 安裝 Docker 引擎
echo "--> [Ubuntu] 正在更新軟件包索引并安裝 Docker 引擎..."
sudo apt-get update # 再次更新以識別新添加的倉庫
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin 

# 5. 確保 Docker 服務(wù)啟動(dòng)并設(shè)置開機(jī)自啟(稍后會重啟)
echo "--> 正在啟動(dòng)并設(shè)置開機(jī)自啟 Docker 服務(wù) (初始啟動(dòng))..."
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker --no-pager

# 6. 確保 /home/docker 和數(shù)據(jù)目錄存在
DOCKER_DATA="/home/docker/docker-data"

echo "--> 確保 Docker 數(shù)據(jù)目錄 '$DOCKER_DATA' 存在..."
sudo mkdir -p $DOCKER_DATA

# ========== 詢問用戶是否啟用 TLS ==========
ENABLE_TLS=""
while [[ "$ENABLE_TLS" != "yes" && "$ENABLE_TLS" != "no" ]]; do
    read -p "是否啟用 TLS 以允許安全的遠(yuǎn)程 Docker 連接? (yes/no): " user_input
    ENABLE_TLS=$(echo "$user_input" | tr '[:upper:]' '[:lower:]') # 轉(zhuǎn)為小寫
    if [[ "$ENABLE_TLS" != "yes" && "$ENABLE_TLS" != "no" && "$ENABLE_TLS" != "y" && "$ENABLE_TLS" != "n" ]]; then
        echo "無效輸入,請輸入 'yes' 或 'no'."
        ENABLE_TLS="" # 重置以便循環(huán)繼續(xù)
    elif [[ "$ENABLE_TLS" == "y" ]]; then
         ENABLE_TLS="yes"
    elif [[ "$ENABLE_TLS" == "n" ]]; then
         ENABLE_TLS="no"
    fi
done

# ========== 根據(jù)用戶選擇執(zhí)行操作 ==========
if [[ "$ENABLE_TLS" == "yes" ]]; then
    # --- 執(zhí)行 TLS 證書生成 (這部分與操作系統(tǒng)無關(guān)) ---
    echo "===== 用戶選擇啟用 TLS,開始生成 Docker TLS 證書 ====="

    # --- TLS 相關(guān)配置信息 ---
    SERVER_IP="10.211.55.6"   # ?。?! 重要: 使用Docker客戶端連接到服務(wù)器的實(shí)際IP地址
    PASSWORD="123456"        # ?。?! 重要: 請修改為強(qiáng)密碼  !!
    COUNTRY="CN"
    STATE="xx省"
    CITY="xx市"
    ORGANIZATION="xxxx有限公司"
    ORGANIZATIONAL_UNIT="Dev"
    EMAIL="123456@qq.com"
    CERT_DIR="/home/docker/tls" # 定義證書存放目錄
    # --- 配置結(jié)束 ---
    echo "--> 確保 '$CERT_DIR' 目錄存在..."
    sudo mkdir -p $CERT_DIR

    echo "--> 切換到證書目錄: $CERT_DIR"
    cd "$CERT_DIR"

    echo "--> 生成 CA 私鑰 (ca-key.pem)..."
    openssl genrsa -aes256 -passout pass:$PASSWORD -out ca-key.pem 4096

    echo "--> 生成 CA 證書 (ca.pem)..."
    openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca.pem \
      -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER_IP/emailAddress=$EMAIL"

    echo "--> 生成服務(wù)器私鑰 (server-key.pem)..."
    openssl genrsa -out server-key.pem 4096

    echo "--> 生成服務(wù)器證書簽名請求 (server.csr)..."
    openssl req -subj "/CN=$SERVER_IP" -new -key server-key.pem -out server.csr

    echo "--> 使用 CA 簽發(fā)服務(wù)器證書 (server-cert.pem)..."
    echo "subjectAltName = IP:$SERVER_IP" > server-ext.cnf
    openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca-key.pem \
      -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem -extfile server-ext.cnf

    echo "--> 生成客戶端私鑰 (key.pem)..."
    openssl genrsa -out key.pem 4096

    echo "--> 生成客戶端證書簽名請求 (client.csr)..."
    openssl req -subj '/CN=client' -new -key key.pem -out client.csr

    echo "--> 創(chuàng)建客戶端證書擴(kuò)展文件 (extfile.cnf)..."
    echo "extendedKeyUsage=clientAuth" > extfile.cnf

    echo "--> 使用 CA 簽發(fā)客戶端證書 (cert.pem)..."
    openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca-key.pem \
      -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem -extfile extfile.cnf

    echo "--> 調(diào)整證書和密鑰文件權(quán)限..."
    # 使用 sudo 確保權(quán)限設(shè)置成功
    sudo chmod 0774 ca-key.pem key.pem server-key.pem
    sudo chmod 0774 ca.pem server-cert.pem cert.pem

    echo "--> 清理臨時(shí)文件..."
    rm -f client.csr server.csr server-ext.cnf extfile.cnf ca.srl

    echo "===== TLS 證書生成完成 ====="

else
    # --- 用戶選擇不啟用 TLS ---
    echo "===== 用戶選擇不啟用 TLS ====="
    echo "--> 僅配置鏡像加速和數(shù)據(jù)目錄..."
fi

# --- 配置 daemon.json (這部分與操作系統(tǒng)無關(guān)) ---
echo "--> 正在寫入 '/etc/docker/daemon.json' 配置文件..."
# 使用 sudo bash -c '...' 來確保整個(gè)重定向操作具有 root 權(quán)限
sudo bash -c 'cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": ["https://zhengfp.cn"],
  "data-root": "$DOCKER_DATA"'$( # 在這里插入條件判斷
    if [[ "$ENABLE_TLS" == "yes" ]]; then
        # 如果啟用了 TLS,則不添加 hosts 行,將在 systemd service 文件中配置
        echo "" # 輸出空行,保持 JSON 結(jié)構(gòu),但不添加 hosts
    else
        # 如果未啟用 TLS,可以保留默認(rèn)的 unix socket 或添加 tcp (如果需要非 TLS 遠(yuǎn)程,但不推薦)
        # 這里我們保持默認(rèn),只監(jiān)聽 unix socket,不寫 hosts 行
        echo "" # 輸出空行
        # 或者,如果想明確只監(jiān)聽本地 TCP (不安全,不推薦):
        # echo ',\n  "hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"]'
    fi
  )'
}
EOF'

# ========== 應(yīng)用配置并完成后續(xù)步驟 ==========
echo "--> '/etc/docker/daemon.json' 配置寫入完成。內(nèi)容如下:"
# 確保文件存在再 cat
if [[ -f /etc/docker/daemon.json ]]; then
    sudo cat /etc/docker/daemon.json
else
    echo "--> Warning: /etc/docker/daemon.json 未生成或?yàn)榭铡?
fi

# 7. 重啟 Docker 服務(wù)以應(yīng)用配置
echo "--> 正在重啟 Docker 服務(wù)以應(yīng)用 daemon.json 配置..."
sudo systemctl restart docker

# 8. 驗(yàn)證 Docker 服務(wù)狀態(tài)
echo "--> 正在檢查 Docker 服務(wù)狀態(tài),確認(rèn)配置已生效..."
sudo systemctl status docker --no-pager

# 9. 將當(dāng)前用戶添加到 docker 組(與操作系統(tǒng)無關(guān))
echo "--> 正在將當(dāng)前用戶 ($USER) 添加到 'docker' 用戶組..."
# 檢查 docker 組是否存在,如果不存在則創(chuàng)建 (雖然 Docker 安裝時(shí)通常會創(chuàng)建)
if ! getent group docker > /dev/null; then
  echo "--> 'docker' 組不存在,正在創(chuàng)建..."
  sudo groupadd docker
fi
sudo usermod -aG docker $USER
echo "# 重要提示:                                                         #"
echo "# 用戶組更改需要 退出登錄 并 重新登錄 才能生效。                    #"
echo "# 或者,運(yùn)行 'newgrp docker' 啟動(dòng)具有新組成員身份的新 Shell。         #"

# 10. 最終驗(yàn)證說明 (根據(jù) TLS 選擇顯示不同信息)
echo "===== Docker 安裝和配置腳本執(zhí)行完畢 ====="
echo "鏡像加速器: https://zhengfp.cn (或 daemon.json 中配置的其他鏡像)"
echo "數(shù)據(jù)目錄: $DOCKER_DATA"

if [[ "$ENABLE_TLS" == "yes" ]]; then
    echo "######################################################################"
    echo "                                                          "
    echo "# 重要提示:需要到/usr/lib/systemd/system/docker.service目錄去配置Docker 的TLS用于遠(yuǎn)程服務(wù)器連接,執(zhí)行下面命令"
    echo "# >>> 打開docker.service文件                                   "
    echo "   vim /usr/lib/systemd/system/docker.service             "
    echo ""
    echo "# >>> 將下面內(nèi)容加入到 [Service] 節(jié)點(diǎn)的ExecStart后面      "
    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"
    echo ""
    echo " 更新配置:systemctl daemon-reload"
    echo " 重啟docker:systemctl restart docker"
    echo " 查看是否啟動(dòng)成功:systemctl status docker"
    echo ""
    echo "######################################################################"
    echo ""
    echo "要從遠(yuǎn)程客戶端連接,你需要以下文件 (位于 $CERT_DIR 目錄):"
    echo "  - CA 證書: ca.pem"
    echo "  - 客戶端證書: cert.pem"
    echo "  - 客戶端私鑰: key.pem"
    echo ""
    echo "遠(yuǎn)程連接命令示例 (需將證書文件復(fù)制到客戶端):"
    echo "docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$SERVER_IP:2376 version"
    echo ""
    echo "?。?!重要防火墻提示 (Ubuntu 使用 ufw)?。?!"
    echo "請確保防火墻允許 TCP 端口 2376 的入站連接。"
    echo "例如,使用 ufw:"
    echo "  sudo ufw allow 2376/tcp"
    echo "  sudo ufw reload  # 或者 sudo ufw enable 如果防火墻未啟用"
else
    echo "Docker 未啟用 TLS 遠(yuǎn)程連接,僅監(jiān)聽在本地 Unix 套接字 unix:///var/run/docker.sock。"
    echo "可以通過本地命令訪問,例如:"
    echo "  docker ps"
fi
echo ""
echo "使用 'docker info | grep -E 'TLS|Hosts|Docker Root Dir|Registry Mirrors|Server Version\"' 查看詳細(xì)配置。"

2、修改docker-compose.yml文件

添加docker-compose.yml 

創(chuàng)建一個(gè)docker-compose.yml文件把下面內(nèi)容復(fù)制進(jìn)去

  • ports:為ip映射,把主機(jī)的ip改為自己主機(jī)的ip
  • volumes:容器映射,把前面的路徑改為自己需要映射的路徑(按照我的創(chuàng)建,不用改也可以)
version: '3.8'

services:
# redis服務(wù)
  redis:
    image: redis:6.2.7
    container_name: redis-server
    ports:
      - "26379:6379" # 將主機(jī)的 26379 端口映射到容器的 6379 端口 (Redis 默認(rèn)端口)
    volumes:
      - ./config/redis/conf/:/usr/local/etc/redis/
      - ./config/redis/data/:/data/
    #添加配置,指定配置文件位置,為映射到容器的配置文件位置
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    deploy:
      resources:
        limits:
          memory: 512m

# mysql服務(wù)
  mysql:
    image: mysql:8.0.33 # 或選擇你需要的 MySQL 版本,例如 mysql:latest
    container_name: mysql-db
    ports:
      - "3406:3306"   # 將主機(jī)的 3306 端口映射到容器的 3306 端口 (MySQL 默認(rèn)端口)
    environment:
      MYSQL_ROOT_PASSWORD: 123456 # 設(shè)置 MySQL root 用戶的密碼,請?zhí)鎿Q為你的密碼
      # MYSQL_DATABASE: nacos_config # 初始化數(shù)據(jù)庫(后續(xù)的初始化sql會在這個(gè)庫執(zhí)行)
      # MYSQL_USER: nacos # 初始化用戶(不能是root 會報(bào)錯(cuò), 后續(xù)需要給新用戶賦予權(quán)限)
      # MYSQL_PASSWORD: nacos # 用戶密碼
      TZ: Asia/Shanghai 
    volumes:
      - ./config/mysql/data/:/var/lib/mysql/ # 數(shù)據(jù)持久化,將 MySQL 數(shù)據(jù)目錄掛載到 Docker volume
      - ./config/mysql/initdb/:/docker-entrypoint-initdb.d/     #初始化磁盤
      - ./config/mysql/conf/:/etc/mysql/conf.d/ 
    deploy:
      resources:
        limits:
          memory: 1g

# nacos服務(wù)
  nacos:
    image: nacos/nacos-server:2.0.2 #  或 nacos/nacos-opensource:latest (根據(jù)你的需求選擇)
    container_name: nacos-server
    ports:
      - "8948:8848"   # Nacos 服務(wù)器端口
      - "9948:9848"   # Nacos 集群通信端口 (gRPC 默認(rèn)端口)
      - "9949:9849"   # Nacos 集群通信端口 (gRPC 客戶端請求端口)
    environment:
      MODE: standalone # 設(shè)置 Nacos 運(yùn)行模式為單機(jī)模式 (standalone)
      # 如果需要持久化,可以添加以下配置并掛載數(shù)據(jù)卷 (例如使用 MySQL 持久化)
      NACOS_DATASOURCE_PLATFORM: mysql
      DB_NUM: 1
      DB_HOST_0: mysql # 這里使用 docker-compose 內(nèi)的 mysql 服務(wù)名
      DB_PORT_0: 3406
      DB_NAME_0: nacos_config # 你需要先在 MySQL 中創(chuàng)建 nacos_db 數(shù)據(jù)庫
      DB_USER_0: root
      DB_PASSWORD_0: 123456
    depends_on:
      - mysql # 如果 Nacos 使用 MySQL 持久化,則依賴 mysql
    volumes:
      #   - ./config/nacos/conf/:/home/nacos/conf/ # (可選) 數(shù)據(jù)持久化,
      - ./config/nacos/logs/:/home/nacos/logs/
    deploy:
      resources:
        limits:
          memory: 1g

  nginx:
    image: nginx:1.20.2
    restart: always
    container_name: nginx-webserver
    ports:
      - "90:80"     # 將主機(jī)的 80 端口映射到容器的 80 端口 (HTTP 默認(rèn)端口)
      - "1443:443"   # 將主機(jī)的 443 端口映射到容器的 443 端口 (HTTPS 默認(rèn)端口)
      - "8090:8090"
    volumes:
      - ./config/nginx/conf/nginx.conf:/etc/nginx/nginx.conf # (可選) 將本地 nginx 配置掛載到容器
      - ./config/nginx/html/:/usr/share/nginx/html/ # (可選) 將本地 html 目錄掛載到容器
      - ./config/nginx/log/:/var/log/nginx/      # (可選) 將 nginx 日志掛載到本地
    privileged: true
    depends_on:
      - redis
      - mysql
      - nacos
    deploy:
      resources:
        limits:
          memory: 256m

注意點(diǎn):

mysql初始化數(shù)據(jù)庫

把需要初始化的數(shù)據(jù)庫文件放入到initdb文件夾下,盡量不要放入大批量的INSERT語句的sql文件,可以等創(chuàng)建好后在執(zhí)行

nginx.conf

nginx.conf配置文件做監(jiān)聽端口需要使用容器的端口,項(xiàng)目地址也是,項(xiàng)目文件地址因?yàn)樽隽宋募成?,所以只需要寫到html下面就行

3、添加config配置文件

我的配置文件結(jié)構(gòu)

3.1、mysql

添加my-custom.cnf

conf目錄下添加一個(gè)my-custom.cnf文件

內(nèi)容主要添加了一個(gè)大小寫不敏感和字符集

[mysqld]
# 設(shè)置表名和數(shù)據(jù)庫名不區(qū)分大小寫
# 1: 表名存儲在磁盤上是小寫的,名稱比較時(shí)不區(qū)分大小寫。
lower_case_table_names=1

# (可選) 推薦同時(shí)顯式設(shè)置默認(rèn)字符集和排序規(guī)則
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

添加mysql初始化sql文件

initdb目錄下添加一個(gè)mysql-schema.sql文件,需要初始化的文件,該目錄的sql文件在創(chuàng)建數(shù)據(jù)庫時(shí)會執(zhí)行一次,后面就不會在執(zhí)行了。

格式如下,先設(shè)置字符集,在創(chuàng)建數(shù)據(jù)庫,如果需要?jiǎng)?chuàng)建用戶則在創(chuàng)建用戶,給予權(quán)限。我這個(gè)的表是nacos創(chuàng)建的初始化sql。因?yàn)樘嗔司筒蝗珜懥?/p>

	SET NAMES utf8;
	CREATE DATABASE IF NOT EXISTS `nacos_config` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
	use `nacos_config`;
	
	-- -- 創(chuàng)建用戶 'nacos',密碼 'nacos'
	-- CREATE USER IF NOT EXISTS 'nacos'@'%' IDENTIFIED BY 'nacos';
	
	-- -- 授予 'nacos' 對 nacos_config 的所有權(quán)限
	-- GRANT ALL PRIVILEGES ON nacos_config.* TO 'nacos'@'%';
	
	/******************************************/
	/*   數(shù)據(jù)庫全名 = nacos_config   */
	/*   表名稱 = config_info   */
	/******************************************/
	CREATE TABLE `config_info` (
	  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
	  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
	  `group_id` varchar(128) DEFAULT NULL,
	  `content` longtext NOT NULL COMMENT 'content',
	  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
	  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
	  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時(shí)間',
	  `src_user` text COMMENT 'source user',
	  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
	  `app_name` varchar(128) DEFAULT NULL,
	  `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
	  `c_desc` varchar(256) DEFAULT NULL,
	  `c_use` varchar(64) DEFAULT NULL,
	  `effect` varchar(64) DEFAULT NULL,
	  `type` varchar(64) DEFAULT NULL,
	  `c_schema` text,
	  `encrypted_data_key` text NOT NULL COMMENT '秘鑰',
	  PRIMARY KEY (`id`),
	  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
	) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
	

3.2、nginx

nginx.conf配置文件

在conf文件夾下添加nginx.conf配置文件

需要注意監(jiān)聽端口和地址都是寫的容器的

# nginx.conf 示例文件
worker_processes  10;
events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server{
        #監(jiān)聽的端口號為容器的端口
        listen 80;
        #要監(jiān)聽的服務(wù)器地址,域名也可行,根據(jù)實(shí)際情況修改
        server_name localhost;
        client_max_body_size 20m;


        #前端,根據(jù)實(shí)際情況修改
        location / {
            # 項(xiàng)目地址,這里指的是nginx容器的地址
            root   /usr/share/nginx/html;
            try_files $uri $uri/ /index.html?s=$uri&$args;
            index index.html index.htm index.php;
        }
    }


}

添加前端項(xiàng)目文件

在html下面添加前端內(nèi)容,因?yàn)檫@個(gè)目錄映射的容器內(nèi)的/usr/share/nginx/html

<html>
<head>
<meta charset="utf-8">
<title>hello nginx</title>
</head>
<body>
    <h1>Hello Niginx</h1>
    <p>小例子</p>
</body>
</html>

3.3、redis

添加redis.conf

在conf下添加redis.conf文件,可以根據(jù)自己情況添加配置

# 綁定地址 (默認(rèn)監(jiān)聽所有網(wǎng)卡)
bind 0.0.0.0

# 端口 (默認(rèn)端口)
port 6379

# 守護(hù)進(jìn)程 (建議在生產(chǎn)環(huán)境設(shè)置為 yes,但 Docker 環(huán)境通常由容器管理,可以保持 no)
daemonize no

# 密碼認(rèn)證 (設(shè)置密碼為 123456 - 請?jiān)谏a(chǎn)環(huán)境中使用強(qiáng)密碼!)
requirepass 123456

三、部署docker

最好先切換為root用戶在去執(zhí)行

把文件打包進(jìn)去服務(wù)器然后解壓,進(jìn)入docker-deploy目錄,也就是.sh執(zhí)行文件的目錄

1、執(zhí)行部署命令

  • centos執(zhí)行sh docker-run.sh命令
  • ubuntu執(zhí)行bash ubuntu-docker-run.sh命令

安裝成功后如下

2、配置idea遠(yuǎn)程tcp連接(如果不需要可以忽略)

把提示的內(nèi)容執(zhí)行vim /usr/lib/systemd/system/docker.service 復(fù)制到下面的ExecStart位置后面

下載證書到本地:key.pem、cert.pem、ca.pem ,提示里面可以看位于什么目錄下

通過idea配置

idea配置遠(yuǎn)程連接(如果不需要遠(yuǎn)程監(jiān)控省略)

打開idea進(jìn)入配置:Settings>Build>Docker目錄下,

1. 配置遠(yuǎn)程服務(wù)器的IP,端口(2376加密端口),

2. 配置存放下載下來的加密文件的路徑

出現(xiàn)Connection successful就成功了

3、通過docker-compose部署redis、mysql、nginx、nacos

進(jìn)入anywhereDeploy目錄

執(zhí)行cd anywhereDeploy命令

創(chuàng)建容器

執(zhí)行docker compose up -d后臺執(zhí)行創(chuàng)建,或者不加-d在命令行輸出創(chuàng)建。

然后到idea去查看容器狀態(tài)

可以通過idea查看到都啟動(dòng)成功了 啊

驗(yàn)證

連接數(shù)據(jù)庫

nacos也可以正常連接

nginx也是可以正常連接

docker compose常用命令

#啟動(dòng)創(chuàng)建文件容器
docker compose up -d
# 刪除容器和鏡像
docker compose down
#覆蓋更新
docker compose up -d --force-recreate
# 查看日志
docker compose logs
#刪除容器
docker compose down --remove-orphans
#刪除單個(gè)鏡像
docker rmi nacos/nacos-server:2.0.2

四、直接部署

如果覺得前面的內(nèi)容太多了,麻煩,可以直接拉取我github倉庫的代碼l拉取下來直接丟到服務(wù)器直接執(zhí)行docker-run.sh創(chuàng)建docker,再執(zhí)行docker compose up -d創(chuàng)建容器

倉庫地址:https://github.com/AACS111/zfp-docker-deploy

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • docker在windows創(chuàng)建卷后本地找不到的完美解決方法

    docker在windows創(chuàng)建卷后本地找不到的完美解決方法

    這篇文章主要介紹了docker在windows創(chuàng)建卷后本地找不到的完美解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-02-02
  • 從docker鏡像里提取dockerfile的兩種方法

    從docker鏡像里提取dockerfile的兩種方法

    Dockerfile是用來構(gòu)建Docker鏡像的構(gòu)建文件,是由一系列命令和參數(shù)構(gòu)成的腳本,下面這篇文章主要給大家介紹了關(guān)于如何從docker鏡像里提取dockerfile的兩種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • docker安裝portainer方法詳細(xì)步驟

    docker安裝portainer方法詳細(xì)步驟

    portainer是一款容器管理可視化界面,不想在虛擬中使用命令管理容器的小伙伴,可以選擇安裝portainer對容器進(jìn)行管理,查看日志、啟動(dòng)、停止容器等非常方便,這篇文章主要介紹了docker安裝portainer方法詳細(xì)步驟,需要的朋友可以參考下
    2022-10-10
  • SpringBoot打包docker鏡像發(fā)布的詳細(xì)步驟

    SpringBoot打包docker鏡像發(fā)布的詳細(xì)步驟

    這篇文章主要介紹了SpringBoot打包docker鏡像發(fā)布,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • Docker部署mysql遠(yuǎn)程連接 解決2003的問題

    Docker部署mysql遠(yuǎn)程連接 解決2003的問題

    這篇文章主要介紹了Docker部署mysql遠(yuǎn)程連接 解決2003錯(cuò)誤的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 簡述Docker安裝Tomcat鏡像并部署web項(xiàng)目

    簡述Docker安裝Tomcat鏡像并部署web項(xiàng)目

    這篇文章主要介紹了簡述Docker安裝Tomcat鏡像并部署web項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 教你如何從正在運(yùn)行的容器創(chuàng)建?Docker?映像

    教你如何從正在運(yùn)行的容器創(chuàng)建?Docker?映像

    這篇文章主要介紹了如何從正在運(yùn)行的容器創(chuàng)建?Docker?映像,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • docker之load鏡像重命名實(shí)現(xiàn)方式

    docker之load鏡像重命名實(shí)現(xiàn)方式

    文章主要說明在Docker鏡像傳輸中,使用save/load時(shí)若未指定名稱和標(biāo)簽,會導(dǎo)致鏡像REPOSITORY顯示為<none>,解決方法為:load后通過docker tag重命名,或打包時(shí)使用鏡像名:標(biāo)簽格式,確保傳輸后鏡像信息完整
    2025-09-09
  • Docker中的images存儲路徑修改

    Docker中的images存儲路徑修改

    這篇文章主要介紹了Docker中的images存儲路徑修改方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • docker拉取鏡像報(bào)錯(cuò):Error?response?from?daemon:?Get?“https://registry-1.docker.io/v2/“:?dial?tcp的解決方案

    docker拉取鏡像報(bào)錯(cuò):Error?response?from?daemon:?Get?“https://r

    本文聚焦于解決?Docker?鏡像拉取報(bào)錯(cuò)?“Error?response?from?daemon:?Get?https://registry-1.docker.io/v2/:?dial?tcp?…:?i/o?timeout”?問題,有需要的小伙伴可以了解下
    2025-08-08

最新評論

涞源县| 崇阳县| 吉木萨尔县| 佛学| 郴州市| 宁南县| 循化| 图木舒克市| 巩义市| 陇川县| 永城市| 凯里市| 贞丰县| 河源市| 宜宾县| 仪征市| 镇安县| 文昌市| 上林县| 陇川县| 大安市| 滕州市| 福清市| 博湖县| 宁强县| 贵定县| 内江市| 桃江县| 东山县| 北安市| 崇礼县| 湟中县| 重庆市| 衡阳县| 永吉县| 鹿泉市| 平塘县| 应用必备| 县级市| 厦门市| 衡阳县|