摘要:本文承接專題常用管理命令上。按照指示的順序進行即可。將同一的所有,合并為一個新的新建一個,保留舊的那條記錄查看容器的信息命令可以查看容器的端口開啟及綁定容器啟動后執行的。其他命令還有一些如等不是很常用的命令,比較簡單,請參考官網。
本文承接docker專題(2):docker常用管理命令(上)。
1. 開啟/停止/重啟container(start/stop/restart)容器可以通過run新建一個來運行,也可以重新start已經停止的container,但start不能夠再指定容器啟動時運行的指令,因為docker只能有一個前臺進程。
容器stop(或Ctrl+D)時,會在保存當前容器的狀態之后退出,下次start時保有上次關閉時更改。而且每次進入attach進去的界面是一樣的,與第一次run啟動或commit提交的時刻相同。
CONTAINER_ID=$(docker start) docker stop $CONTAINER_ID docker restart $CONTAINER_ID
關于這幾個命令可以通過一個完整的實例使用:docker如何創建一個運行后臺進程的容器并同時提供shell終端。
2. 連接到正在運行中的container(attach)要attach上去的容器必須正在運行,可以同時連接上同一個container來共享屏幕(與screen命令的attach類似)。
官方文檔中說attach后可以通過CTRL-C來detach,但實際上經過我的測試,如果container當前在運行bash,CTRL-C自然是當前行的輸入,沒有退出;如果container當前正在前臺運行進程,如輸出nginx的access.log日志,CTRL-C不僅會導致退出容器,而且還stop了。這不是我們想要的,detach的意思按理應該是脫離容器終端,但容器依然運行。好在attach是可以帶上--sig-proxy=false來確保CTRL-D或CTRL-C不會關閉容器。
# docker attach --sig-proxy=false $CONTAINER_ID3. 查看image或container的底層信息(inspect)
inspect的對象可以是image、運行中的container和停止的container。
查看容器的內部IP # docker inspect --format="{{.NetworkSettings.IPAddress}}" $CONTAINER_ID 172.17.42.354. 刪除一個或多個container、image(rm、rmi)
你可能在使用過程中會build或commit許多鏡像,無用的鏡像需要刪除。但刪除這些鏡像是有一些條件的:
同一個IMAGE ID可能會有多個TAG(可能還在不同的倉庫),首先你要根據這些 image names 來刪除標簽,當刪除最后一個tag的時候就會自動刪除鏡像;
承上,如果要刪除的多個IMAGE NAME在同一個REPOSITORY,可以通過docker rmi
還存在由這個鏡像啟動的container時(即便已經停止),也無法刪除鏡像;
TO-DO
如何查看鏡像與容器的依存關系
刪除容器
docker rm
刪除所有停止的容器 docker rm $(docker ps -a -q)
刪除鏡像
docker rmi
下面是一個完整的示例:
# docker images <== ubuntu 13.10 195eb90b5349 4 months ago 184.6 MB ubuntu saucy 195eb90b5349 4 months ago 184.6 MB seanlook/ubuntu rm_test 195eb90b5349 4 months ago 184.6 MB 使用195eb90b5349啟動、停止一個容器后,刪除這個鏡像 # docker rmi 195eb90b5349 Error response from daemon: Conflict, cannot delete image 195eb90b5349 because it is tagged in multiple repositories, use -f to force 2014/11/04 14:19:00 Error: failed to remove one or more images 刪除seanlook倉庫中的tag <== # docker rmi seanlook/ubuntu:rm_test Untagged: seanlook/ubuntu:rm_test 現在刪除鏡像,還會由于container的存在不能rmi # docker rmi 195eb90b5349 Error response from daemon: Conflict, cannot delete 195eb90b5349 because the container eef3648a6e77 is using it, use -f to force 2014/11/04 14:24:15 Error: failed to remove one or more images 先刪除由這個鏡像啟動的容器 <== # docker rm eef3648a6e77 刪除鏡像 <== # docker rmi 195eb90b5349 Deleted: 195eb90b534950d334188c3627f860fbdf898e224d8a0a11ec54ff453175e081 Deleted: 209ea56fda6dc2fb013e4d1e40cb678b2af91d1b54a71529f7df0bd867adc961 Deleted: 0f4aac48388f5d65a725ccf8e7caada42f136026c566528a5ee9b02467dac90a Deleted: fae16849ebe23b48f2bedcc08aaabd45408c62b531ffd8d3088592043d5e7364 Deleted: f127542f0b6191e99bb015b672f5cf48fa79d974784ac8090b11aeac184eaaff
注意,上面的刪除過程我所舉的例子比較特殊——鏡像被tag在多個倉庫,也有啟動過的容器。按照<==指示的順序進行即可。
5. docker build 使用此配置生成新的imagebuild命令可以從Dockerfile和上下文來創建鏡像:
docker build [OPTIONS] PATH | URL | -
上面的PATH或URL中的文件被稱作上下文,build image的過程會先把這些文件傳送到docker的服務端來進行的。
如果PATH直接就是一個多帶帶的Dockerfile文件則可以不需要上下文;如果URL是一個Git倉庫地址,那么創建image的過程中會自動git clone一份到本機的臨時目錄,它就成為了本次build的上下文。無論指定的PATH是什么,Dockerfile是至關重要的,請參考Dockerfile Reference。
請看下面的例子:
# cat Dockerfile FROM seanlook/nginx:bash_vim EXPOSE 80 ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash # docker build -t seanlook/nginx:bash_vim_Df . Sending build context to Docker daemon 73.45 MB Sending build context to Docker daemon Step 0 : FROM seanlook/nginx:bash_vim ---> aa8516fa0bb7 Step 1 : EXPOSE 80 ---> Using cache ---> fece07e2b515 Step 2 : ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash ---> Running in e08963fd5afb ---> d9bbd13f5066 Removing intermediate container e08963fd5afb Successfully built d9bbd13f5066
上面的PATH為.,所以在當前目錄下的所有文件(不包括.dockerignore中的)將會被tar打包并傳送到docker daemon(一般在本機),從輸出我們可以到Sending build context...,最后有個Removing intermediate container的過程,可以通過--rm=false來保留容器。
TO-DO
docker build github.com/creack/docker-firefox失敗。
tag的作用主要有兩點:一是為鏡像起一個容易理解的名字,二是可以通過docker tag來重新指定鏡像的倉庫,這樣在push時自動提交到倉庫。
將同一IMAGE_ID的所有tag,合并為一個新的 # docker tag 195eb90b5349 seanlook/ubuntu:rm_test 新建一個tag,保留舊的那條記錄 # docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag7. 查看容器的信息container(ps)
docker ps命令可以查看容器的CONTAINER ID、NAME、IMAGE NAME、端口開啟及綁定、容器啟動后執行的COMMNAD。經常通過ps來找到CONTAINER_ID。
docker ps 默認顯示當前正在運行中的container
docker ps -a 查看包括已經停止的所有容器
docker ps -l 顯示最新啟動的一個容器(包括已停止的)
容器運行時不一定有/bin/bash終端來交互執行top命令,查看container中正在運行的進程,況且還不一定有top命令,這是docker top
docker還有一些如login、cp、logs、export、import、load、kill等不是很常用的命令,比較簡單,請參考官網。
參考Official Command Line Reference
docker中文指南cli-widuu翻譯
Docker —— 從入門到實踐
Docker基礎與高級
原文鏈接地址:http://seanlook.com/2014/11/05/docker-command-best-use-2/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26348.html
摘要:在不存在的情況下,命令行下上去的會為我們創建為私有庫,然而通過瀏覽器創建的默認為公共庫。從啟動一個命令首先會從特定的創之上一層可寫的,然后通過命令來啟動它。下文繼續專題常用管理命令下參考中文指南翻譯從入門到實踐基礎與高級原文鏈接地址 本文只記錄docker命令在大部分情境下的使用,如果想了解每一個選項的細節,請參考官方文檔,這里只作為自己以后的備忘記錄下來。 根據自己的理解,總的來說...
摘要:目前只能重新啟動一個容器停止上面的容器可以比較一下與中命令的變化但此時服務是停止的,并沒有在后臺運行,訪問無效。 只看標題還不是很明顯,本文實現docker的這樣一種比較常用的功能:通過docker run啟動一個容器后,容器中已經運行了一個后臺進程(這里以監聽80端口的nginx為例),同時進入一個shell終端可供操作,而不受限于只能在前臺運行nginx與運行shell終端之間的一...
摘要:簡介是微服務治理方案,提供注冊發現存儲健康檢查以及多數據中心部署的能力。重新設計架構如下實施創建個虛擬機寫一個腳本批量創建創建個虛擬機給這個腳本授權,并執行后可以看到虛擬機創建完成。集群中的節點是自動加入網絡的。 consul簡介 consul是微服務治理方案,提供注冊/發現、k/v存儲、健康檢查以及多數據中心部署的能力。 單節點安裝如下: docker pull consul:0.9...
摘要:在配置下上面啟動的配置數據庫名為賬號密碼也為。突出點是,即非阻塞的。四對象修改包里面的城市實體對象類。修改城市對象,代碼如下城市實體類城市編號省份編號城市名稱描述注解標記對應庫表的主鍵或者唯一標識符。 摘要: 原創出處 https://www.bysocket.com 「公眾號:泥瓦匠BYSocket 」歡迎關注和轉載,保留摘要,謝謝! 這是泥瓦匠的第104篇原創 文章工程: JDK...
摘要:導讀要從容器化開始,而容器又需要從開始,本文將介紹如何寫出一個優雅的文件。只要記住以上三點就能寫出不錯的。執行完成項目的構建。 導讀 Kubernetes要從容器化開始,而容器又需要從Dockerfile開始,本文將介紹如何寫出一個優雅的Dockerfile文件。 文章主要內容包括: Docker容器 Dockerfile 使用多階構建 感謝公司提供大量機器資源及時間讓我們可以實踐...
閱讀 4150·2022-09-16 13:49
閱讀 1405·2021-11-22 15:12
閱讀 1525·2021-09-09 09:33
閱讀 1043·2019-08-30 13:15
閱讀 1728·2019-08-29 15:30
閱讀 662·2019-08-27 10:52
閱讀 2647·2019-08-26 17:41
閱讀 1901·2019-08-26 12:11