2024年12月29日 星期日

30分鐘 docker 入門筆記

        課程內容:
一.基本概念
二.安裝配置
三.常用命令
四.構建鏡像
五.運行容器
六.Docker Compose & Kubernetes

Docker 簡介:
        Docker 是一個用於構建(build)、運行(run)、傳送(share) 應用程式的平台。可以將應用程式打包成一個個的貨櫃,然後docker 就可以將這些貨櫃運送到任何需要的地方。有了Docker 我們就可以將作業系統(OS)、作業系統運行時所需要的各種依賴包(depend packages)、第三方軟件庫與配置文件等打包在一起,以便在任何環境中都可以正確地運行。

為何要使用Docker:
        比方說,我們建立一個網站,用到了現在比較流行的前後端分離架構。前端使用Vue框架來構建網站的介面,後端使用Java的SpringBoot微服務框架來提供各種服務與接口,然後使用MySQL資料庫來存儲資料。如果沒有Docker,我們需要在本地先安裝前端Node.js環境、各種npm依賴包、Java運行的環境、SpringBoot 微服務的各種第三方依賴包、安裝MySQL資料庫、設定相對應的環境變量與啟動這些服務。網站才能正常運行起來。如果規模再大一點,我們還需要設定Redis緩存、配置nginx負載平衡以及各種微服務框架等等。聽到這些設定,簡直一個頭兩個大。等等,還沒完。如果你需要把這個網站部署到測試環境或開發環境上,那麼剛剛所有步驟都需要在新環境重新再來一次。運氣好的話,可能幾個小時就搞定了。運氣不好,可能需要一整天,甚至更長的時間。而有了Docker,我們就可以將它們打包成一個個的貨櫃,只要在開發環境中運行成功了。那麼在其他環境中,一定也是可以運行成功的。

Docker和虛擬機的區別
        在開始學習之前,我們先來了解一下,Docker和傳統的虛擬機之間有什麼區別。Vmware、Virtualbox與Paralels Desktop等虛擬機軟體,與Windows WSL和 Hyper-V功能。我們可以在Windows中通過WSL功能,安奘和使用Linux系統。也可以在Mac上通過虛擬機軟體Paralels Desktop,運行各種Windows 和各種Linux系統。它們是完整的作業系統和實際的Windows和Linux系統一樣。可以在這個操作系統中運行應用軟體。這是通過一種叫做虛擬化(Hypervior)的技術來實現的。虛擬化(Hypervior)是一種將實體資源虛擬為多個邏輯資源的技術。它可以將一台實體服務器虛擬成多個邏輯服務器。每個邏輯服務器都有自己的作業系統、CPU、Memory、HD和網路接口等等。它們之間是完全隔離的,可以獨立運行。虛擬機在一定程度上實現了資源整合,可以將一台服務器的計算能力、存儲能力、網路資源分配給多個邏輯服務器,實現多台服務器的功能。但是它的缺點也非常明顯,每台虛擬機都需要占用大量的資源,比如CPU、Memory、HD、網路等等。而且啟動速度非常慢,通常需要幾分鐘甚至十幾分鐘。而大部分的情況下,其實我們的一台服務器上,只要運行一個主要對外提供服務的應用程序就可以了,並不需要一個完整的作業系統所提供的所有功能。拿剛剛的例子來說,其實我們所需要的,可能只是一個Web服務器。但是虛擬機卻需要啟動一個完整的作業系統。包括作業系統的內核(Kernel)、各種的系統服務、各種工具,甚至是圖形介面等等。這些我們並不需要的服務佔用了大量的資源,導致資源的浪費和啟動速度慢的問題。
        了解了虛擬機之後,我們再來看一下容器。這裡注意一下,Docker 和容器是兩個不同的概念。Docker 非常的流行,以至於很多人把Docker和容器混為一談。其實Docker只是容器的一種實現,是容器化的解決方案和平台。而容器是一種虛擬化技術和虛擬機類似,也是一個獨立的環境,可以在這個環境中運行應用程序。和虛擬機不同的是它不需要在容器中,運行一個完整的作業系統。而是使用宿主機(Host)的作業系統,所以啟動速度非常快。通常只需要幾秒鐘。同時因為需要的資源非常少,所以可以在一台實體服務器上運行更多的容器。這樣就可以更加充分地利用服務器的資源,減少資源的閒置和浪費。比如我們一台實體服務器上,可能只能運行幾個虛擬機,但是卻可以運行上百個容器。這就是容器和虛擬機的一些主要區別。

基本原理和概念:
        Docker 是如何做到這一塊呢?由於時間的關係,這裡不會介紹Docker原理和體系架構。但是這裡有幾個非常重要的概念,是需要你一定要掌握的。




資料來源:

2024年10月4日 星期五

軟體定義網路SDN-主題2-1 OpenFlow 概述

學習目標:
一.介紹OpenFlow特性
二.介紹OpenFlow Ports:實體port、邏輯port、保留port

一.介紹OpenFlow特性
1.OpenFlow 是
(1).控制器與交換器之間溝通的通訊協定
(2)使用了TCP (port 6653;舊版 port 6633)
(3)定義了轉發層的行為

2.OpenFlow規格書
版本                               代碼                     釋出時間                                           釋出組織
1.0.0                               0x01                     2009/12                                              openflow.org
1.1.0                               0x02                     2011/02                                              openflow.org
1.2.0                               0x03                     2011/12                                                  ONF
1.3.0(最新1.3.5)            0x04                     2012/06(2015/04)                                  ONF
1.4.0(最新1.4.1)            0x05                     2013/10(2015/04)                                  ONF
1.5.0(最新1.5.1)            0x06                     2014/12(2015/04)                                  ONF

3.轉發規格以Flow為單位
                                               Host           <--Flow-->       Host
                                              兩台Host 之間所有的封包都叫做Flow


   




2024年5月16日 星期四

康軒版資訊科技-三下-文字語音轉換-補充教材-文字轉語音

        最近上康軒版資訊科技-三下課程時,如果只上課程內容,沒有實作,感覺課程內容很乾。總覺得缺少什麼,希望能讓學生實作。因此,找了谷歌大神,輸入關鍵字:python 文字轉語音。就找到資料來源1.文字轉換成語音: gTTS / gTTS: A Google Text-to-Speech Wrapper資料來源2.[Python]如何Text to Speech: pyttsx3, gTTS。此時,看完後就改寫程式碼如下:

文字轉語音

安裝套件:pip install gTTS
檔名:test.py
內容:
from gtts import gTTS
#language = "zh-tw"
language = "en"
s = gTTS("Sample Text",lang=language,slow="false")
s.save("sample.wav")

更換成中文
誠信,如同一輪明月普照大地,以它的清輝驅盡人間的陰影;誠信如一束玫瑰的芬芳,能打動有情人的心。無論時空如何變幻,都閃爍著誘人的光芒。有了她,生活就有了芬芳,有了她,人生就有了追求!

程式碼如下:
from gtts import gTTS
language = "zh-tw"
#language = "en"
s = gTTS("誠信,如同一輪明月普照大地,以它的清輝驅盡人間的陰影;誠信如一束玫瑰的芬芳,能打動有情人的心。無論時空如何變幻,都閃爍著誘人的光芒。有了她,生活就有了芬芳,有了她,人生就有了追求!",lang=language,slow="false")
s.save("GoodFaith.wav")

實作要求:
請上傳 sample.wav 與 GoodFaith.wav


資料來源:

2024年4月15日 星期一

康軒版資訊科技-二年級搜尋演算法例子-終極密碼

教師介紹內容:
依照課本要求,寫下程式碼如下:
檔案名稱:終極密碼.py
檔案內容:
import random
ans = random.randint(1,99)
Total = 1
print("這是一個終極密碼遊戲")
guess = int(input('請輸入一個數字:'))
while guess != ans:
    if guess > ans:
        Total=Total+1
        print("太大")
        guess = int(input('請輸入一個數字:'))
    elif guess < ans:
        Total=Total+1
        print("太小")
        guess = int(input('請輸入一個數字:'))
print("完全正確,正確答案為",ans)
print("共進行",Total,"次猜測")
       

2024年4月11日 星期四

矩陣相乘 Python 例子


這是結果:

這是Python程式:
def isMatrixMultiply(A,B):
    N1 = len(A[0])
    N2 = len(B)
    if (N1 == N2):
        OK = True
    else:
        OK = False
    return OK
   
def MatrixMultiply(A,B):
    M = len(A)
    N1 = len(A[0])
    N2 = len(B)
    P = len(B[0])
    if (N1 == N2):
        N = N1
        for i in range(M):
            for k in range(P):
                Temp = 0
                for j in range(N):
                    Temp = Temp + A[i][j]*B[j][k]
                C[i][k] = Temp
        return C

A = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
B = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
C = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
OK = isMatrixMultiply(A,B)
if (OK):
    C = MatrixMultiply(A,B)
    for i in range(len(C)):
        for j in range(len(C[0])):
            print(C[i][j],end='\t')
        print(

2024年1月9日 星期二

康軒版資訊科技5-3-1 認識系統平台之一次開啟100個瀏覽器來灌爆記憶體Python版


        在本單元,會讓學生認識記憶體的功能。但是,老師要如何讓學生感興趣的作法?順便引導學生寫文字型態的程式?
        學生很喜歡一直點選瀏覽器。
        有天,老師問他為什麼要這樣做?
        學生回答:我要撐爆記憶體,看看系統會不會崩潰。
        老師說:你這樣做,太LOW。我有方法,可以一次增加100個瀏覽器,要不要學?

檔案名稱:browser100.py
檔案內容:
import webbrowser
url = "https://tw.yahoo.com"
for i in range(5):
    webbrowser.open(url)
執行browser100.py,預設瀏覽器就會出現五個分頁,如下圖:

接下來修改程式碼,將5改為100,如下圖:
檔案名稱:browser100.py
檔案內容:
import webbrowser
url = "https://tw.yahoo.com"
for i in range(100):
    webbrowser.open(url)
執行browser100.py,預設瀏覽器就會出現100個分頁,如下圖:

資料來源:

康軒版資訊科技5-3-1 認識系統平台之一次開啟100個瀏覽器來灌爆記憶體BAT版

系列文章:

        在本單元,會讓學生認識記憶體的功能。但是,老師要如何讓學生感興趣的作法?順便引導學生寫文字型態的程式?
        學生很喜歡一直點選瀏覽器。
        有天,老師問他為什麼要這樣做?
        學生回答:我要撐爆記憶體,看看系統會不會崩潰。
        老師說:你這樣做,太LOW。我有方法,可以一次增加100個瀏覽器,要不要學?
第一階段:教學歷程:
        只見到老師開啟一個記事本,打開edge瀏覽器的捷徑內容,複製目標,貼到記事本。開啟yahoo網頁,將yahoo網址複製,貼上。就會得到
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" https://tw.yahoo.com
接下來,複製該文字,再貼上四次,就會得到五行程式碼。將此檔案儲存,檔名browser100.bat。存檔類型:所有檔案。編碼:ANSI。最後存檔。最後點選browser100.bat,預設瀏覽器就會出現五個分頁。
詳細過程如下:
        1.打開edge瀏覽器的捷徑內容
        2.複製目標
        3.貼到記事本,開啟yahoo網頁,將yahoo網址複製,貼上。
        4.就會得到
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" https://tw.yahoo.com
        5.複製該文字,再貼上四次,就會得到
        6.將此檔案儲存,檔名browser100.bat。存檔類型:所有檔案。編碼:ANSI。最後存檔。

        7.最後點選browser100.bat,預設瀏覽器就會出現五個分頁。
第二階段:教學歷程:
        1.在原先的browser100.bat,刪除四個程式碼,如下圖:
        2.在原本的程式碼,加上for 迴圈,使用方式如資料來源1.BAT批次指令: For的功能介紹

         檔名:browser100.bat
         檔案內容:
for /L %%i in (1 1 5) do (
 "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" https://tw.yahoo.com
)
pause

        3.點選browser100.bat,就會出現5個分頁
        4.將程式碼的5 改為100。存檔後,即可再次點選。
         檔名:browser100.bat
         檔案內容:
for /L %%i in (1 1 100) do (
 "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" https://tw.yahoo.com
)
pause


資料來源:
1.BAT批次指令: For的功能介紹


        
         

30分鐘 docker 入門筆記

        課程內容: 一.基本概念 二.安裝配置 三.常用命令 四.構建鏡像 五.運行容器 六.Docker Compose & Kubernetes Docker 簡介:         Docker 是一個用於構建(build)、運行(run)、傳送(share...