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

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 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的鏡像
示例:
clipboard
注意: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應用程序。
在要發佈的項目目錄執行如下命令:(或使用vs工具執行發佈)
dotnet publish -f netcoreapp3.1 -o E:\Code\publish\mk.admin
第二步:創建 Dockerfile 定製鏡像
找 dotnet core 需要的運行時
將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
#、輸入地址,查看站點運行狀態
clipboard
推薦閱讀: