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

Docker安全開放遠程訪問連接權(quán)限方式

 更新時間:2024年11月16日 09:49:09   作者:龍茶清歡  
文章介紹了如何配置Docker以實現(xiàn)遠程訪問、開啟認證和通信加密,包括生成證書和私鑰、配置Docker守護進程以及在IDEA和Maven中連接Docker服務的方法

1、Docker完全開放遠程訪問

Docker服務完全開放對外訪問權(quán)限操作如下:

# 開啟端口命令  (--permanent永久生效,沒有此參數(shù)重啟后失效)
firewall-cmd --zone=public --add-port=2375/tcp --permanent
# 重新載入
firewall-cmd --reload

# 使用 vim 編輯docker服務配置文件
vim /lib/systemd/system/docker.service
# 找到如下配置行
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 將其注釋掉或者直接刪除,替換成下面的配置行.然后保存退出
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

# 重新加載docker配置并重啟服務
systemctl daemon-reload && systemctl restart docker

# 然后直接在命令行客戶端輸入如下命令,IP地址改為自己的
curl http://192.168.56.20:2375/version
# 或者在瀏覽器直接訪問,IP地址改為自己的
http://192.168.56.20:2375/version

出現(xiàn)如下信息則代表修改Docker服務設(shè)置遠程訪問成功。

特別注意的點:

完全開放Docker對外訪問權(quán)限有可能會遭到別人攻擊,這是很不安全的,只要別人知道你的服務器地址就能夠隨意連接你的Docker服務,而不需要任何認證,因此,完全開放只推薦自己在內(nèi)網(wǎng)使用,不推薦在云服務器上直接完全開放。

2、Docker開放遠程訪問并開啟認證和通信加密

為了解決上面Docker完全開放遠程訪問所帶來的安全隱患,我們需要對Docker服務進行通信認證和加密,操作如下:

首先創(chuàng)建一個文件目錄,用于存放證書和私鑰

mkdir -p /data/certificate/linux-ca && cd /data/certificate/linux-ca

然后在 linux-ca 文件夾下進行以下操作:

生成自簽名的根證書和私鑰

  • a. 執(zhí)行以下命令生成根證書私鑰文件(例如 ca-key.pem):
openssl genrsa -aes256 -passout pass:123456 -out ca-key.pem 4096
  • b. 執(zhí)行以下命令生成根證書文件(例如 ca.pem)并使用私鑰進行簽名。在生成證書時,你需要為其分配一個有效期,通常為幾年。
# 直接指定證書的主題信息
openssl req -x509 -new -key ca-key.pem -sha256 -days 365 -passin pass:123456 -out ca.pem

生成自簽名的服務端證書和私鑰

  • a. 執(zhí)行以下命令生成私鑰文件(例如 server-key.pem):
openssl genrsa -out server-key.pem 4096
  • b. 執(zhí)行以下命令生成證書簽名請求文件(例如 server.csr)。

在生成 CSR 文件時,你需要提供一些信息,如組織名稱、組織單位、所在國家等。

# 直接指定證書的主題信息
openssl req -new -key server-key.pem -out server.csr
  • c. 執(zhí)行以下命令生成自簽名的服務器證書(例如 server-cert.pem),并使用 CSR 文件和私鑰進行簽名。
echo extendedKeyUsage = serverAuth >> extfile-server.cnf
openssl x509 -req -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -days 365 -sha256 -passin pass:123456 -out server-cert.pem -extfile extfile-server.cnf

生成自簽名的客戶端證書和私鑰

  • a. 執(zhí)行以下命令生成客戶端私鑰文件(例如 key.pem):
openssl genrsa -out key.pem 4096
  • b. 執(zhí)行以下命令生成客戶端證書簽名請求文件(例如 client.csr)。在生成 CSR 文件時,你需要提供一些信息,如組織名稱、組織單位、所在國家等。
openssl req -new -key key.pem -out client.csr
  • c. 執(zhí)行以下命令生成自簽名的客戶端證書(例如 cert.pem),并使用 CSR 文件和私鑰進行簽名。在生成證書時,你需要為其分配一個有效期,通常為幾年。
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -days 365 -sha256 -passin pass:123456 -out cert.pem -extfile extfile-client.cnf

刪除多余的四個請求文件:

rm -f server.csr client.csr extfile-server.cnf extfile-client.cnf

完成了上述步驟后,你將獲得以下文件:

  • 根證書文件:ca.pem
  • 根證書私鑰文件:ca-key.pem
  • 服務器端證書文件:server-cert.pem
  • 服務器端私鑰文件:server-key.pem
  • 客戶端證書文件:cert.pem
  • 客戶端私鑰文件:key.pem

特別要注意的是以下四點:

  • 根證書名稱必須為 ca.pem
  • 客戶端證書必須為 cert.pem
  • 客戶端私鑰必須為 key.pem
  • 在輸入 commonName 信息時必須添加服務器的IP地址,否則Docker可能啟動失敗

服務端和客戶端創(chuàng)建私鑰是不能額外添加加密密碼,不然會導致服務端、客戶端無法解析。

然后是配置Docker守護進程配置文件 daemon.json 具體操作如下:

# 先查看 /etc/docker/daemon.json 是否存在,如果不存在則創(chuàng)建,存在則直接修改
cat /etc/docker/daemon.json
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
    "tls": true,
    "tlsverify": true,
    "tlscacert": "/data/certificate/linux-ca/ca.pem",
    "tlscert": "/data/certificate/linux-ca/server-cert.pem",
    "tlskey": "/data/certificate/linux-ca/server-key.pem",
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://ung2thfc.mirror.aliyuncs.com",
        "https://mirror.ccs.tencentyun.com",
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.baidubce.com"
    ]
}
EOF
systemctl daemon-reload && systemctl restart docker

在以上操作中,我們需要填寫正確的證書和私鑰存放地址,如果你是按照我上面的步驟來,那沒有問題,你什么都不用改。

如果你的證書和私鑰的存放地址是自己定義的地址,那么,你需要將 daemon.json 中的地址也相應的修改一下。

完成以上內(nèi)容后,此時我們在瀏覽器使用 https://192.168.56.10:2375/version 就無法獲取信息了,提示需要身份認證

3、快速完成Docker服務開啟認證和通信加密

為了解決第二步流程比較繁瑣的問題,我編寫了兩個自動化配置Shell腳本并且我將其上傳到了公網(wǎng),它們能夠幫助我們非??焖俚耐瓿傻诙降乃辛鞒?,

你們可以直接選擇使用我創(chuàng)建好的腳本,操作如下:

# 證書腳本
curl -O https://backup-1305596318.cos.ap-guangzhou.myqcloud.com/shell/cert.sh
chmod +x cert.sh
source cert.sh

# Docker守護進程腳本
curl -O https://backup-1305596318.cos.ap-guangzhou.myqcloud.com/shell/daemon.sh
chmod +x daemon.sh
source daemon.sh

如果自己創(chuàng)建然后使用,可以參考下面的步驟,具體操作如下:

首先是創(chuàng)建證書和私鑰的Shell腳本

我們只需要創(chuàng)建一個 cert.sh 腳本文件,名稱可以任取,然后填入如下內(nèi)容:

#!/bin/bash

# 從控制臺讀取必要輸入信息
read -p "please input the cert store path: " certDir
echo your cert store path is: "$certDir"
read -p "please input the ca-key's password: " password
echo your password is: "$password"
read -p "please input the IP of your server: " ip
echo your server IP is: "$ip"

# 檢查輸入的證書路徑是否已經(jīng)存在
# 如果不存在,則創(chuàng)建;如果存在則刪除后創(chuàng)建
if [ ! -d "$certDir" ]; then
	echo ""
	echo "$certDir , not exist, it will be create"
	echo ""
	mkdir -p $certDir
else
	echo ""
	echo "$certDir , already exist , it will be delete then create"
	echo ""
	rm -rf $certDir
	mkdir -p $certDir
fi
 
cd $certDir

# 定義服務端證書擴展配置
server_conf="[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = CN
stateOrProvinceName = JX
localityName = SR
organizationName = PY
organizationalUnitName = XS
commonName = $ip
emailAddress = 2320391937@qq.com

[v3_req]
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = 0.0.0.0"

# 將服務端證書的擴展配置寫入extfile-server.cnf文件
echo "$server_conf" > extfile-server.cnf

# 定義客戶端證書擴展配置
client_conf="[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = CN
stateOrProvinceName = JX
localityName = SR
organizationName = PY
organizationalUnitName = XS
commonName = $ip
emailAddress = 2320391937@qq.com

[v3_req]
extendedKeyUsage = clientAuth"

# 將客戶端證書的擴展配置寫入extfile-client.cnf文件
echo "$client_conf" > extfile-client.cnf


# 創(chuàng)建根證書RSA私鑰
openssl genrsa -aes256 -passout pass:$password -out ca-key.pem 4096
# 創(chuàng)建CA證書
openssl req -new -x509 -days 365 -key ca-key.pem -passin pass:$password -sha256 -out ca.pem -subj "/C=CN/CN=$ip"

# 創(chuàng)建服務端私鑰
openssl genrsa -out server-key.pem 4096
# 創(chuàng)建服務端簽名請求證書文件
openssl req -subj "/CN=$ip" -sha256 -new -key server-key.pem -out server.csr
# 創(chuàng)建簽名生效的服務端證書文件 
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out server-cert.pem -extfile extfile-server.cnf

# 創(chuàng)建客戶端私鑰
openssl genrsa -out key.pem 4096
# 創(chuàng)建客戶端簽名請求證書文件
openssl req -subj "/CN=$ip" -new -key key.pem -out client.csr
# 創(chuàng)建簽名生效的客戶端證書文件
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out cert.pem -extfile extfile-client.cnf

# 刪除多余文件
# 使用了 -v 參數(shù),rm 命令將會顯示每個被刪除的文件或目錄的名稱,以便您能夠看到操作的進展和結(jié)果。
rm -f -v client.csr server.csr extfile-server.cnf extfile-client.cnf
# 為所有用戶設(shè)置對這些文件的讀取權(quán)限
chmod -v 444 ca-key.pem key.pem server-key.pem
chmod -v 444 ca.pem server-cert.pem cert.pem

該腳本只需要我們在控制臺輸入證書和私鑰的存放地址、根私鑰密碼以及服務器IP地址三個參數(shù)即可,其他的什么都不用做。

如果你按照上面的步驟創(chuàng)建好了 cert.sh 腳本文件并填入了腳本內(nèi)容,那么接下來我們就可以通過如下命令來執(zhí)行腳本了

source /xxx/cert.sh

使用 source 命令后接腳本的絕對地址或者相對地址即可執(zhí)行腳本。

創(chuàng)建Docker守護進程配置腳本

我們創(chuàng)建一個 daemon.sh 腳本文件,名稱可以任取,然后填入如下內(nèi)容:

#!/bin/bash

# 讀取控制臺輸入,需要輸入一個目錄
read -p "please input the cert store path: " certDir
echo your cert store path is: "$certDir"
# 檢查輸入的證書路徑是否已經(jīng)存在
# 如果不存在,則直接退出
if [ ! -d "$certDir" ]; then
	echo ""
	echo "$certDir , not exist, please input a correct cert path"
	exit
fi

json_content='{
    "tls": true,
    "tlsverify": true,
    "tlscacert": "$certDir/ca.pem",
    "tlscert": "$certDir/server-cert.pem",
    "tlskey": "$certDir/server-key.pem",
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://ung2thfc.mirror.aliyuncs.com",
        "https://mirror.ccs.tencentyun.com",
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.baidubce.com"
    ]
}'

# 替換變量
json_content=$(echo "$json_content" | sed "s|\$certDir|$certDir|g")

daemonDir='/etc/docker'
# 如果docker配置目錄不存在則創(chuàng)建;存在則刪除后創(chuàng)建
if [ ! -d "$daemonDir" ]; then
	echo ""
	echo "$daemonDir not exist, it will be create"
	mkdir -p "$daemonDir" && cd "$daemonDir"
	# 將替換后的內(nèi)容保存到新的 JSON 文件
	echo "$json_content" > "$daemonDir/daemon.json"
else
	echo ""
	echo "$daemonDir already exist, it will be delete then create"
	rm -rf "$daemonDir"
	mkdir -p "$daemonDir" && cd "$daemonDir"
	# 將替換后的內(nèi)容保存到新的 JSON 文件
	echo "$json_content" > "$daemonDir/daemon.json"
fi

systemctl daemon-reload && systemctl restart docker

然后我們可以通過 source 命令后接腳本的絕對地址或者相對地址即可執(zhí)行腳本。

source /xxx/daemon.sh

這個腳本主要是對Docker服務進行通信加密、服務認證、鏡像加速配置這三個設(shè)置,使用方式和上一個腳本一樣。

在執(zhí)行腳本的過程中,會提示我們輸入之前創(chuàng)建的證書和私鑰的存放地址,我們必須填寫正確的地址,否則會導致Docker服務無法讀取證書和私鑰。

4、IDEA連接Docker服務

下載證書文件夾到Windows本地,

只需要這三個文件即可:ca.pem、cert.pem、key.pem 將他們下載到本地并裝入一個文件夾中

在具體的 IDEA 配置中,可以按照以下步驟進行設(shè)置:

  1. 打開 IDEA,進入 Settings 。
  2. 導航到 Docker 部分(一般是 Build, Execution, Deployment 下的 Docker)。
  3. 找到 Connect to Docker daemon with 配置下面的 TCP socket 配置選項
  4. 在 Engine API URL 中填入Docker服務連接地址,例如:https://192.168.56.10:2375
  5. 在 Certificates folder 中選擇裝有三個證書文件的文件夾,用以客戶端向服務端的身份認證
  6. 保存設(shè)置并嘗試連接到 Docker 服務。

需要注意的是,具體的設(shè)置步驟可能因 IDEA 版本而異,請根據(jù)你使用的版本進行適當調(diào)整。

5、Maven連接Docker服務

有時候我們需要讓自己的項目配置Docker服務的連接配置,以方便快速進行項目打包并部署在Docker中,因此,我們需要如下配置:

        <!-- 項目maven插件統(tǒng)一管理 -->
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler.version}</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>${project.build.sourceEncoding}</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
                <!-- docker插件,用于制作鏡像 -->
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>${docker-maven.version}</version>
                    <!-- docker配置 -->
                    <configuration>
                        <!-- docker遠程地址 -->
                        <dockerHost>${docker.host}</dockerHost>
                        <!-- docker打包鏡像名稱 -->
                        <imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
                        <!-- DockerFile的存放位置 -->
                        <dockerDirectory>${project.basedir}</dockerDirectory>
                        <!-- 由于docker服務使用加密通信,開啟了認證,因此需要提供通信證書 -->
                        <dockerCertPath>C:\Users\23203\Desktop\linux-ca</dockerCertPath>
                        <!-- 配置制作鏡像時需要依賴的資源,此處依賴項目jar包 -->
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

因為配置過長,我只選取關(guān)鍵的部分展示。 

總結(jié)

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

相關(guān)文章

  • docker利用selenium+testng實現(xiàn)web自動化的方法

    docker利用selenium+testng實現(xiàn)web自動化的方法

    這篇文章主要給大家介紹了關(guān)于docker利用selenium+testng實現(xiàn)web自動化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2018-10-10
  • 使用Docker部署ollama和MaxKB全過程

    使用Docker部署ollama和MaxKB全過程

    配置Ollama監(jiān)聽所有IP,修改環(huán)境變量;MaxKB容器連接Ollama,設(shè)置API地址及模型名;創(chuàng)建知識庫并關(guān)聯(lián)模型,測試問答,解決網(wǎng)絡、模型名等問題,優(yōu)化GPU加速和量化模型
    2025-07-07
  • 聊聊docker中容器與鏡像的區(qū)別

    聊聊docker中容器與鏡像的區(qū)別

    今天什么內(nèi)容不講只給大家講解docker中容器與鏡像的區(qū)別,對于初學者來說,剛剛接觸docker會有點迷,特別是鏡像與容器。其實我們可以理解鏡像與容器為一對多的關(guān)系。本文給大家介紹的很詳細,感興趣的朋友一起看看吧
    2021-06-06
  • docker使用volume和bind mount的區(qū)別及說明

    docker使用volume和bind mount的區(qū)別及說明

    文章介紹了Docker中Volume和BindMount兩種數(shù)據(jù)持久化機制的區(qū)別,Volume由Docker管理,支持數(shù)據(jù)共享和加密,而BindMount將宿主機上的文件或目錄直接掛載到容器中,性能較好但依賴于宿主機的文件系統(tǒng)結(jié)構(gòu)
    2024-11-11
  • nexus搭建私有docker倉庫的方法

    nexus搭建私有docker倉庫的方法

    Nexus之前已支持了maven/npm/composer,由于docker倉庫和前面幾個存在比較大的差異,所以我特此記錄下走過的坑,本文重點介紹nexus搭建私有docker倉庫的相關(guān)知識,感興趣的朋友一起看看吧
    2024-03-03
  • Docker Compose 使用實例詳解

    Docker Compose 使用實例詳解

    Docker Compose 是用于定義和運行多容器 Docker 應用程序的工具,通過 YAML 文件配置應用程序服務,一鍵啟動所有關(guān)聯(lián)容器,這篇文章主要介紹了Docker Compose 使用實例,需要的朋友可以參考下
    2025-04-04
  • Docker鏡像拉取、制作與上傳的完整指南

    Docker鏡像拉取、制作與上傳的完整指南

    本文文章主要介紹了Docker鏡像的核心概念、實用示例以及最佳實踐,從基礎(chǔ)的鏡像拉取、制作到高級ocker安全加固、性能優(yōu)化和自動化部署,全方位講解了Java應用在Docker中的實戰(zhàn)應用,并并給出了具體的操作示例和建議,需要的朋友可以參考下
    2026-04-04
  • docker部署rabbitmq消息隊列實踐

    docker部署rabbitmq消息隊列實踐

    文章主要介紹了使用Docker部署RabbitMQ的過程,包括在DockerHub上查找和下載RabbitMQ鏡像、通過Docker啟動鏡像、映射端口、指定主機名和容器名等步驟,并詳細解釋了如何解決啟動失敗的問題及如何通過Web端訪問部署好的RabbitMQ
    2026-04-04
  • Docker-Compose搭建Spark集群的實現(xiàn)方法

    Docker-Compose搭建Spark集群的實現(xiàn)方法

    本文主要介紹了Docker-Compose搭建Spark集群的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • docker磁盤空間不足的解決辦法

    docker磁盤空間不足的解決辦法

    linux的磁盤空間掛載后,需要遷移一下docker 鏡像原本的位置,因此有此實踐,分享操作過程,文章通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-11-11

最新評論

河池市| 平舆县| 施秉县| 壶关县| 会泽县| 昌都县| 荥阳市| 太谷县| 温宿县| 安陆市| 东莞市| 河北区| 怀仁县| 莲花县| 柞水县| 剑川县| 兖州市| 沐川县| 浪卡子县| 同仁县| 三亚市| 辰溪县| 仲巴县| 玛曲县| 康平县| 专栏| 桂平市| 宁夏| 呼玛县| 竹北市| 天祝| 兴化市| 察隅县| 桐乡市| 南宁市| 大同市| 那坡县| 特克斯县| 诸暨市| 天津市| 淮阳县|