Docker學習—概念及基本應用

1、Doker基本概念:

 Docker架構:

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

 

   相關描述:

概念 說明

Docker 鏡像(Images)

Docker 鏡像是用於創建 Docker 容器的模板,比如 mysql、Nginx等

Docker 容器(Container)

容器是獨立運行的一個或一組應用,是鏡像運行時的實體。

Docker 客戶端(Client)

Docker 客戶端通過命令行或者其他工具使用 Docker SDK (//docs.docker.com/develop/sdk/) 與 Docker 的守護進程通訊。

Docker 主機(Host)

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

Docker Registry

Docker 倉庫用來保存鏡像,可以理解為程式碼控制中的程式碼倉庫。

Docker Hub(//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 //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結合等相關運用。

引用:

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

 

Tags: