1. 程式人生 > 實用技巧 >Docker學習—概念及基本應用

Docker學習—概念及基本應用

1、Doker基本概念:

 Docker架構:

  Docker使用客戶端-伺服器架構。Docker客戶端與Docker守護程序進行對話,該守護程序完成了構建,執行和分發Docker容器的繁重工作

  相關描述:

概念說明

Docker 映象(Images)

Docker 映象是用於建立 Docker 容器的模板,比如 mysql、Nginx等

Docker 容器(Container)

容器是獨立執行的一個或一組應用,是映象執行時的實體。

Docker 客戶端(Client)

Docker 客戶端通過命令列或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/

) 與 Docker 的守護程序通訊。

Docker 主機(Host)

一個物理或者虛擬的機器用於執行 Docker 守護程序和容器。

Docker Registry

Docker 倉庫用來儲存映象,可以理解為程式碼控制中的程式碼倉庫。

Docker Hub(https://hub.docker.com) 提供了龐大的映象集合供使用。

一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標籤(Tag);每個標籤對應一個映象。

通常,一個倉庫會包含同一個軟體不同版本的映象,而標籤就常用於對應該軟體的各個版本。我們可以通過<倉庫名>:<標籤>的格式來指定具體是這個軟體哪個版本的映象。如果不給出標籤,將以latest

作為預設標籤。

Docker Machine

Docker Machine是一個簡化Docker安裝的命令列工具,通過一個簡單的命令列即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。



 Docker 包含3個基本概念:

  • 映象(Image):Docker 映象(Image),就相當於是一個 root 檔案系統
  • 容器(Container):映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣。容器可以被建立、啟動、停止、刪除、暫停等。
  • 倉庫(Repository):
    倉庫可看成一個程式碼控制中心,用來儲存映象。

 Docker應用場景:

  • 快速,一致地交付您的應用程式:容器非常適合持續整合和持續交付(CI / CD)工作流程
  • 響應式部署和擴充套件:Docker 是基於容器的平臺,允許高度可移植的工作負載

  • 在同一硬體上執行更多工作負載:Docker 輕巧快速。它為基於虛擬機器管理程式的虛擬機器提供了可行、經濟、高效的替代方案

2、Doker常見命令:

 Docker 主要基礎命令:  

  1. docker attach:將本地標準輸入、輸出和錯誤流附加到正在執行的容器
  2. docker build:從Dockerfile構建映象
  3. docker builder:用於構建
  4. docker checkpoint:用於管理檢查點
  5. docker commit:根據容器的更改建立新的映象
  6. docker config:管理Docker配置
  7. docker container:管理容器
  8. docker context:管理上下文
  9. docker cp:在容器和本地檔案系統之間複製檔案/資料夾
  10. docker create:建立新容器
  11. docker diff:檢查容器檔案系統上檔案或目錄的更改
  12. docker events:從伺服器獲取實時事件
  13. docker exec:在正在執行的容器中執行命令
  14. docker export:將容器的檔案系統匯出為tar存檔
  15. docker history顯示映象的歷史記錄
  16. docker image管理映象
  17. docker images顯示映象列表
  18. docker import從tarball匯入內容以建立檔案系統映像
  19. docker info顯示系統的資訊
  20. docker inspect返回Docker物件的低階資訊
  21. docker kill殺死一個或多個正在執行的容器
  22. docker load從tar存檔或STDIN載入映象
  23. docker login登入Docker倉庫
  24. docker logout登出docker倉庫登入
  25. docker logs獲取容器日誌
  26. docker manifest管理Docker 映象清單和清單列表
  27. docker network管理網路
  28. docker node管理叢集節點
  29. docker pause暫停一個或多個容器中的所有程序
  30. docker plugin管理外掛
  31. docker port列出容器的埠對映或特定對映
  32. docker ps列出容器
  33. docker pull從倉庫中提取映象或儲存庫
  34. docker push推送映象或儲存庫到倉庫中
  35. docker rename重新命名容器
  36. docker restart重新啟動一個或多個容器
  37. docker rm移除一個或多個容器
  38. docker rmi刪除一個或多個映象
  39. docker run在新容器中執行命令
  40. docker save將一個或多個映象儲存到tar存檔(預設情況下流式傳輸到STDOUT)
  41. docker search在Docker Hub中搜索映象
  42. docker secret管理Docker機密
  43. docker service管理服務
  44. docker stack管理Docker堆疊
  45. docker start啟動一個或多個已停止的容器
  46. docker stats顯示容器資源使用統計資訊的實時流
  47. docker stop停止一個或多個正在執行的容器
  48. docker swarm管理叢集
  49. docker system管理docker
  50. docker tag標記本地進行,將其歸入某一倉庫
  51. docker top顯示容器正在執行的程序
  52. docker trust管理Docker映像的信任
  53. docker unpause取消暫停一個或多個容器中的所有程序
  54. docker update更新一個或多個容器的配置
  55. docker version顯示Docker版本資訊
  56. docker volume管理卷
  57. docker wait阻止,直到一個或多個容器停止,然後列印它們的退出程式碼

 Docker-compose主要基礎命令:

  build              生成或重建服務
  bundle             從Compose檔案生成Docker bundle
  config             驗證並檢視撰寫檔案
  create             建立服務
  down               停止並刪除容器、網路、映象和卷
  events             從容器接收實時事件
  exec               在正在執行的容器中執行命令
  help               獲取命令幫助
  images             顯示映象列表
  kill               殺死容器
  logs               檢視容器的輸出
  pause              暫停服務
  port               列印埠繫結的公共埠
  ps                 顯示容器列表
  pull               拉取服務映象
  push               推送服務映象
  restart            重新啟動服務
  rm                 移除停止的容器
  run                執行一次性命令
  scale              設定服務的容器數
  start              啟動服務
  stop               暫停服務
  top                顯示正在執行的程序
  unpause            取消暫停服務
  up                 建立並啟動容器
  version            顯示Docker-Compose版本資訊

這裡提到的都是主要的命令,每個命令可能還有很多引數,在具體使用中來具體學習,接下來我們試驗下。

3、基本應用-部署.net core專案到Docker中

 本次docker採用docker for windows,安裝步驟忽略,下載docker安裝檔案後,下一步即可:

 本次驗證將自己學習認證服務部署到Docker中:

 

  • 建立Dockerfile
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["cz.IdentityServer/cz.IdentityServer.csproj", "cz.IdentityServer/"]
RUN dotnet restore "cz.IdentityServer/cz.IdentityServer.csproj"
COPY . .
WORKDIR "/src/cz.IdentityServer"
RUN dotnet build "cz.IdentityServer.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "cz.IdentityServer.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "cz.IdentityServer.dll"]

  • 編譯映象
docker build -t czids:dev -f ./cz.IdentityServer/Dockerfile .

說明:
-t  名稱和可選的標記格式如:名稱:標記
-f  Dockerfile的名稱(預設為“PATH/Dockerfile”)
.  命令最後英文狀態的 "." 不能省略,表示在當前目錄中查詢 Dockerfile檔案

  當看到以下內容則映象生成成功:

  可以看到czids映象已編譯成功,接下來把該映象執行起來。  

  • 執行容器:

  由於該專案使用了mysql,我們接下來在docker中搭建一個mysql環境:

   拉取mysql映象:docker pull mysql:latest  

  

  啟動mysql服務:

 執行命令:
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

   

  測試mysql連線:

    

 執行映象czids:

docker run -d -p 8000:80 --name czids czids:dev

-d      在後臺執行容器並列印容器ID
-p      將容器的埠釋出到主機格式:宿主機埠:docker埠
--name    容器名稱
czids:dev  映象名稱及標籤

  

  • 執行效果:   

  

4、後續:

  下一步將對docker進一步學習,容器編排、叢集、k8s結合等相關運用。

引用:

官網地址: https://docs.docker.com/