docker 清理無用容器或者鏡像 docker刪除容器和鏡像


8-docker 無法刪除dead狀態的容器docker rm 的時候 , 死活刪除不了容器 , docker kill也不行  , 容器狀態是dead , 重啟docker服務也試過了 , 不行
想到可能是我遷移過docker容器的存儲地址導致的 , 不太確定原因
https://www.cnblogs.com/jie-fang/p/10279426.html
以下為自己實踐過程 , 建議先看完教程再實踐 , 后面有坑:
按照上面一頓操作后 , 發現nginx轉發異常 , 項目無法訪問
趕緊用這個方法: https://www.jianshu.com/p/19cefdedc3fc
cd /var/run
touch nginx.pid
輸入nginx的進程id(master process對應的那個id)
nginx -s reload
發現還是不行 , 繼續執行
nginx -c /etc/nginx/nginx.conf
nginx -s reload
ok , 完成!
docker 清理無用容器或者鏡像
docker rmdocker ps -a | grep Exited | awk '帶跡{print $1}'刪除異常停止的蠢慧并碧返docker容器
docker rmi -fdocker images | grep '<none>' | awk '{print $3}'刪除名稱或標簽為none的鏡像
Docker 占用資源膨脹那么快 , 你知道怎么清理?
如果經常使用 docker , 你會發現 docker 占用的資源膨脹很快 , 其中最明顯也最容易被察覺的應該是對磁盤空間的占用 。本文將介紹如何快速的清理 docker 占用的系統資源 , 具體點說就是刪除那些無用的 鏡像、容器、網絡和數據卷 。
在進行資源清理之前我們有必要搞清楚 docker 都占用了哪些系統的資源 。這需要綜合使用不同的命令來完成 。
docker container ls :默認只列出正在運行的容器 , -a 選項會列出包括停止的所有容器 。
docker image ls :列出鏡像信息 , -a 選項會列出 intermediate 鏡像(就是其它鏡像依賴的層) 。
docker volume ls :列出數據卷 。
docker network ls :列出 network 。
docker info :顯示系統級別的信息 , 比如容器和鏡像的數量等 。
通過這些命令查看 docker 使用的資源情況后 , 相信你已經決定要清理 docker 占用的一些資源了!讓我們先從那些未被使用的資源開始 。
Docker 提供了方便的 docker system prune 命令來刪除那些已停止的容器、dangling 鏡像、未被容器引用的 network 和構建過程中的 cache:
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">$ docker system prune</pre>
安全起見 , 這個命令默認不會刪除那些未被任何容器引用的數據卷 , 如果需要同時刪除這些數據卷 , 你需要顯式的指定 --volumns 參數 。比如你可能想要執行下面的命令:
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">$ docker system prune --all --force --volumns</pre>
這次不僅會刪除數據卷 , 而且連確認的過程都沒有了!注意 , 使用 --all 參數后會刪除所有未被引用的鏡像而不僅僅是 dangling 鏡像 。
這里有必要解釋一下何為 dangling images , 其實可以簡單的理解為未被任何鏡像引用的鏡像 。比如在你重新構建了鏡像后 , 那些之前構建的且不再被引用的鏡像層就變成了 dangling images:
在本地的鏡像更新之后 , 就會出現類似圖中紅框內的 <none> 鏡像 。這表示舊的鏡像已經不再被引用了 , 此時它們就變成了 dangling images 。如果使用 -a 參數 , 你還會發現另外一種類型的 <none> 鏡像 , 它們的 repository 和 tag 列都表現為 <none>:
這些鏡像被稱為 intermediate 鏡像(就是其它鏡像依賴的層) 。
我們還可在不同在子命令下執行 prune , 這樣刪除的就是某類資源:
docker container prune# 刪除所有退出狀態的容器
docker volume prune# 刪除未被使用的數據卷
docker image prune# 刪除 dangling 或所有未被使用的鏡像
這里的 "安裝時的狀態" 指資源占用情況而不是 docker 的相關配置 。這也是一種比較常見的用例 , 比如筆者就需要在一個干凈的 docker 環境中自動化的還原出某天的一個生產環境(使用生產環境的備份數據)用于 bug 調查 。讓我們一起來看看都需要做些什么?
回想我們前面介紹的 docker system prune --all --force --volumns 命令 , 如果在執行這個命令前系統中所有的容器都已停止 , 那么這個命令就會移除所有的資源!好 , 現在讓我們想辦法停掉系統中的所有容器 。
docker container stop 命令可以停止一個或多個容器 , 我們只需要把系統中所有在運行的容器羅列出來就可以了 。由于 docker 并不介意我們再次停止一個已經停止了的容器 , 干脆簡單粗暴點 , 直接列出所有的容器(包括已經停止的)!
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">$ docker container ls -a -q</pre>
-a 顯示所有的容器 , -q 只顯示數字形式的容器 ID 。
然后把這里命令執行的結果作為 docker container stop 命令的參數:
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">(docker container ls -a -q)</pre>
完整的恢復 docker 環境的命令如下:
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">(docker container ls -a -q) && docker system prune --all --force --volumns</pre>
和前面的 prune 命令類似 , 也可以完全刪除某一類資源:
刪除容器 :docker container rm(docker image ls -a -q)
刪除數據卷 :docker volume rm(docker network ls -q)
上面的命令可以完成任務但是卻很繁瑣 , 我們可以通過 shell 的別名功能來簡化這些命令的執行 。
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">alias docker-clean-unused='docker system prune --all --force --volumes' alias docker-clean-all='docker stop $(docker container ls -a -q) && docker system prune --all --force --volumes'</pre>
把上面的命令寫入到用戶的 ~/.bashrc 文件中就可以了!
執行一次清理任務:
經常清理系統資源不僅能夠讓系統運行的更流暢 , 也利于我們把精力集中在相關的重點資源上面 。所以建議大家能夠使用相關的資源清理命令 , 讓 docker 保持清爽和高效 。
參考:
Clean out your Docker images, containers and volumes with single commands
Python 零基礎入門課程
此課程為面授班和網絡班 , 一共 15 個課時 , 每周上一個全天 , 歷時4個月 。附加:錄播視頻+筆記+答疑2019-6月份開課
Python 自動化運維進階課程
此課程為面授班和網絡班 , 一共 15 個課時 , 每周上一個全天 , 歷時4個月 。附加:錄播視頻+筆記+答疑2019-4月份開課
Docker+K8s 課程
此課程為網絡班 , 一共 150個課時 , 每周上一個全天 , 歷時4個月 。附加:錄播視頻+筆記+答疑現已開課
現在報名即可享受早鳥價
golang 課程
早報名可享受早鳥價
想要詳細了解和報名的同學可以掃碼添加好友私聊

docker的容器常規操作解釋:創建一個容器 , 但容器處于停止狀態
解釋:啟動容器
解釋:
-t : 讓Docker分配一個偽終端并綁定到容器的標準輸入上
-i: 讓容器的標準輸入保持打開
-d: 讓Docker容器在后臺以守護態運行
解釋:
-details:打印詳細信息
-f,-follow:保持持續輸出
-since string:輸出從某個時間開始的日志
-tail string:輸出最近的若干日志
-t,-timestamps:輸出時間戳信息
-until string:輸出某個時間之前的日志
解釋:暫停容器 , 暫停后 , 容器處于paused狀態
解釋:將paused狀態的容器恢復至運行狀態
解釋: 終止一個運行狀態的容器 , 但是這個終止不是立即執行的 。該命令會先向容器發送一個SIGTERM信號 , 等待一段超時時間(默認為10s)后,再發送SIGKILL信號終止容器 , 而終止容器的關鍵就在于SIGKILL信號 。
解釋: 終止一個運行狀態的容器 , 但是這個終止是立即執行的 。該命令直接發送SIGKILL信號強行終止容器 。
解釋: 重啟容器
解釋:進入容器 。使用這個命令有時候并不方便 , 當多個窗口同時attach到同一個容器的時候 , 所有窗口都會同步顯示;當某個窗口因命令阻塞時 , 其他窗口也無法執行操作;默認使用CTRL+q或者CTRL+p退出容器
解釋:
-d,--detach:在容器中后臺執行命令
--detach-keys="":指定將容器切回后臺的案件
-e,--env=[]:指定環境變量列表
-i,--interactive=true|false:打開標準輸入接收用戶輸入命令 , 默認值為false
--privileged=true|false:是否給執行命令以高權限 , 默認值為false
-t,--try=true|false:分配偽終端 , 默認值為false
-u , --user="":執行命令的用戶名或ID
解釋:
刪除處于退出或者終止狀態的容器
-f,--force=false:是否強行終止并刪除一個處于運行狀態的容器
-l,--link=false:刪除容器的鏈接 , 但保留容器
-v,--volumns=false:刪除容器掛載的數據卷
解釋:導出容器 。導出一個已經創建的容器到文件 , 不管此時這個容器是否處于運行狀態 。在這里如果把export換成save , 再把af18換成鏡像名稱:tag , 就是導出鏡像的命令了 。但是這兩個命令的區別在于:docker export命令丟棄了原容器的歷史信息及元數據,而docker save命令會保留原文件的歷史信息 。
解釋:將導出的文件變成鏡像 。當然 , 這個也可以用docker load命令來執行 。
解釋:查看容器具體信息 , 比如:容器ID,創建時間 , 路徑 , 狀態 , 鏡像 , 配置等
解釋: 查看容器內進程信息
解釋:查看容器的內存、CPU、存儲、網絡等使用情況
-a,-all:輸出所有容器統計信息
-format string: 格式化輸出信息
-no-stream:不持續輸出 , 默認會自動更新持續實時結果
-no-trunc:不截斷輸出信息
解釋:第一行命令為將test容器的temp文件夾復制到主機的data文件夾下
第二行的命令為將主機的data文件夾復制到test容器的tmp文件夾下
解釋:查看容器內的數據修改
解釋:查看test容器的端口映射情況
解釋:修改容器的一些運行時配置 。主要是一些資源限制配額 。
docker刪除鏡像的命令
docker刪除鏡像的命令是docker rmi 。
如果要刪除本地的鏡像 , 可以使用docker rmi(注意rm為刪除容器 , 而rmi為刪除鏡像 , 其中i代表image)命令 , 它的具體語法如下:docker rmi [OPTIONS] IMAGE [IMAGE…] 。
其中:docker rmi:Docker刪除鏡像的命令關鍵詞;OPTIIONS:命令選項 , -f強制刪除鏡像;IMAGE:需要刪除的鏡像 。灶數碼這里的鏡像可以用“鏡像短ID”、“鏡像長ID”、“鏡像名”、畢羨“鏡像的digest”來標識 。
使用docker images--digests查看鏡像的具體信息 , 包括鏡像的digest 。
Docker
Docker是一個開源的應用容器引隱哪擎 , 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中 , 然后發布到任何流行的Linux機器上 , 也可以實現虛擬化 , 容器是完全使用沙箱機制 , 相互之間不會有任何接口 。
Docker是PaaS提供商dotCloud開源的一個基于LXC的高級容器引擎 , 源代碼托管在Github上 , 基于go語言并遵從Apache2.0協議開源 。

docker 使用運行容器
sudo docker run -it -v /home/lcj/test_docker:/home/lcj/test_docker tensorflow/tensorflow:1.13.1-gpu-py3
參數:
-d 后臺運行并返回容器ID , 如 -itd
-e 設置環境變量 , 如 -e NVIDIA_VISIBLE_DEVICE=0 使用編號為 0 的GPU
-i 打開 STDIN , 用于控制臺交互 , 通常跟 -t 一起使用
--net 容器網絡設置 , 如 --net my_network , 或者 --net=contianer:NAME_or_ID , 使用其他容器的網絡 , 共享 IP 和 PORT 等資源
--restart 指定容器停止后的啟動的策略 , 如 --restart=always
--runtime=nvidia 使用 nvidia 模式運行 , 跟 -e 一起使用 , 可以在容器里使用 GPU
-t 為容器重新分配一個偽輸入終端 , 通常與 -i 一起使用
-v 給容器掛載存儲卷 , 掛載到容器的某個目錄 , 如 -v /home/lcj/test_docker:/home/lcj/test_docker
-w 指定容器的工作目錄
停止容器
docker stop 容器ID
或者 docker stop `docker ps -a -q` 停止所有容器
重啟容器
docker restart 容器ID
進入一個運行中的容器
docker attach 容器ID
保存容器
docker save myimage | bzip2 -9 -c > /home/lcj/save.tar.bz2
加載容器
bzip2 -d -c < /home/lcj/save.tar.bz2 | docker load
殺掉運行中的容器
docker kill -s KILL 容器ID
-s:向容器中發送一個信號
docker rm 命令
參數:
-f :通過 SIGKILL 強制刪除一個容器 , 如 docker rm -f a
-l:移除容器間的網絡連接 , 而非容器本身 , 如 docker rm -l b , 其中 b 為連接名 , 而非容器名
-v:刪除與容器關聯的卷
docker create :創建一個容器但不運行它 , 語法同 docker run
docker ps
-a:顯示所有的容器 , 包括未運行的
-f:根據條件過濾顯示的內容
-l:顯示最近創建的容器
-n:列出最近創建的 n 個容器
-q:靜默模式 , 只顯示容器 ID
列出所有創建的容器 ID
docker ps -a -q
停止所有容器 ID
docker stop`docker ps -a -q`
獲取容器/鏡像的元數據
docker inspect 容器/鏡像名
docker top :查看容器中的進程信息
docker top a(a 是容器)
docker attach :鏈接到正在運行的容器(該容器必須正在運行)
docker attach a (a 是容器)
docker events :從服務器獲取實時事件
-f:根據條件過濾事件
--since:從指定的時間戳后顯示所有的事件
--until:流水時間顯示到指定的時間為止
顯示docker 2016年7月1日后的所有事件
docker events -since="1467302400"
顯示docker 鏡像為mysql:5.6 2016年7月1日后的相關事件
docker events -f "image"="mysql:5.6" --since="1467302400"
備注:如果指定的時間是到秒級的 , 需要將時間轉成時間戳 。如果時間為日期的話 , 可以直接使用 , 如--since="2016-07-01"
docker export :將文件系統作為一個 tar 壓縮文件導出到 STDOUT
docker port :列出指定的容器端口的映射 , 或者查找將 PRIVATE_PORT NAT 到面向公眾的端口
docker port a(a 為容器名)
docker commit: 從容器創建一個新的鏡像
-a:提交的鏡像作者
-c:使用 Dockerfile 文件來創建鏡像
-m:提交時說明的文字
-p:在 commit 時暫停容器
docker commit -a 'lcj' -m 'has update' 容器 ID 鏡像名
docker cp :用于容器與主機之間的數據拷貝
將主機的 test_docker 目錄拷貝到容器 /home/lcj 目錄下
docker cp /home/lcj/test_docker 容器 ID:/home/lcj/
將容器 /home/lcj 目錄拷貝到主機的 test_docker 目錄下
docker cp 容器 ID:/home/lcj/ /home/lcj/test_docker
docker login/logout :登錄或退出一個 Docker 鏡像倉庫 , 如果未指定鏡像倉庫地址 , 則默認為 官方 Docker Hub
docker login -u 用戶名 -p 密碼
docker logout
docker pull :從鏡像倉庫中拉取或者更新指定鏡像
docker pull java
docker push:將本地的鏡像上傳到鏡像倉庫 , 需先登錄到鏡像倉庫
docker push myapache:v1
docker search :從 Docker Hub 查找鏡像
--automated , 只列出 automated build(自動生成) 類型的鏡像
--no-trunc , 顯示完整的鏡像描述
-s:列出收藏數不少于指定值的鏡像
從Docker Hub查找所有鏡像名包含java , 并且收藏數大于10的鏡像
docker search -s 10 java
docker images :列出本地所有的鏡像
-a:列出本地所有的鏡像(含中間映像層 , 默認情況下 , 過濾中間映像層)
-q:只顯示鏡像 ID
docker images 或 docker images ubuntu , 列出本地所有鏡像或本地倉庫名為 ubuntu 的所有的鏡像
dockerrmi :刪除一個或多個鏡像
-f:強制移除
--no_prune:不移除該鏡像的過程鏡像 , 默認移除
強制刪除本地鏡像w3cschool/ubuntu:v4
docker rmi -f w3cschool/ubuntu:v4
docker tag :標記本地鏡像 , 將其歸入到某一個倉庫
將鏡像ubuntu:15.10標記為 w3cschool/ubuntu:v3 鏡像
docker tag ubuntu:15.10 w3cschool/ubuntu:v3
docker build:使用 Dockerfile 文件創建鏡像
使用當前目錄的Dockerfile創建鏡像
docker build -t w3cscholl/ubuntu:v3 . (不要漏掉最后的.符號)
使用URLgithub.com/creack/docker-firefox的 Dockerfile 創建鏡像
docker build github.com/creack/docker-firefox
docker history :查看指定鏡像的創建歷史
docker save :將指定鏡像保存成 tar 壓縮文件
-o:輸出到文件
docker save -o my_ubuntu_v3.tar w3cschool/ubuntu:v3
docker import:從壓縮文件中創建鏡像
-c:應用 docker 指令創建鏡像
-m:提交時的說明文字
從鏡像歸檔文件my_ubuntu_v3.tar創建鏡像 , 命名為w3cschool/ubuntu:v4
docker import my_buntu_v3.tar w3cschool/ubuntu:v4
【docker 清理無用容器或者鏡像 docker刪除容器和鏡像】關于docker刪除容器和docker刪除容器和鏡像的內容就分享到這兒!更多實用知識經驗 , 盡在 m.apearl.cn