Docker之操作docker容器篇
Docker之操作docker容器篇
1. 創建容器
Docker實在是太輕量級了,我們可以隨時進行刪除或者創建
我們可以使用docker create命令新建一個容器
通過上圖中的命令就對docker的該容器進行了創建
註:此處的CONTAINER ID為唯一的
附create 命令與容器運行模式相關的選項
create 命令與容器環境和配置相關的選項
create 命令與容器資源限制和安全保護相關的選項
2.啟動容器
Docker中創建的容器默認狀態下是停止的,我們可以通過docker start 進行啟動
此時我們可以使用dockers ps 列出相關容器
3.新建並啟動容器
除了通過創建容器后通過start來啟動,也可以直接新建並啟動容器,這裡主要用到的docker run 命令 這裡等價於docker create 和 docker start命令的
Advertisements
當利用docker run來創建和啟動容器時,docker在後台的操作為
1. 檢查本地倉庫,有則使用沒有從公共倉庫下載
2. 利用鏡像創建容器,並啟動該容器
3. 分配一個文件系統給容器,並在鏡像層外面掛載一層可讀層
4. 從宿主主機的網橋連接中橋接一個虛擬介面到容器
5. 從網橋的地址池中配置一個ip給容器
6. 執行用戶指定的應用
7. 執行完成後終止
我們來啟動bash嘗試下
-t 參數是讓docker分配一個偽終端綁定到容器的輸入上
-I 參數是讓容器的的輸入始終打開
可以看到該linux中只啟動了bash進程
我們可以通過ctrl +d 或者exit退出
這裡我們要注意的是用戶退出后該容器就會自動關閉
Advertisements
4.後台運行
我們大多數時候是需要容器在後台運行的也就是守護態運行,這時候我們可以使用
-d參數來實現
執行此命令后,後台就會根據這個腳本去執行相關命令
5.終止容器
終止容器我們可以使用docker stop 來終止一個正在運行的容器
首先向容器發送SIGTEAM信號,等待一段超時時間就會再發送SIGKILL信號來終止容器
6.進入容器
前面的-d參數執行後會自動進入容器去執行,但是這對我們是不可見的,所以我們可以通過其他工具進入容器
方式:官方的attach或者exec命令,以及第三方的nsenter
Attach命令
退出該容器的方法為快捷鍵ctrl p ctrl q
Attach命令有一個問題就是多個窗口同時操作時,多個窗口會同步顯示,當某個窗口阻塞時,其他都無法操作
Exec命令
Exec命令是docker 1.3提供的一個新功能,可以在容器內直接執行任何操作
$ docker exec -it 243c32535da7 /bin/bash
root@243c32535da7:/#
可以看到,一個 bash 終端打開了,在不影響容器內其他應用的前提下,用戶可以很容 易與容器進行交互。 注意通過指定 -it參數來保持標準輸入打開,並且分配一個偽終端。通過 exec 命令對 容器執行操作是最為推薦的方式。
7.刪除容器
可以使用 docker rm 命令來刪除處於終止或退出狀態的容器,命令格式為 docker rm [-f|--force][-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]。 主要支持的選項包括: -f, --force=false:是否強行終止並刪除一個運行中的容器; -l,--link=false:刪除容器的連接,但保留容器; -v, --volumes=false:刪除容器掛載的的數據卷。例如,查看處於終止狀態的容器,並刪除。
8. 導入和導出容器
某些時候,需要將容器從一個系統遷移到另外一個系統,此時可以使用 Docker 的導入 和導出功能。這也是 Docker自身提供的一個重要特性。
導出容器,是指導出一個已經創建的容器到一個文件,不管此時這個容器是否處於運行 狀態,可以使用docker export命令,該命令格式為
docker export [-o|--output[=""]] CONTAINER。
其中,可以通過 -o 選項來指定導出的 tar 文件名,也可以直接通過重定向來實現。 首先,查看所有的容器,如下所示
此處我們將ae90cd7e0a02導出
之後,可將導出的 tar 文件傳輸到其他機器上,然後再通過導入命令導入到系統中, 實現容器的遷移
導入容器:
導出的文件又可以使用 docker import 命令導入變成鏡像,該命令格式為 docker import[-c|--change[=[]]] [-m|--message[=MESSAGE]]file|URL|-[REPOSITORY[:TAG]]
用戶可以通過-c, --change=[]選項在導入的同時執行對容器進行修改的 Dockerfile 指令
之前鏡像章節中筆者曾介紹過使用 docker load 命令來導入一個鏡像文件,與 docker import 命令十分類似。實際上,既可以使用 docker load 命令來導入鏡像存儲文件到本地鏡像庫,也可以使用 docker import命令來導入一個容器快照到本地鏡像庫。
這兩者的區別在於容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導 入時可以重新指定標籤等元數據信息