這是我參與8月更文挑戰的第7天,活動詳情查看:8月更文挑戰mysql
微信公衆號搜索 程序媛小莊 人生苦短一塊兒學Pythonlinux
上一篇文章介紹了鏡像相關命令,有了鏡像天然要運行,本文介紹容器相關命令~web
ps:關於容器操做的命令以tomcat爲例進行操做。sql
docker pull tomcat # 下載tomcat鏡像 複製代碼
docker run 鏡像名:TAG(鏡像id):最簡單的經過鏡像運行容器的方式,容器與容器之間是互相隔離的,此時沒法經過外界訪問到tomcat服務,所以須要在該命令後添加一系列的參數運行。經過docker run --help
能夠查看docker run
命令的選項,很是多哦~docker
-p 宿主機端口:容器內服務監聽端口 :宿主機端口與容器中的端口進行映射,能夠映射多個端口。實如今宿主機上訪問tomcat服務的需求。再次啓動tomcat服務,就能夠在宿主機上訪問tomcat服務了。可是經過該方式能夠啓動N多個tomcat服務,可是須要注意的是宿主機的8080端口已經被佔用,不能再使用宿主機上的8080端口與docker容器進行映射,能夠選擇其餘端口。tomcat
# docker run -p(端口映射參數) 宿主機端口:容器內服務端口 鏡像名稱:TAG
docker run -p 8080:8080 tomcat:latest
docker run -p 8081:8080 tomcat:latest
...
複製代碼
-d:啓動容器進行端口映射而且後臺運行服務。若是隻進行端口映射的話還有問題,若是使用快捷鍵ctrl + c
就會中止容器,-d
選項可讓服務後臺啓動。bash
# docker run -d(後臺運行) -p(端口映射參數) 宿主機端口:容器內服務端口 鏡像名稱:TAG
docker run -d -p 8082:8080 tomcat:latest
複製代碼
--name 惟一的名字:啓動容器,給當前容器指定名稱,端口映射,後臺啓動。在運行容器時爲容器指定名稱,容器名是惟一的。微信
# docker run -d(後臺運行) -p(端口映射參數) 宿主機端口:容器內服務端口 --name(容器名稱參數) 容器名惟一 鏡像名稱:TAG
docker run -d -p 8083:8080 --name tomcat01 tomcat:latest
複製代碼
docker ps:查看當前正在運行的容器。下表顯示結果中每一個「字段」的意思。該命令也有選項。markdown
docker ps -a:查看全部的容器,包括運行的容器和沒有運行的容器。網絡
docker ps -q:查看全部正在運行的容器id。
docker ps -aq:查看全部的容器id。
CONTAINER ID | 容器惟一ID |
---|---|
IMAGE | 基於哪一個鏡像運行產生的容器 |
COMMAND | 容器內執行命令 |
CREATED | 容器建立時間 |
STATUS | 容器當前狀態,up表示正在運行 |
PORTS | 容器內當前服務監聽的端口 |
PORTS | 容器名字,不指定docker會指定一個隨機名稱 |
docker start 容器名或者容器id:開啓容器
docker restart 容器名或者容器id:重啓容器
docker stop 容器名或者容器id:正常中止容器運行
docker kill 容器名或者容器id:當即中止容器運行
docker rm 容器名稱|容器id(可以區分容器便可):刪除一箇中止的容器,若是刪除正在運行的容器會報錯
docker rm -f 容器名稱|容器id:強制刪除容器,能夠是運行的容器
docker rm -f $(docker ps -aq):刪除全部的容器
docker logs 容器名稱|容器id:後臺運行的服務沒法實時查看日誌,所以能夠經過該命令查看日誌,沒有實時展現的效果
docker logs -f 容器名稱|容器id:對日誌進行實時監聽
docker logs -tf 容器名稱|容器id:實時展現日誌的同時加入時間
docker logs --tail N 容器名稱|容器id:N是任意數字,查看容器日誌的最後N行
docker top 容器名稱|容器id:查看容器內的全部進程
docker exec -it 容器名稱|容器id bash :表示以交互模式(-it
)進入容器並與容器內的命令終端進行交互。bash表明容器內的終端,相似於linux系統中的命令行。
exit:退出容器。
docker cp 容器ID|容器名 :容器內的資源路徑 操做系統的路徑:將容器內的文件複製到操做系統。
docker cp tomcat01:/usr/local/RUNING.txt ./RUNING.txt # 複製文件
docker cp tomcat01:/usr/local/webapps ./webapps # 複製目錄
複製代碼
docker cp 操做系統路徑 容器ID|容器名:容器內目標路徑:宿主機上資源複製到容器中。
docker cp a.txt tomcat01:/usr/local/
複製代碼
docker inspect 容器ID|容器名:能夠查看容器內部的信息,好比數據卷掛載、網絡信息、端口信息。
數據卷的核心做用就是能夠實現書主機系統與容器之間的文件共享,具體講能夠實現對宿主機中的某個目錄時能夠直接影響到容器中對應的目錄。要求容器在啓動時綁定數據卷。數據卷有兩種方式。
在啓動容器時,數據卷的參數是-v
,具體命令爲docker run -d -p 8080:8080 --name tomcat01 -v 宿主機目錄:容器內目錄 tomcat:latest
。注意宿主機目錄必須是絕對路徑,使用該種方式若是容器內部的路徑有數據,這些數據會被宿主機上對應的數據覆蓋。
docker run -d -p 8080:8080 --name tomcat01 -v /root/apps:/usr/local/webapps tomcat:latest
# 若是宿主機目錄中沒有任何文件或數據那麼容器內對應的目錄中的數據也會被清空
複製代碼
宿主機的目錄能夠不指定,隨便任意的名稱,該名稱就是數據卷的別名,別名所對應的目錄在宿主機中並不存在,docker就會在宿主機上自動爲aa構建一個路徑,而且該目錄是空的,使用這種方式有一個好處就是,由於宿主機上的目錄是空的,就會將容器中對應的目錄下的文件所有拷貝出來放在宿主機的目錄上。好比:
docker run -d -p 8080:8080 --name tomcat01 -v aa:/usr/local/webapps tomcat:latest
# aa表明數據卷的名字, 名稱是隨便的
# 啓動容器時會將aa對應容器目錄中的所有內容複製到aa對應的宿主機目錄上
# aa對應的目錄尋找方式:find / -name aa
複製代碼
使用自動數據卷的最大好處就是保護數據,在使用自動數據卷目錄啓動容器時會將容器內該目錄的數據所有複製到宿主機的映射目錄中,這樣就算容器掛掉了,可是容器內的數據不會丟失。
docker commit -m "描述信息" -a "做者信息" 被打包的容器ID|名稱 新的鏡像名稱:tag:根據已有的容器打包成鏡像
docker commit -m "my tomcat" -a "author" tomcat01 mytomcat:1.0
複製代碼
docker save 鏡像名稱:TAG -o 文件名:將鏡像進行備份到某個文件中並保存在當前目錄中。
docker save mytomcat:1.0 -o mytomcat:1.0.tar
複製代碼
docker load -i xxx.tar:將打包好的tar文件加載到本地的docker倉庫
docker load -i mysql.tar
複製代碼
文章首發於微信公衆號程序媛小莊,同步於掘金。
碼字不易,轉載請說明出處,走過路過的小夥伴們伸出可愛的小指頭點個贊再走吧(╹▽╹)