分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
本篇說明用代碼,預期有以下 3 項 Web 的目錄結構:
並且外層有 docker-compose.yml 為啟動點。
StaticWeb/
├── fingerprintjsExample/
│ ├── Dockerfile
│ └── web/
│ └── fingerprintjsExample.html
├── IndexedDBExample/
│ ├── Dockerfile
│ └── web/
│ └── fingerprintjsExample.html
├── ipinfoExample/
│ ├── Dockerfile
│ └── web/
│ └── fingerprintjsExample.html
└── docker-compose.yml
此篇範例的 3 項靜態頁面,是 Blog 中的文章,提供參考
ipinfoExample | : | 0002. 取得當前用戶 真實IP 的前端套件 ipinfo.io 介紹 |
fingerprintjsExample | : | 0003. 取得用戶瀏覽器指紋-前端工具 FingerprintJS 介紹 |
IndexedDBExample | : | 0004. 前端瀏覽器資料庫 IndexedDB 使用方式 |
將程式複製到遠端的伺服器上
建立 Image 過程分成 5 個步驟:
# 使用 Nginx 作為基底映像
FROM nginx:alpine
# 移除預設的 Nginx 頁面
RUN rm -rf /usr/share/nginx/html/*
# 複製本地的 index.html 到 Nginx 網頁根目錄
COPY web/httpsipinfo.ioExample.html /usr/share/nginx/html/index.html
# 曝露 Nginx HTTP 埠
EXPOSE 80
# 啟動 Nginx
CMD ["nginx", "-g", "daemon off;"]
先進入目錄下:
cd /dockerimage/ipinfoExample/
建立 Image 名稱為 static_web_ipinfoexample
docker build -t static_web_ipinfoexample .
建立 Container 並且給出的 Port 為 8091(宿主機)對應到 80(容器)
docker run -d -p 8091:80 --name static_web_ipinfoexample_container static_web_ipinfoexample
建立 Image 過程分成 5 個步驟(差別在複製靜態 Web 檔案的地方):
# 使用 Nginx 作為基底映像
FROM nginx:alpine
# 移除預設的 Nginx 頁面
RUN rm -rf /usr/share/nginx/html/*
# 複製本地的 index.html 到 Nginx 網頁根目錄
COPY web/IndexedDBExample.html /usr/share/nginx/html/index.html
# 曝露 Nginx HTTP 埠
EXPOSE 80
# 啟動 Nginx
CMD ["nginx", "-g", "daemon off;"]
先進入目錄下:
cd /dockerimage/IndexedDBExample/
建立 Image 名稱為 static_web_indexeddbexample
docker build -t static_web_indexeddbexample .
建立 Container 並且給出的 Port 為 8092(宿主機)對應到 80(容器)
docker run -d -p 8092:80 --name static_web_indexeddbexample_container static_web_indexeddbexample
建立 Image 過程分成 5 個步驟(差別在複製靜態 Web 檔案的地方):
# 使用 Nginx 作為基底映像
FROM nginx:alpine
# 移除預設的 Nginx 頁面
RUN rm -rf /usr/share/nginx/html/*
# 複製本地的 index.html 到 Nginx 網頁根目錄
COPY web/fingerprintjsExample.html /usr/share/nginx/html/index.html
# 曝露 Nginx HTTP 埠
EXPOSE 80
# 啟動 Nginx
CMD ["nginx", "-g", "daemon off;"]
先進入目錄下:
cd /dockerimage/fingerprintjsExample/
建立 Image 名稱為 static_web_fingerprintjsexample
docker build -t static_web_fingerprintjsexample .
建立 Container 並且給出的 Port 為 8093(宿主機)對應到 80(容器)
docker run -d -p 8093:80 --name static_web_fingerprintjsexample_container static_web_fingerprintjsexample
可以依序輸入以下,重啟 Nginx 主機
sudo nginx -t # 檢查是否正確
sudo systemctl reload nginx # 重新載入配置
sudo systemctl restart nginx # 重新啟動Nginx
可以進入 Portainer 檢閱容器運行狀況,或輸入以下指令調閱:
docker ps -a
可以觀察到,目前的訪問是透過宿主機的 Nginx 然後訪問到對應容器內的 Nginx 服務
※8091 ~ 8093 都是不同的容器
以下是說明:
version: ‘3’ | : | 使用 Docker Compose 的第3版規範。這是目前常用的版本之一,支持較多的功能 |
services | : | 定義了三個服務,分別是 fingerprintjsExample、IndexedDBExample 和 ipinfoExample,每一個服務代表一個 Docker 容器。 |
context | : | 設置了構建映像的上下文目錄。這裡指的是相對於 docker-compose.yml 文件的路徑 |
networks | : | 表示這個服務會連接到名為 webnet 的網絡(假如容器間需要相互通信網路)。 |
version: '3'
services:
fingerprintjsExample:
build:
context: ./fingerprintjsExample
dockerfile: Dockerfile
ports:
- "8091:80"
networks:
- webnet
IndexedDBExample:
build:
context: ./IndexedDBExample
dockerfile: Dockerfile
ports:
- "8092:80"
networks:
- webnet
ipinfoExample:
build:
context: ./ipinfoExample
dockerfile: Dockerfile
ports:
- "8093:80"
networks:
- webnet
networks:
webnet:
driver: bridge
先進入目錄下,然後執行 up -d:
cd dockerimage
docker-compose up -d
docker-compose.yml 檔案,其實就是將所有 Dockerfile 的工作整理成一個批次檔執行
docker-compose.yml 對於管理很方便,但如果 DockerFile 的檔案過多,會相依性過大,部署時會較不靈活。