當你試圖刪除一個你不用的image的時候,有時候會告訴你有個container正在使用這個鏡像,可是docker ps 並無發現相關的container,這個是因爲對container的exit理解不深形成的。python
這裏有兩個不一樣的單詞,images和container。其中images很好理解,跟日常使用的虛擬機的鏡像一個意思,至關於一個模版,而container則是images運行時的的狀態。docker對於運行過的image都保留一個狀態(container),可使用命令docker ps來查看正在運行的container,對於已經退出的container,則可使用docker ps -a來查看。 若是你退出了一個container而忘記保存其中的數據,你可使用docker ps -a來找到對應的運行過的container使用docker commit命令將其保存爲image而後運行。linux
事實上你須要rm掉那個container才能夠進行rmi的操做git
docker ps -a docker rm ${container_id} docker rmi ${iamge_id}
原理仍是將用戶加入docker組 問題解決web
Ctrl+p, Ctrl+qdocker
#不當心exit可是數據沒有保存ubuntu
docker ps -a
檢查全部的關掉的containerbash
docker restart ${old_container_id}
可是問題是,也許你會以爲有些container明明都不用了卻還在那裏礙眼,能夠刪掉全部舊的containerapp
docker rm $(docker ps -a -q) #這個更暴力一點 docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm # 我的更喜歡這個
或者是有些時候你想刪掉中間層的鏡像webapp
有些時候你能夠在run裏頭加這個參數,這樣在退出container的時候就會直接刪掉那個container了rest
--rm=false Automatically remove the container when it exits
commit是commit一個正在運行的container做爲一個新的鏡像 push是把整個repo都推上去,包括全部的tag 和git同樣的
#指定端口
docker run -ti -p 主機端口:容器端口 鏡像 命令 docker ps nostalgic_morse # 用於查看端口映射的狀況
#掛載數據卷 掛載數據卷纔是Best Practice,Docker的本質不但願和主機發生太多的關係,不要太期望在主機上放數據文件 這篇文章 講了這件事情的Best practice,反正就是使用data-only-container就對了
主要是還說了另外的方法的drawback
數據卷說白了就是什麼都不作的卷
docker pull maxexcloo/data
這個鏡像其實很簡單,看一下Dockerfile
FROM busybox:latest MAINTAINER Max Schaefer <max@excloo.com> RUN mkdir /data VOLUME /data
基於buzybox,在我看來buzybox就是linux命令的一個子集
You can also use the VOLUME instruction in a Dockerfile to add one or more new volumes to any container created from that image.
這個 VOLUME關鍵字和 run後面的參數 -v是一個意思,在我看來這個數據是沒有辦法持久化的(2014.12.10)
docker run -ti --name web -v /src/webapp:/opt/webapp training/webapp python app.py
--name="" Assign a name to the container
注意這兩個的區別
-v, --volume=[] Bind mount a volume (e.g., from the host: -v /host:/container, from Docker: -v /container)
這個是指定目錄
--volumes-from=[] Mount volumes from the specified container(s)
這個後面跟container_id或者是--name指定的名字
docker exec container_id command
docker inspect ${CONTAINER_ID}