三分钟Docker-镜像、容器实战篇
本文主要內容:
Docker 鏡像、容器 常用命令整理
使用Docker常見命令,搭建Consul集群
通過創建自定義鏡像,把.NetCore Api運行在Docker中
1.鏡像、容器命令
鏡像
| 1 | docker image build | 基于Dockerfile創建鏡像 |
| 2 | docker image history | 顯示鏡像的歷史記錄,主要因為鏡像文件由多個層組成,那么可以使用該命令知道各個層的內容具體是什么。 |
| 3 | docker image import | Import the contents from a tarball to create a filesystem image |
| 4 | docker image inspect | 顯示鏡像的詳細信息 |
| 5 | docker image load | 載入鏡像,可以使用該命令將導出的tar文件再導入本地鏡像庫 |
| 6 | docker image ls | 列出本地主機上安裝的所有鏡像 |
| 7 | docker image prune | 清理一些臨時的鏡像文件,未被使用的。 |
| 8 | docker image pull | 從registry中拉取鏡像或存儲庫(repository),可以指定Tag(一般用來標識版本信息),默認會選擇latest標簽,下載最新版本的鏡像。 |
| 9 | docker image push | 將鏡像或存儲庫推送到注冊表(registry) |
| 10 | docker image rm | 刪除一個或多個鏡像 |
| 11 | docker image save | 存取鏡像,如果要導出鏡像到本地文件,可以使用該命令 |
| 12 | docker image tag | 為本地鏡像添加新的標簽。 |
容器
| 01 | docker container attach | 進入容器 |
| 02 | docker container commit | Create a new image from a container’s changes |
| 03 | docker container cp | 在容器和主機之間復制文件 |
| 04 | docker container create | 創建容器,狀態是停止的,需要使用start命令 |
| 05 | docker container diff | 查看容器內文件系統的變更 |
| 06 | docker container exec | 可以在運行中容器內執行命令 |
| 07 | docker container export | 導出容器,文件類型后綴tar |
| 08 | docker container inspect | 查看容器詳情 |
| 09 | docker container kill | Kill one or more running containers |
| 10 | docker container logs | 查看容器輸出記錄 |
| 12 | docker container ls | 列出所有容器 |
| 13 | docker container pause | 暫停容器 |
| 14 | docker container port | 查看端口映射 |
| 15 | docker container prune | Remove all stopped containers |
| 16 | docker container rename | Rename a container |
| 17 | docker container restart | Restart one or more containers |
| 18 | docker container rm | 刪除一個或多個容器 |
| 19 | docker container run | 運行一個容器,等同于先create、在start命令 |
| 20 | docker container start | 啟動容器 |
| 20 | docker container stats | 查看統計資源信息(cpu,內存,存儲,網絡等使用情況) |
| 21 | docker container stop | 終止容器 |
| 22 | docker container top | 查看容器內進程 |
| 23 | docker container unpause | Unpause all processes within one or more containers |
| 24 | docker container update | 更新容器配置 比如啟動方式--restart=always |
| 25 | docker container wait | Block until one or more containers stop, then print their exit codes |
2.使用Docker常見命令,搭建Consul集群
拉取consul鏡像到本地
docker pull consul運行consul容器并且添加服務節點consul_node_1和consul管理界面
docker run -d -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 consul agent -server -bootstrap -ui -node=consul_node_1 -client='0.0.0.0'單機版的consul已經運行起來了,下面搭建個consul集群
查看consul_server_1容器的ip地址,再添加2個服務節點,組成集群
docker inspect --format='{{.NetworkSettings.IPAddress}}' consul_server_1添加consul_node_2節點
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 consul agent -server -node=consul_node_2 -join='172.17.0.2'添加consul_node_3節點
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 consul agent -server -node=consul_node_3 -join='172.17.0.2'最后添加3個client 加入集群
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_4 consul agent -client -node=consul_node_4 -join='172.17.0.2' -client='0.0.0.0'docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_5 consul agent -client -node=consul_node_5 -join='172.17.0.2' -client='0.0.0.0'docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_6 consul agent -client -node=consul_node_5 -join='172.17.0.2' -client='0.0.0.0'在瀏覽器輸入localhost:8500,查看集群信息
client節點是不參與leader選舉的,使用如下命令查看
docker exec consul_server_1 consul operator raft list-peers使用如下命令查看集群情況
consul參數解釋:
–net=host docker參數, 使得docker容器越過了net namespace的隔離,免去手動指定端口映射的步驟
-server consul支持以server或client的模式運行, server是服務發現模塊的核心, client主要用于轉發請求
-advertise 將本機私有IP傳遞到consul
-retry-join 指定要加入的consul節點地址,失敗后會重試, 可多次指定不同的地址
-client 指定consul綁定在哪個client地址上,這個地址可提供HTTP、DNS、RPC等服務,默認是>127.0.0.1
-bind 綁定服務器的ip地址;該地址用來在集群內部的通訊,集群內的所有節點到地址必須是可達的,>默認是0.0.0.0
allow_stale 設置為true則表明可從consul集群的任一server節點獲取dns信息, false則表明每次請求都會>經過consul的server leader
-bootstrap-expect 數據中心中預期的服務器數。指定后,Consul將等待指定數量的服務器可用,然后>啟動群集。允許自動選舉leader,但不能與傳統-bootstrap標志一起使用, 需要在server模式下運行。
-data-dir 數據存放的位置,用于持久化保存集群狀態
-node 群集中此節點的名稱,這在群集中必須是唯一的,默認情況下是節點的主機名。
-config-dir 指定配置文件,當這個目錄下有 .json 結尾的文件就會被加載,詳細可參考https://www.consul.io/docs/agent/options.html#configuration_files
-enable-script-checks 檢查服務是否處于活動狀態,類似開啟心跳
-datacenter 數據中心名稱
-ui 開啟ui界面
-join 指定ip, 加入到已有的集群中
3.通過創建自定義鏡像,把.NetCore Api運行在Docker中
生成Dockerfile文件
本示例使用前幾天分享的項目把AAStore.ProductCatalog.Api,選中項目右鍵->添加->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 8081 EXPOSE 18081FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build WORKDIR /src COPY ["AAStore.ProductCatalog.Api/AAStore.ProductCatalog.Api.csproj", "AAStore.ProductCatalog.Api/"] COPY ["AAStore.ProductCatalog/AAStore.ProductCatalog.csproj", "AAStore.ProductCatalog/"] COPY ["AAStore.ProductCatalog.DataContracts/AAStore.ProductCatalog.DataContracts.csproj", "AAStore.ProductCatalog.DataContracts/"] RUN dotnet restore "AAStore.ProductCatalog.Api/AAStore.ProductCatalog.Api.csproj"COPY . . WORKDIR "/src/AAStore.ProductCatalog.Api" RUN dotnet build "AAStore.ProductCatalog.Api.csproj" -c Release -o /app/buildFROM build AS publish RUN dotnet publish "AAStore.ProductCatalog.Api.csproj" -c Release -o /app/publishFROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "AAStore.ProductCatalog.Api.dll"]構建鏡像
docker build -t aastore.productcatalog.api:dev -f F:/codelab/AAStore/AAStore.ProductCatalog.Api/Dockerfile .鏡像構建成功了,可以使用docker image ls查看鏡像
運行容器
docker run --name aastore.productcatalog.api.service.001 --restart=always -d -p 8081:8081 aastore.productcatalog.api:dev最后輸入url:http://localhost:8081/api/product/get,查看部署的是否成功?圖:
參考:
https://docs.docker.com/engine/reference/commandline/image/
https://docs.microsoft.com/zh-cn/visualstudio/containers/container-build?view=vs-2019(Visual?Studio 如何構建容器化應用)
總結
以上是生活随笔為你收集整理的三分钟Docker-镜像、容器实战篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微服务认证架构如何演进来的?
- 下一篇: 深入剖析.NETCORE中CORS(跨站