目錄
1.多實例部署方案
2.容器的概念
3.docker初識
4.docker倉庫
5.docker鏡像
6.docker容器
7.docker和虛擬機的區別
8.docker命令解釋
9.dockerfile構建鏡像
10.離線分發鏡像
1.多實例部署方案
redis 命令( redis-cli XXXX )
set key value: 存數據( value )
get key :顯示數據
del key :刪除一對數據
lpush , rpush 存鏈表節點
lrange 遍歷
lrem 刪除 n 個節點
2.容器的概念
redis 程序結構
cs 結構,數據放在服務進程的內存中
命令行客戶端連接本地或遠程地址訪問
多種 API 可以訪問: hiredis
程序結構簡單,內部的數據結構和算法優秀
hiredisAPI 使用
C 函數庫,包含頭文件 <hiredis/hiredis.h> , 編譯時指定鏈接參數為 -
L/usr/local/lib -lhiredis
redisConnect 跟數據庫建立鏈接( redisFree 釋放掉)
redisCommand 發命令并通過返回值取出結果( freeReplyObject 釋
放掉)
運行時若提示找不到共享庫,則在 .bashrc 最末端添加一句 export
LD_LIBRARY_PATH=/usr/local/lib , 重新打開終端運行
3.docker初識
怎樣寫框架
面向對象的軟件設計 1. 畫用例圖 ---- 》分析需求(不要考慮太多擴展,不要考慮實現方
式)
回顯功能的實現方式
kernel 類:基于 epoll 調度所有通道
通道抽象類:
寫出緩沖區函數
將數據追加到緩沖區的函數
虛函數:讀,寫,獲取 fd ,數據處理
標準輸入通道子類
重寫讀和處理的函數
處理數據的函數:將數據交給輸出通道
標準輸出通道子類
重寫寫數據的函數
kernel 和通道類的調用
創建通道對象(成員賦值)
添加通道到 kernel
run
4.docker倉庫
添加 FIFO 文件通道支持
寫 FIFO 類繼承 Ichannel
重寫虛函數的過程中,重構抽象類 Ichannel
添加構造函數的參數用來表示管道文件和方向
添加轉大寫功能
寫新類(數據處理類)封裝轉換大寫字母的功能
拆掉標準輸入通道和標準輸出通道的包含關系,在標準輸入通道中
包含數據處理類的對象
數據處理類中包含輸出通道對象
5.docker鏡像
責任鏈模式
處理者類和消息類
處理者類需要子類重寫內部處理函數和獲取下一個處理者的函數 處理者類的外部處理函數:當前環節處理 --- 》獲取下一個環節 --- 》
下一個環節處理
重構當前代碼
抽象通道類繼承 handler 類,重寫 internel_handle 函數
定義消息類: IO 方向和字節數據
功能處理類繼承 handler 類
輸入通道類 getnext 返回功能處理對象
功能處理類的 internel_handle 函數內直接調用 zinx_sendout 輸出數
據
通道類, internel_handle 函數:
消息方向 IN , readfd
消息方向 OUT ,緩存 bytemsg 對象中的 content
epollin 事件:創建 in 方向消息 -- 》交給 channle 的 handle 函數
epollout 事件:調用通道的 flushout
6.docker容器
7.docker和虛擬機的區別
8.docker命令解釋
Sourceinsight 快捷鍵
ctrl+o 彈出文件選擇欄
alt+L 彈出符號欄
ctrl+ 鼠標左鍵 跳轉到函數定義
alt + < 回退 alt+ > 下一個
ctrl+1 顯示調用關系
shift+f8 高亮單詞 ctrl+shift+f8 取消所有高亮
f7 查找符號
9.dockerfile構建鏡像
分發框架
庫分發:編譯成 libXXXXX.so
編譯參數: -fPIC -shared Makfiel 中添加 install 目標,拷貝庫文件和頭文件到 /usr/lib
和 /usr/include
10.離線分發鏡像
sudo dpkg --remove cmake
sudo dpkg --remove libcurl4
容器技術
容器是操作系統和應用程序之間的一個虛擬層
應用程序可以在容器中運行(跟在操作系統中運行相同)。容器以
應用程序的形式運行在操作系統中
docker 程序架構
cs 架構
容器,鏡像都是由守護進程管理
docker 的三大核心概念
鏡像
靜態的一組環境的集合
運行:創建容器,在容器中運行 XXXX
手動創建:
下載原始鏡像
在基于該鏡像運行 bash ,裝所需軟件
將裝好軟件的容器提交為新的鏡像
腳本創建:
寫 Dockerfile :規定鏡像創建的過程
構建鏡像
容器
運行時的一組環境,基于某個鏡像創建
容器的修改不會影響鏡像 運行容器:
守護運行 -d
端口映射 : -p 外端口號 : 內端口號
共享文件系統: -v 外絕對路徑 : 內絕對路徑
容器開始于要運行的進程,結束于進程退出
刪掉所有容器:
倉庫( dockerhub )
類似 github ,是一個存儲鏡像的公共倉庫
docker pull 作者 / 鏡像名 : 標簽名 拉去鏡像
docker push 分享鏡像到倉庫中(分享之前先改名 -- 》 docker tag )
腳本創建 docker 鏡像
1. 指定基礎鏡像( FROM XXXX )
2. 裝環境( RUN , WORKDIR , COPY )
3. 指定執行點( ENTRYPOINT )
ENTRYPOINT ["XXX"] :
XXX 是且僅是鏡像所運行的程序
CMD 命令指定你的內容會作為 XXX 的參數
run 鏡像名 xxxx : xxxx 會作為 XXX 的參數
CMD ["XXX"]
鏡像缺省運行 XXX 程序
run 鏡像名 xxxx :容器會執行 xxxx 程序
離線分發鏡像
導出容器: docker export -o XXX.tar af85: 將容器中固化的內容導
出
導入鏡像: docker import XXX.tar my_image:my_tag :導入的鏡像
只包含原容器內的文件系統,缺失了鏡像執行點,暴露端口,原鏡
像的構建歷史