Docker 容器高級操作「Docker 系列-3」

上篇文章向讀者介紹了一個 Nginx 的例子,對於 Nginx 這樣一個容器而言,當它啟動成功後,我們不可避免的需要對 Nginx 進行的配置進行修改,那麼這個修改要如何完成呢?且看下文。

依附容器

docker attach

依附容器這個主要是針對交互型容器而言的,該命令有一定的侷限性,可以作為了解即可,真正工作中使用較少。

要是用 docker attach 命令,首先要確保容器已經啟動,然後使用該命令才能進入到容器中。具體操作步驟如下:

  • 創建一個容器,然後啟動:
Docker 容器高級操作「Docker 系列-3」

  • 不要關閉當前窗口,再打開一個新的終端,執行 docker attach ubuntu :
Docker 容器高級操作「Docker 系列-3」

此時就能進入到容器的命令行進行操作了。

如果容器已經關閉或者容器是一個後臺容器,則該命令就無用武之地了。

由上面的操作大家可以看到,這個命令的侷限性很大,使用場景也不多,因此大家作為一個瞭解即可。

容器內執行命令

如果容器在後臺啟動,則可以使用 docker exec 在容器內執行命令。不同於 docker attach ,使用 docker exec 即使用戶從終端退出,容器也不會停止運行,而使用 docker attach 時,如果用戶從終端退出,則容器會停止運行。

基於這樣的特性, 我們以後在操作容器內部時,基本上都是通過 docker exec 命令來實現。

查看容器信息

容器創建成功後,用戶可以通過 docker inspect 命令查看容器的詳細信息,這些詳細信息包括容器的 id 、容器名、環境變量、運行命令、主機配置、網絡配置以及數據卷配置等信息。

使用 format 參數可以只查看用戶關心的數據,例如:

  • 查看容器運行狀態
Docker 容器高級操作「Docker 系列-3」

  • 查看容器ip地址
Docker 容器高級操作「Docker 系列-3」

  • 查看容器名、容器id
Docker 容器高級操作「Docker 系列-3」

  • 查看容器主機信息

容器的詳細信息,在我們後邊配置容器共享目錄、容器網絡時候非常有用,這個我們到後面再來詳細介紹。

查看容器進程

使用 docker top 命令可以查看容器中正在運行的進程,首先確保容器已經啟動,然後執行 docker top 命令,如下:

Docker 容器高級操作「Docker 系列-3」

查看容器日誌

交互型容器查看日誌很方便,因為日誌就直接在控制檯打印出來了,但是對於後臺型容器,如果要查看日誌,則可以使用docker提供的 docker logs 命令來查看,如下:

Docker 容器高級操作「Docker 系列-3」

如下圖,首先啟動一個不停打日誌的容器,然後利用 docker logs 命令查看日誌,但是默認情況下只能查看到歷史日誌,無法查看實時日誌,使用 -f 參數後,就可以查看實時日誌了。

使用 --tail 參數可以精確控制日誌的輸出行數, -t 參數則可以顯示日誌的輸出時間。

Docker 容器高級操作「Docker 系列-3」

該命令在執行的過程中,首先輸出最近的三行日誌,同時由於添加了 -f 參數,因此,還會有其他日誌持續輸出。同時,因為添加了 -t 參數,時間隨同日誌一起打印出來了。

docker 的一大優勢就是可移植性,容器因此 docker 容器可以隨意的進行導入導出操作。

容器導出

既然是容器,我們當然希望 Docker 也能夠像 VMWare 那樣方便的在不同系統之間拷貝,不過 Docker 並不像 VMWare 導出容器那樣方便(事實上,VMWare 中不存在容器導出操作,直接拷貝安裝目錄即可),在 Docker 中,使用 export 命令可以導出容器,具體操作如下:

  • 創建一個容器,進行基本的配置操作

本案例中我首先創建一個 nginx 容器,然後啟動,啟動成功後,將本地一個 index.html 文件上傳到容器中,修改 nginx 首頁的顯示內容。具體操作步驟如下:

docker run -itd --name nginx -p 80:80 nginxvi ./blog/docker/index.htmldocker cp ./blog/docker/index.html nginx:/usr/share/nginx/html/

首先運行一個名為 nginx 的容器,然後在宿主機中編輯一個 index.html 文件,編輯完成後,將該文件上傳到容器中。然後在瀏覽器中輸入 http://localhost:80 可以看到如下結果:

Docker 容器高級操作「Docker 系列-3」

容器已經修改成功了。

接下來通過 export 命令將容器導出

該命令將容器導入到 docker 目錄下。導出成功之後,我們就可以隨意傳播這個導出文件了,可以發送給其他小夥伴去使用了,相對於 VMWare 中龐大的文件,這個導出文件非常小。一般可能只有幾百兆,當然也看具體情況。

容器導入

其他小夥伴拿到這個文件,通過執行如下命令可以導入容器(如果自己重新導入,需要記得將 docker 中和 nginx 相關的容器和鏡像刪除):

容器導入成功後,就可以使用 docker run 命令運行了。運行成功之後,我們發現自己定製的 index.html 頁面依然存在,說明這是我們自己的那個容器。

[1] 曾金龍,肖新華,劉清.Docker開發實踐[M].北京:人民郵電出版社,2015.


分享到:


相關文章: