docker 6 section
啟動容器有兩種方式,一種是基於鏡像新建一個容器並啟動,另外一個是將在終止狀態( stopped )的容器重新啟動。
新建並啟動
命令:docker run
例如,下面的命令輸出一個 “Hello World”,之後終止容器。
$ docker run centos:7 /bin/echo ‘Hello world‘
Hello world
啟動一個 bash 終端,允許用戶進行交互。
$ docker run -it centos:7 /bin/bash
[email protected]:/#
其中, -t 選項讓Docker分配一個偽終端(pseudo-tty)並綁定到容器的標準輸入上, -i 則讓容器的標準輸入保持打開。
當利用 docker run 來創建容器時,Docker 在後臺運行的標準操作包括:
- 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
- 利用鏡像創建並啟動一個容器
- 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
- 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
- 從地址池配置一個 ip 地址給容器
- 執行用戶指定的應用程序
- 執行完畢後容器被終止
啟動已終止容器
可以利用 docker container start 命令,直接將一個已經終止的容器啟動運行。
終止容器
可以使用 docker container stop 來終止一個運行中的容器。
若只啟動了一個終端的容器,用戶通過 exit 命令或 Ctrl+d 來退出終端時,所創建的容器立刻終止。
終止狀態的容器可以用 docker container ls -a 命令看到。
此外, docker container restart 命令會將一個運行態的容器終止,然後再重新啟動它。
後臺運行(持久化)
更多的時候,需要讓 Docker 在後臺運行而不是直接把執行命令的結果輸出在當前宿主機下,此時,可以通過添加 -d 參數來實現。
註: 容器是否會長久運行,是和 docker run 指定的命令有關,和 -d 參數無關。
使用 -d 參數啟動後會返回一個唯一的 id,也可以通過 docker container ls 命令來查看容器信息。
進入容器
在使用 -d 參數時,容器啟動後會進入後臺。
某些時候需要進入容器進行操作,包括使用 docker attach 命令或 docker exec 命令,推薦使用 docker exec 命令。
attach 命令
docker attach 是 Docker 自帶的命令。下面示例如何使用該命令。
$ docker attach 243c32535da7
[email protected]:/#
註意: 如果從這個 stdin 中 exit,會導致容器的停止。
exec 命令
docker exec 後邊可以跟多個參數,這裏主要說明 -i -t 參數。
只用 -i 參數時,由於沒有分配偽終端,界面沒有我們熟悉的 Linux 命令提示符,但命令執行結果仍然可以返回。
當 -i -t 參數一起使用時,則可以看到我們熟悉的 Linux 命令提示符。
註意:如果從這個 stdin 中 exit,不會導致容器的停止。
導出和導入容器
導出容器
如果要導出本地某個容器,可以使用 docker export 命令。
$ docker export 7691a814370e > ubuntu.tar
這樣將導出容器快照到本地文件。
導入容器快照
可以使用 docker import 從容器快照文件中再導入為鏡像,例如$ cat ubuntu.tar | docker import - test/ubuntu:v1.0
此外,也可以通過指定 URL 或者某個目錄來導入,例如$ docker import http://example.com/exampleimage.tgz example/imagerepo
註:用戶既可以使用 docker load 來導入鏡像存儲文件到本地鏡像庫,也可以使用 docker import 來導入一個容器快照到本地鏡像庫。這兩者的區別在於容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時可以重新指定標簽等元數據信息。
刪除容器
可以使用 docker container rm 來刪除一個處於終止狀態的容器。例如
$ docker container rm trusting_newton
trusting_newton
如果要刪除一個運行中的容器,可以添加 -f 參數。Docker 會發送 SIGKILL 信號給容器。
清理所有處於終止狀態的容器
用 docker container ls -a 命令可以查看所有已經創建的包括終止狀態的容器,如果數量太多要一個個刪除可能會很麻煩,用下面的命令可以清理掉所有處於終止狀態的容器。$ docker container prune
docker 6 section