環境
- macOS
概念
Docker 容器(Container)類似於一個輕量級的沙箱,Docker 利用容器來運行和隔離應用。容器是用映像檔所創造的執行實例(Instance),可以將其建立、開始、停止、刪除,而這些容器都是互相隔離的。
映像檔本身是唯獨的,容器從映像檔啟動的時候,Docker 會在映像檔的最上層建立一個可寫層,映像檔本身將保持不變。
建立容器
使用 docker create
指令,建立一個容器。
1 | docker create -it ubuntu:latest |
使用 docker start
指令,啟動一個容器。
1 | docker start 6d1cb023ad7cebd78c4655dd1a4478b2ecaccd95754d761434cf3f87e8955c8e |
查看容器資訊
使用 docker ps
指令,列出運行中的容器
1 | docker ps -a |
- 參數
-a
列出所有的容器,包括停止的容器。
新建並啟動容器
使用 docker run
指令,將處在停止狀態的容器重新啟動,相當於先執行 docker create
指令,再執行 docker start
指令。
以下的指令會輸出一個「Hello world」,之後容器自動停止。
1 | docker run ubuntu /bin/echo 'Hello world' |
以下的指令會啟動一個 bash shell,允許使用者和容器進行交互操作。
1 | docker run -ti ubuntu:latest /bin/bash |
- 參數
-t
讓 Docker 分配一個虛擬終端(pseudo-tty),並綁定到容器的標準輸入上。 - 參數
-i
讓容器的標準輸入保持開啟。
在容器內使用 ps
指令查看程序,可以看到,只運行了 bash 應用,沒有運行其他不需要的程序。
1 | root@f68453f0944e:/# ps |
使用 exit
指令,退出容器。
1 | root@f68453f0944e:/# exit |
背景狀態下執行
使用 docker run
指令,以及 -d
參數,讓容器在後台以背景狀態(Daemonized)的形式執行。
1 | docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" |
使用 docker logs
指令,取得容器輸出的資訊。
1 | docker logs ee7 |
使用 docker rm
指令,以及 -f
參數,強制刪除一個正在執行的容器。
1 | docker rm -f ee7 |
匯出容器
使用 docker export
指令,導出一個已經建立的容器到一個檔案,無論其是否處於運行狀態。
1 | docker export -o="test.tar" ee7 |
- 使用
docker export
指令,將會遺失資料層的堆疊資訊,無法還原映像檔的資訊;使用docker pull
指令,則會全部重新下載。
匯入容器
使用 docker import
指令,將匯出的容器匯入。
1 | docker import test.tar ubuntu:test |
事實上,既可以使用 docker load
指令來匯入映像檔到本機上,也可以使用 docker import
指令來匯入一個容器快照到本機映像檔倉庫。這兩者的區別在於,容器快照檔將丟棄所有的歷史紀錄和中繼資料資訊(僅保存容器當時的快照狀態);而映像檔將保存完整紀錄,體積也較大。