?以下有免費的4090云主機提供ubuntu22.04系統的其他入門實踐操作
地址:星宇科技 | GPU服務器 高性能云主機 云服務器-登錄
相關兌換碼星宇社區---4090算力卡免費體驗、共享開發社區-CSDN博客
兌換碼要是過期了,可以私信我獲取最新兌換碼!!!
之所以推薦給大家使用,是因為上面的云主機目前是免費使用的,不需要大家再去安裝虛擬機,部署虛擬機,環境都搭配好了,非常適合新手入門,減少搭建的時間,把時間都用在實踐上。
一、概念準備
Portainer 是一款用于簡化 Docker 和 Kubernetes 環境管理的開源工具,它通過提供一個集中化的管理界面大大降低了容器技術的學習曲線,并提高了工作效率。
如何利用 Docker 在本地內部署 Portainer 并通過實踐操作實現外網訪問本地局域網部署的 Portainer 。
Portainer 支持?X86
、ARM
、?ARM64
?平臺的系統
在這里我們通過ubuntu22.04的操作系統進行演示
二、安裝Portainer流程
1、安裝docker
如果沒有的話參考下面這篇文章
在 Ubuntu 22.04 上安裝 Docker 25.0.5 其他版本類似-CSDN博客
想知道自己機器本身有沒有docker 通過下面命令查找
docker --version
?
有類似的輸出 說明是有docker的,還會給出對應的docker版本
2、安裝Portainer
方法一 通過Docker Hub(速度慢,修改有門檻)
?
docker pull outlovecn/portainer-cn?
#或者?
docker pull?ghcr.io/outlovecn/portainer-cn:main?
第一個容易出現連接超時 如下圖? ?推薦第二個,但是下載速度慢,需要配置加速器?
?
第一個的原因是為什么放在文末解決?
接下來走下一步
# 文件格式版本,一般固定 3.8
version: "3.8"# 服務(容器)列表
services:portainer:# 鏡像:官方社區版(CE)帶中文漢化image: portainer/portainer-ce:latest# 容器運行后的真實名字,方便 docker ps 查看container_name: portainer# 重啟策略:只要沒被人為 stop,異常退出會自動拉起restart: unless-stopped# 端口映射:左邊是宿主機端口,右邊是容器端口ports:- "9000:9000" # Web UI 端口- "8000:8000" # Edge Agent 端口(可選)# 數據卷:左邊是卷名或宿主路徑,右邊是容器內部路徑volumes:# 持久化 Portainer 配置、數據庫- portainer_data:/data# 把宿主機 Docker Socket 掛進來,使 Portainer 可以管理本機 Docker- /var/run/docker.sock:/var/run/docker.sock# 環境變量:時區environment:TZ: Asia/Shanghai# 健康檢查:每 30 秒用 curl 檢測 9000 端口是否正常healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/api/status"]interval: 30stimeout: 10sretries: 3# 卷聲明:portainer_data 會被 Docker 自動創建為 named volume
volumes:portainer_data:
下面是對上面代碼的表格解釋,可自行修改和優化
語句 | 作用 | 建議 |
version: "3.8" | 聲明 compose 文件格式的版本號 | 一般保持 3.8 即可,除非你的 Docker Engine 非常舊 |
services: | 定義要啟動的容器集合 | 下面縮進一格的都是“一個容器” |
portainer: | 這個容器的邏輯名字,可隨意改 | 改名后?container_name ?最好一起改,方便記憶 |
image: outlovecn/portainer-cn:latest | 指定鏡像源 | 想換官方版可改成?portainer/portainer-ce:latest |
container_name: portainer | 真正跑起來的容器名字 | 不能與已有容器重名 |
restart: unless-stopped | 只要用戶沒手動?docker stop ,任何情況退出都會自啟 | 測試環境可改成?no |
ports: - "8000:8000" | 把宿主機 8000 端口映射到容器 8000 端口 | 宿主機端口沖突時改左邊,如?"18000:8000" |
- "9000:9000" | 同上,9000 是 Portainer Web UI 端口 | 常用改法?"9001:9000" |
volumes: | 把宿主機目錄或卷掛進容器 | |
- portainer_data:/data | 把名為?portainer_data ?的卷掛到?/data | 卷名可改,數據會持久化 |
- /var/run/docker.sock:/var/run/docker.sock | 讓 Portainer 能管理宿主機的 Docker | 生產環境出于安全考慮,可以改用 TCP 方式 |
environment: TZ: Asia/Shanghai | 設置容器時區 | 國外服務器可改成?UTC |
healthcheck: | 自定義健康檢查 | |
test: ["CMD", "wget", "--spider", "http://localhost:9000/api/status"] | 每 30 秒用 wget 去訪問自身 9000 端口 | 如果鏡像里沒有 wget,可換成 curl |
interval: 30s timeout: 10s retries: 3 | 檢查間隔 / 單次超時 / 重試次數 | 調錯時可以適當加大 |
方法一優化說明(關鍵改進點)
版本升級
version: "3.8"
:使用新版本 Compose 語法(兼容性更好,支持更多特性)
安全與資源控制
端口精簡:移除?8000
?端口(僅需管理 Edge 設備時啟用)
健康檢查:自動監控服務狀態,異常時觸發重啟。
存儲優化
命名卷:將?./dockerconfig/portainer
?改為命名卷?portainer_data
,避免路徑依賴問題,提升數據持久化可靠性。
穩定性增強
restart: unless-stopped
:手動停止后不再自動重啟,更符合運維預期
時區配置:通過?TZ: Asia/Shanghai
?顯式設置容器時區(避免日志時間混亂)。
方法二 拉取portainer鏡像
1、拉取portainer對應鏡像
拉取鏡像網址Install Portainer BE with Docker on Linux | Portainer Documentation
docker pull portainer/portainer:last
#可刪掉后面的":last"
由于我加了last,會下載最新的,不加的話不影響后續操作
對鏡像打tag(可選)
docker tag portainer/portainer:latest myrepo/portainer:v1.0
#驗證tag有沒有打成功
docker images | grep portainer
如果成功了,能看到有兩條記錄,第一列是名字,可以看到名字不同,第二列是版本號 第三列是對應的ID? 可以看到IMAGE ID 相同
我們就可以通過新名字運行容器,如
docker run -d -p 9000:9000 --name portainer myrepo/portainer:v1.0
2、根據portainer鏡像開始啟動容器
sudo docker run -d \
# 以“后臺守護進程”方式啟動容器-p 8000:8000 \
# 把宿主機的 8000 端口映射到容器 8000 端口-p 9000:9000 \
# 把宿主機的 9000 端口映射到容器 9000 端口--name portainer \
# 給容器起個名字叫 portainer(方便 docker ps/stop/rm)--restart=always \
# 只要 Docker 服務啟動,這個容器就跟著自動重啟-v /var/run/docker.sock:/var/run/docker.sock \
# 把宿主機的 Docker 套接字掛進去,讓 Portainer 能“管理”宿主機 Docker-v portainer_data:/data \
# 把名為 portainer_data 的卷掛到容器 /data 目錄,持久化配置 如果沒有提前創建,會自動創建myrepo/portainer:v1.0
# 用本地(或私有倉庫)已經打好 tag 的鏡像
#myrepo/portainer:v1.0 更換成對應容器名
?-v portainer_data:/data \? 這個命令的提前創建命令如下
docker volume create portainer_data
如果有下面錯誤 要看有沒有輸錯(拼寫錯誤),或者是格式不對(多余空格等)
第三個框里面的permission denied是沒有sudo的原因導致的
可以發現咱們的容器已經開出來了,之所以選擇10001,是因為咱們的虛擬機是在星宇云社區上開出來的,允許的業務端口是10000和10001,在這里咱們選擇對應宿主機的10001,一會才能通過公網訪問咱們的portainer的web服務
查看端口占用
sudo lsof -i:10001
#查看其他端口,修改10001即可
可以發現,10001端口已經被容器占用了,這樣就不影響我們訪問portainer
三、放行portainer端口
放行portainer特定的端口
可參考linux入門,ubuntu22.04系統里的ssh服務(一)(含部分防火墻操作),方便開發-CSDN博客
上面文章提供了防火墻的放行操作,這里也在寫一次
sudo iptables -A INPUT -p tcp --dport 10001 -j ACCEPT
iptables -L -n
#查看放行規則#二選一
sudo ufw allow 10001/tcp
sudo ufw reload
#放行10001端口 重新加載防火墻sudo ufw status numbered
#查看防火墻規則是否有對應端口放行
放行對應的端口并驗證
如果有寶塔的話,放行端口更方便,參考下面這篇文章即可
入門級操作 開肝!!!寶塔賬號密碼修改、IP白名單訪問限制等等操作 (二)寶塔忘記密碼怎么辦、重置密碼大全~!-CSDN博客
四、訪問portainer服務
1、如果是星宇云社區開出來的虛擬機(必看)
跟開頭一樣網址是GPU租賃,GPU服務器租用,GPU租用平臺-星宇科技
登陸后找到控制臺
找到對應機器
查看IP和對應端口
因為社區的機器加了防火墻防護所以
????????第一行遠程端口是指外網ssh的連接端口,第二行業務端口10000是指機器本身的ip+10000端口可以通過外網157.xxx.xxx.xxx:40225訪問,第三行同理,設計了部分網絡的跳轉,這里需要一定的基礎理解
因此portainer的web訪問地址是:http://157.148.20.77:xxxx
末尾的端口就看我們是把portainer的web的訪問端口指向機器的哪一個業務端口了
2、如果是在自己電腦弄
訪問地址:https://本機IP:xxx
xxx指向對應得端口即可
五、故障排除
方法一的解決方案是更換鏡像源
配置docker的json文件即可?
sudo nano /etc/docker/daemon.json
鏡像源地址可以參考
在 Ubuntu 22.04 上安裝 Docker 25.0.5 其他版本類似-CSDN博客
文章里面提供了我自己常用的鏡像加速源,非常好用,這里給出幾個示例
騰訊云 | https://mirror.ccs.tencentyun.com |
網易 | https://hub-mirror.c.163.com |
中國科技大學 | https://docker.mirrors.ustc.edu.cn |
七牛云 | https://reg-mirror.qiniu.com |
或者用下面方法配置鏡像源也可以 (容易出錯,新手不建議)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"]
}
EOF#https://<你的ID>.mirror.aliyuncs.com 換成自己賬號的阿里云加速
相關操作參考下面這篇文章的末尾
centos安裝docker小白教程(詳細版)-CSDN博客
這個方法非常不建議,而且阿里云的鏡像加速源個人感覺不穩定!
sudo systemctl daemon-reload
sudo systemctl restart docker
#重啟docker即可
后面portainer的web上得操作后續更新!
后續更新請及時關注吧
請各位帥哥美女們多多支持!!小花花小心心? 更多入門知識慢慢補充啦
后期持續關注!