首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0001. Ubuntu 上安裝 Docker 與各個容器、Asp.net Core網站

日期:2024年 04月 28日

標籤: Docker Container Redis RabbitMQ Ubuntu Linux Web C# Asp.NET Core Web MVC

摘要:Docker


應用所需:1. Ubuntu
解決問題:如何在一台 Ubuntu 主機上安裝 Docker,並且開始容器化
基本介紹:本篇分為 4 部分。
第一部分:Ubuntu 安裝 Docker
第二部分:建立 Redis 容器
第三部分:建立 RabbitMQ 容器
第四部分:建立 Asp.net Core網站容器






第一部分:Ubuntu 安裝 Docker

Step 1:基本安裝

基本安裝指令如下:
更新apt資料:

sudo apt update


建立憑證

sudo apt-get install ca-certificates curl


安裝金鑰

sudo install -m 0755 -d /etc/apt/keyrings


Step 2:安裝 Docker Compose

以下指令包含了 5 個項目

docker-ce: Docker CE 是 Docker 的社區版,用於構建、運行和管理容器。
docker-ce-cli: Docker CE CLI 是 Docker 的命令行工具,用於與 Docker 守護進程進行交互。
containerd.io: containerd.io 是一個高性能的容器運行時,用於管理容器的生命周期。
docker-buildx-plugin: Docker Buildx 插件是一個 Docker 的擴展,允許您構建多平台的 Docker 鏡像。
docker-compose-plugin: Docker Compose 插件是 Docker Compose 的插件,用於簡化多容器應用程序的管理和部署。
sudo apt-get install docker-compose


安裝完成後輸入 Docker –version 可以得到下圖:

Docker --version 



Step 3:建立測試容器(可跳過)

安裝完成後可以運行官方標準的 Hello World 進行測試

sudo docker run hello-world


預期會出現如下:

Step 4:Docker 常用指令

安裝完成後可以運行官方標準的 Hello World 進行測試


檢視所有 Image :

docker images


檢視所有 Image :

docker images


移除指定 Image :

docker rmi <Image的Id 或者 Name>


釋放 Image 使用空間,刪除系統所有未使用的Image :

docker image prune


停止指定容器 :

dcoker stop <ContainerId 或 ContainerName >


刪除指定容器 :

docker rm <ContainerId 或 ContainerName>


檢視 Docker 客戶端服務狀態 :

sudo systemctl status docker


重新啟動 Docker 服務

sudo systemctl restart docker.service

Step 5:排錯補充

在頻繁多人執行時,有可能遇到此問題,可以參考 排除方式
如果有安裝 Snap 會影響到

Status: Downloaded newer image for hello-world:latest
docker: Error response from daemon: all SubConns are in TransientFailure, 
        latest connection error: connection error: 
		desc = “transport: Error while dialing dial unix /run/containerd/containerd.sock: connect: permission denied”: unavailable.





第二部分:建立 Redis 容器

Step 1:建立 Volume

Redis 容器如果資料要持久化,可建立一個 Volume 便於自己人識別
Volume : redis_volume_dev

sudo docker volume create redis_volume_dev


Step 2:容器化 Redis

為了讓容器內的 Redis 能與外部網路連線,所以要開啟 Port:6379 彼此映射
幾個參數比較關鍵:

-d 容器以「後台模式」啟動,在背景運行容器。
–name redis_dev 容器指定的名稱
-p 6379:6379 外部系統通過主機的端口 6379 訪問 Redis 服務
-v redis_volume_dev:/data 容器內的 data 資料夾對應到宿主機的 redis_volume_dev 資料夾。
redis:latest 取得 Redis 最新版本的映像。
docker run -d --name redis_dev -p 6379:6379 --restart=always -v redis_volume_dev:/data redis:latest


Step 3:允許訪問 Redis

啟動後,還需以下指令,讓容器內的 Redis 可以被客戶端訪問
-it : 就是交互式操作(i) 與 分配一個終端(t)

docker exec -it redis redis-cli


Step 4:Demo 結果

使用自己熟悉的 Redis 工具,或者撰寫程式連到Redis Server
如下圖,並且有存去一些 Key 確保能正常存取 Redis



第三部分:建立 RabbitMQ 容器

Step 1:建立 Volume

RabbitMQ 容器如果資料要持久化,可建立一個 Volume 便於自己人識別
Volume : rabbitmq_volume_dev

sudo docker volume create rabbitmq_volume_dev


Step 2:容器化 RabbitMQ

為了讓容器內的 RabbitMQ 能與外部網路連線,所以要開啟 Port:15672 彼此映射
幾個參數比較關鍵:

-d 容器以「後台模式」啟動,在背景運行容器。
–name rabbitmq_dev 容器指定的名稱
-p 15672:15672 外部系統通過主機的端口 15672 訪問 RabbitMQ 服務
-v rabbitmq_volume_dev:/var/lib/rabbitmq 容器內的 /var/lib/rabbitmq 資料夾對應到宿主機的 rabbitmq_volume_dev 資料夾。
rabbitmq:latest 取得 rabbitmq 最新版本的映像。
docker run -d --name rabbitmq_dev --restart=always -p 5672:5672 -p 15672:15672 -v rabbitmq_volume_dev:/var/lib/rabbitmq rabbitmq:latest


Step 3:啟動 RabbitMQ Manager UI

RabbitMQ 安裝完成後,Web Manage UI 預設是關閉的,要自己啟動
有了 UI 操作介面,可以有效使開發者們管理 RabbitMQ ,而不用頻繁輸入指令

docker exec rabbitmq_dev rabbitmq-plugins enable rabbitmq_management


Step 4:RabbitMQ 服務狀態說明

在實務中 RabbitMQ 是有可能遇到故障異常,因此列出檢查服務狀態的參數
可以在 Ubuntu Shell 中輸入以下指令顯示 Status:

docker exec -it <container_id> rabbitmqctl status
Runtime:提供了 RabbitMQ 的運行時信息,包括操作系統、進程 ID、RabbitMQ 版本、節點名稱等。
Plugins:列出了已啟用的插件。
Data directory:提供了 RabbitMQ 數據存儲的目錄信息。
Config files:列出了 RabbitMQ 的配置文件。
Log file(s): 指示 RabbitMQ 的日誌文件位置。
Alarms: 顯示任何報警信息,這裡顯示為 “(none)”,表示沒有報警。
Memory: 顯示了 RabbitMQ 使用的記憶體情況,包括總內存使用量和各個部分的詳細信息。
File Descriptors: 顯示了文件描述符的使用情況,包括總數和限制。
Free Disk Space: 顯示了磁碟空間的情況,包括剩餘空間和低剩餘空間的警告閾值。
Totals: 顯示了連接數、隊列數和虛擬主機數量的總計。
Listeners: 顯示了 RabbitMQ 監聽的端口和協議。


Step 5:管理介面 - 登入 & Demo

可以從 Web 登入,進行基本配置
輸入遠端機器網址列 假設放在 192.168.100.1

 https://192.168.100.1:15672 



Step 6:管理介面 - 配置帳號

建立一個 admin 帳號

最終記得將預設的 guest 移除,即完成



第四部分:建立 Asp.net Core網站容器

Step 1:建立DockerFile

以一個預設的Asp.net Core WEB 專案為例
對專案 -> 滑鼠右鍵 -> 啟用Docker

本範例是 Ubuntu 因此選 Linux

產生的 DockerFile 如下:

Step 2:簽入版本控制

連到遠端的Ubuntu Server 將版控的代碼拉取
※這是 WinSCP 瀏覽資料夾工具,可以看到代碼已全拉取:

Step 3:產生Image

接著對該資料夾下的 DockerFile 產生 Image

docker build --no-cache -t myimage .


對應參數:

| build:進行 Image 的建構 | | -t myimage:產生的 Image 名稱 | | –no-cache :不進行緩存 | | . :當前目錄下的 DockerFile 檔案 |



Step 4:建立 Volume

網站也先準備好 Volume Config的查詢會較為便利
Volume : myweb_dev

sudo docker volume create myweb_dev


Step 5:容器化 網站

為了讓容器內的 網站 能與外部網路連線,所以要開啟映射 Https 與 Http
幾個參數比較關鍵:

-d 容器以「後台模式」啟動,在背景運行容器。
–name testweb 容器指定的名稱
-p 8065:8080 容器內 Http 對應到宿主機的 8065
-p 8066:8081 容器內 Https 對應到宿主機的 8066
-v myweb_dev:/app 容器內的 /app 資料夾對應到宿主機的 myweb_dev 資料夾。
myimage 自定義的 Image
docker run --name testweb -d -p 8065:8080 -p 8066:8081 -v myweb_dev:/app myimage


Step 6:Demo 結果

輸入遠端機器網址列 假設放在 192.168.100.1

 http://192.168.100.1:8065