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 主要基礎命令:
- docker attach:將本地標準輸入、輸出和錯誤流附加到正在運行的容器
- docker build:從Dockerfile構建鏡像
- docker builder:用於構建
- docker checkpoint:用於管理檢查點
- docker commit:根據容器的更改創建新的鏡像
- docker config:管理Docker配置
- docker container:管理容器
- docker context:管理上下文
- docker cp:在容器和本地文件系統之間複製文件/文件夾
- docker create:創建新容器
- docker diff:檢查容器文件系統上文件或目錄的更改
- docker events:從伺服器獲取實時事件
- docker exec:在正在運行的容器中運行命令
- docker export:將容器的文件系統導出為tar存檔
- docker history:顯示鏡像的歷史記錄
- docker image:管理鏡像
- docker images:顯示鏡像列表
- docker import:從tarball導入內容以創建文件系統映像
- docker info:顯示系統的資訊
- docker inspect:返回Docker對象的低級資訊
- docker kill:殺死一個或多個正在運行的容器
- docker load:從tar存檔或STDIN載入鏡像
- docker login:登錄Docker倉庫
- docker logout:註銷docker倉庫登錄
- docker logs:獲取容器日誌
- docker manifest:管理Docker 鏡像清單和清單列表
- docker network:管理網路
- docker node:管理集群節點
- docker pause:暫停一個或多個容器中的所有進程
- docker plugin:管理插件
- docker port:列出容器的埠映射或特定映射
- docker ps:列出容器
- docker pull:從倉庫中提取鏡像或存儲庫
- docker push:推送鏡像或存儲庫到倉庫中
- docker rename:重命名容器
- docker restart:重新啟動一個或多個容器
- docker rm:移除一個或多個容器
- docker rmi:刪除一個或多個鏡像
- docker run:在新容器中運行命令
- docker save:將一個或多個鏡像保存到tar存檔(默認情況下流式傳輸到STDOUT)
- docker search:在Docker Hub中搜索鏡像
- docker secret:管理Docker機密
- docker service:管理服務
- docker stack:管理Docker堆棧
- docker start:啟動一個或多個已停止的容器
- docker stats:顯示容器資源使用統計資訊的實時流
- docker stop:停止一個或多個正在運行的容器
- docker swarm:管理集群
- docker system:管理docker
- docker tag:標記本地進行,將其歸入某一倉庫
- docker top:顯示容器正在運行的進程
- docker trust:管理Docker映像的信任
- docker unpause:取消暫停一個或多個容器中的所有進程
- docker update:更新一個或多個容器的配置
- docker version:顯示Docker版本資訊
- docker volume:管理卷
- 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/