因為 centos 即將停止官方支持, 從此的工作和學習將轉(zhuǎn)移到 Debian 上進行
注:若圖片無法加載可訪問個人站的原文 https://lookoutldz.top/archives/jian-dan-ming-le-da-jian-dockerovertls
前置介紹
docker 默認運行在無網(wǎng)絡(luò)環(huán)境的 unix socket 下, 所以是不能對外提供服務(wù)的, 只能本地自己玩
如果想寫個程序調(diào)用 docker, 或者用 portainer 等工具管理 docker, 那就需要 docker 暴露 API 才行了
docker 支持通過 TCP 來暴露服務(wù), 可以選擇 SSH/HTTP/HTTPS 的方式進行, 此處我選擇泛用且安全性較高的 HTTPS 來暴露 docker 服務(wù)
禁止在公網(wǎng)暴露任何未做安全措施的端口!
所以禁止使用 HTTP 的方式來暴露 docker 服務(wù), 所以看到現(xiàn)在大量博客在灌水寫HTTP, 暴露 2375 端口這種過時又坑小白的方法, 我很生氣
HTTPS 其實就是在傳輸層(TCP)與應(yīng)用層(HTTP)間加了一層(SSL/TLS 層), 安全原理不在此贅述, 只需要知道使用它比直接用 HTTP 麻煩一點, 但安全系數(shù)大大提升, 做好心理準備即可(然而本篇是簡單明了系列, 自然不會麻煩到哪去)
因為是直接公網(wǎng)環(huán)境, 所以必須要有的幾個東西:
- 任意有公網(wǎng) IP 的服務(wù)器(不解釋)
- 域名(綁定了上述公網(wǎng) IP, 因為證書要基于域名使用, 所以必須要有域名), 沒有的直接找云服務(wù)商買, 很簡單
- SSL 證書(為上述域名申請的證書一套, 分別為根證書, 域名證書, 服務(wù)器私鑰), 可以自己創(chuàng)建, 也可以在云服務(wù)商那申請證書, 或者找證書簽發(fā)機構(gòu)申請, 有免費也有付費的. 我選擇申請一個, 幾分鐘搞定, 很簡單
安裝 docker
懶人五合一長命令一條搞定
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release -y
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -y
apt-get install docker-ce docker-ce-cli containerd.io -y
其它系統(tǒng)參考:
認清證書
以騰訊云處申請的證書為例, 其它同理
[圖片上傳失敗...(image-6c736-1651717108281)]
下載上圖兩個文件, 全部解壓后一共會得到幾個文件:
- xxx.key: 服務(wù)器私鑰文件
- xxx_bundle.pem: 一個捆綁包文件, 里面打包了服務(wù)器證書與公鑰
- xxx_bundle.crt: 同上, 只是后綴不同
- xxx.csr: 給服務(wù)器認證簽名的申請文件(Certificate Signing Request), 暫時沒用
- xxx_root.crt: CA 機構(gòu)的根證書, 信任鏈的起點, 你的證書之所以可信是因為它
如果是阿里云下載的, 則簡單點:
- xxx.key: 服務(wù)器私鑰文件
- xxx.pem: 一個捆綁包文件, 里面打包了服務(wù)器證書與公鑰
- xxx-root.crt: CA 機構(gòu)的根證書, 根據(jù)簽發(fā)機構(gòu)和證書類型, 文件名會有不同, 但只要認準 root 和 crt 關(guān)鍵字就行
在其它云服務(wù)商申請的或者在簽發(fā)機構(gòu)直接申請的也大同小異, 這里只要認準三個文件: 私鑰, 服務(wù)器證書捆綁包與根證書
分清這三個后就簡單了, 將私鑰重命名為 key.pem
, 服務(wù)器證書捆綁包重命名為 cert.pem
, 根證書重命名為 ca.pem
, 然后:
mkdir /root/.docker
將三個文件丟進去, 準備工作就 ok 了
修改配置
此處以 Debian
下 Docker version 20.10.14, build a224086
版本的配置進行操作
編輯配置
vim /usr/lib/systemd/system/docker.service
找到 ExecStart...
那行并注釋, 一坨命令貼下去:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/cert.pem --tlskey=/root/.docker/key.pem -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376
保存并退出, 重啟容器:
systemctl daemon-reload && systemctl restart docker
然后開放防火墻 2376 端口就完成了!
注意:
- ExecStart命令指定證書時要用絕對路徑, 不能用帶~的路徑
-
Docker version 20.10.5+dfsg1, build 55c4c88
版本下usr/bin/dockerd
要換成usr/sbin/dockerd
- 如果啟動失敗了, 多觀察與原命令的區(qū)別, 試錯幾次總能成功
測試
使用 portainer 來添加這個服務(wù)器看看
[圖片上傳失敗...(image-ce8d4e-1648979802209)]
添加成功或失敗都會有提示, 成功后切到 Home:
[圖片上傳失敗...(image-3b372a-1648979802209)]
輕松愉快~