1. 程式人生 > >Docker 常用命令(.NET Core示例)

Docker 常用命令(.NET Core示例)

       本篇文章,整理docker中常用的命令,方便大家學習和命令查詢。最後分享一個.NET Core docker部署的示例。

Docker安裝 CentOS Docker 安裝 安裝 Docker Desktop for Mac、Docker Desktop for Windows 設定docker倉庫映象加速器 遷移Docker預設儲存目錄
Docker執行基本命令 docker [--helper]:顯示所有docker命令 docker [command] --help:顯示指定命令的幫助文件 docker info:顯示docker系統資訊 docker version:顯示docker版本資訊 docker stats:顯示執行的容器佔用的容器資源(eg:容器名、cpu、記憶體、io等)(Ctrl+C退出) systemctl status docker:顯示docker的執行狀態 systemctl start docker:啟動docker systemctl stop docker:關閉docker systemctl restart docker:重啟docker

Docker倉庫 Docker Hub docker login -u 使用者名稱 -p 密碼 [倉庫地址]:登陸到一個Docker映象倉庫,如果未指定映象倉庫地址,預設為官方倉庫 Docker Hub docker logout:推出倉庫 docker search [image id or name]:從Docker Hub查詢映象 docker pull [image id or name]:拉取映象 docker tag [local image id or name]:[tag] [registry host]/[映象倉庫]/[image name][:tag]: 標記本地映象,將其歸入某一倉庫。 docker push [image id or name]:推送映象到Docker Hub
#、示例:推送到阿里雲images倉庫 sudo docker login --username=*** registry.cn-shenzhen.aliyuncs.com sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/mk-application/mk.admin:[映象版本號] sudo docker push registry.cn-shenzhen.aliyuncs.com/mk-application/mk.admin:[映象版本號] (registry.cn-shenzhen.aliyuncs.com/mk-application/mk.admin 為images倉庫地址)
images 操作 docker tag [image id] REPOSITORY:TAG(倉庫:標籤):重新命名映象名 docker images [options]:顯示所有映象檔案 常用OPTIONS說明: -a :列出本地所有的映象 -f :顯示滿足條件的映象; -q :只顯示映象ID docker image inspect : 獲取映象的元資料。 docker build [options] [image id or name] .:構建一個映象。 (注意:最後空格後面有一個.)。 常用OPTIONS說明: --tag, -t: 映象的名字及標籤,通常 name:tag 或者 name 格式; -f :指定要使用的Dockerfile路徑;(預設當前目錄的Dockerfile) -m :設定記憶體最大值; docker rmi [-f] [image id or name]:刪除指定映象(-f :強制刪除) docker rmi $(docker images -q):刪除所有映象 docker commit [container id or name] [image id or name[:tag]]:從容器建立一個新的映象。 docker images | grep "redis" :查詢所有包含redis的映象
示例:
注意:REPOSITORY 列,表示:映象名稱,用於標識映象
#、映象歸檔 將指定映象儲存成 tar 歸檔檔案 docker save -o /root/**.tar [image id or name]: docker save [image id or name]>/root/**.tar 匯入使用 docker save 命令匯出的映象 docker load -i /root/**.tar docker load</root/**.tar 從歸檔檔案中建立映象 docker import /root/**.tar [image id or name]:從映象歸檔檔案建立指定命名的映象

container 操作 docker ps:檢視當前執行的容器 docker ps [OPTIONS] 常用OPTIONS說明: -a:顯示所有的容器 --filter,-f:根據條件過濾顯示的內容(eg:-f name=imc.user,過濾容器名字為"imc.user") -n:列出最近建立的n個容器 docker container inspect : 獲取容器的元資料。 docker rename [container id or name] [new Name]:重新命名容器名 docker run [OPTIONS] [image id or name]:建立一個新的容器並執行 常用OPTIONS說明: -d: 後臺執行容器,並返回容器ID; -p(小寫): 指定埠對映,格式為:主機(宿主)埠:容器埠 -name: 為容器指定一個名稱; -m :設定容器使用記憶體最大值; --volume , -v: 繫結一個卷 --restart=always:總是重啟容器。(Docker容器的重啟策略及docker run的--restart選項詳解) docker update [options] [container id or name]:更新容器配置 常用options說明 -m:記憶體限制 --restart=no|always|on-failure:重啟策略 docker stop [container id or name]:停止執行指定容器 docker stop $(docker ps -q -f status=running):停掉所有正在執行的容器 docker start [container id or name]:開啟指定容器 docker restart [container id or name]:重啟指定容器 docker rm [-f] [container id or name]:刪除指定容器,加-f引數強制刪除 docker rm $(docker ps -a -q):刪除所有停止的容器
#、檢視容器內部資訊 docker exec -it [container id or name] bash:在執行的容器中執行bash命令,比如執行ls命令列出目錄或者檢視檔案。(退出容器:Ctrl + D 或 exit) docker top [options] [container id or name]:檢視容器中執行的程序資訊,支援 ps 命令引數。(能否用exec命令代替?不能,因為容器執行時不一定有/bin/bash終端來互動執行top命令,而且容器還不一定有top命令) docker pause [container id or name]:暫停容器中所有的程序 docker unpause [container id or name]:恢復容器中所有的程序 docker diff [container id or name]:檢查容器裡檔案結構的更改。(相對原始映象的檔案結構)
#、檢視容器執行日誌 docker啟動後預設日誌位置:/var/lib/docker/containers/容器ID/容器ID-json.log docker logs [options] [container id or name]:檢視指定容器Id的的執行日誌 OPTIONS說明: -f : 跟蹤日誌輸出 --since :顯示某個開始時間的所有日誌 -t : 顯示時間戳 --tail :僅列出最新N條容器日誌 示例: 檢視容器mynginx從2016年7月1日後的最新10條日誌。 docker logs --since="2016-07-01" --tail=10 mynginx
#、容器與主機之間的資料拷貝 docker cp:用於容器與主機之間的資料拷貝。 docker cp [container id or name]:src_path dest_path docker cp src_path [container id or name]:dest_path
volume(資料卷) Docker Image可以理解成多個只讀檔案疊加而成,因此Docker Image是隻讀的。當我們將其執行起來,就相當於在只讀的Image外包裹了一層讀寫層變成了容器。當你刪除容器之後,使用這個映象重新建立一個容器,此時的映象的只讀層還和原來的一樣,但是你在讀寫層的修改全部都會丟失。 docker使用volume實現資料的持久化,實現容器和容器之間,容器和host之間共享資料。volume的大小不會被加到容器本身上。
命令 docker volume create --name [volume name]:建立命名的volume,建立目錄預設:/var/lib/docker/volumes/[volume name]/_data/ docker volume ls:檢視當前所有volume docker volume inspect [volume name]:檢視volume詳細資訊 docker volume rm [volume name]:刪除volume(沒有被容器使用的volume才能被刪除)
docker run .... -v 宿主目錄\檔案:容器目錄\檔案 :建立目錄或檔案的對映 docker run .... -v [volume name]:容器目錄 docker run .... -v 容器目錄 :[自管理卷模式]docker自動建立匿名的volume。預設目錄/var/lib/docker/volumes/[container id]/_data。(自管理卷的volume刪除方式:刪除容器時,加 -v) -v 引數的注意事項: #、host機器的目錄路徑必須為全路徑(準確的說需要以/或~/開始的路徑) #、如果host機器上的目錄不存在,docker會自動建立該目錄 #、如果container中的目錄不存在,docker會自動建立該目錄 #、如果container中的目錄已經有內容,那麼docker會使用host上的目錄將其覆蓋掉 #、linux下 $PWD 是一個系統環境變數,指代當前目錄環境 #、windows下的路徑如:D:\PycharmProjects 要寫為 /d/PycharmProjects (試試原始目錄行不信)

示例:docker執行一個 .Net Core 程式 目錄規劃: ------container // 容器根目錄 --------mk.admin // 容器名 ----------Logs // 用於對映日誌的目錄 ----------Config // 用於對映配置的目錄
.NET Core埠設定 host.json檔案

{
   "urls": "http://*:44380"
}


第一步:釋出.net core應用程式。 在要釋出的專案目錄執行如下命令:(或使用vs工具執行釋出) dotnet publish -f netcoreapp3.1 -o E:\Code\publish\mk.admin
第二步:建立 Dockerfile 定製映象 找 dotnet core 需要的執行時:docker image:ASP.NET Core Runtime  將Dockerfile放在釋出目錄下(E:\Code\publish\mk.admin) 內容:
#第一個指令,FROM 指定基礎構建映象
#基於 `microsoft/aspnet:3.1` 來構建我們的映象
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

#拷貝專案publish資料夾中的所有檔案到 docker容器中的publish資料夾中  
COPY . /publish

#設定工作目錄為 `/publish` 資料夾,即容器啟動預設的資料夾
WORKDIR /publish

EXPOSE 44380

#使用`dotnet ***.dll`來執行應用程式
ENTRYPOINT ["dotnet", "Mk.Admin.HttpApi.Host.dll"]

第三步:建立映象 在E:\Code\publish\mk.admin目錄下,執行命令:
#、構建映象
docker build -t img.mk.admin .
#、執行容器
docker run --name mk.admin -p 44380:44380 -v /usr/application/Mk.Admin/Logs:/publish/Logs -d --restart=always img.mk.admin
(資料卷:將宿主機的/usr/application/Mk.Admin/Logs目錄對映到容器的/publish/Logs目錄,這樣就可以在宿主機上檢視和刪除日誌檔案)
#、檢視執行中的容器
docker ps
#、輸入地址,檢視站點執行狀態

推薦閱讀: Docker 資源彙總 Docker 容器連線 docker volume Docker Dockerfile Docker Compose