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=admin.123 mysql
-i      互動式操作
-t      終端
-d      在後臺執行容器並列印容器ID    
--name    容器名稱
-p      將容器的埠釋出到主機格式:宿主機埠:docker埠
-e       設定環境變數:root賬號密碼:

   

  測試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/     

&n