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/     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM