《Docker:入門與實戰》學習筆記(二):容器

環境

  • 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
2
docker run ubuntu /bin/echo 'Hello world'
Hello world

以下的指令會啟動一個 bash shell,允許使用者和容器進行交互操作。

1
2
docker run -ti ubuntu:latest /bin/bash
root@1f8b5c53600e:/#
  • 參數 -t 讓 Docker 分配一個虛擬終端(pseudo-tty),並綁定到容器的標準輸入上。
  • 參數 -i 讓容器的標準輸入保持開啟。

在容器內使用 ps 指令查看程序,可以看到,只運行了 bash 應用,沒有運行其他不需要的程序。

1
2
3
4
root@f68453f0944e:/# ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
11 pts/0 00:00:00 ps

使用 exit 指令,退出容器。

1
2
root@f68453f0944e:/# exit
exit

背景狀態下執行

使用 docker run 指令,以及 -d 參數,讓容器在後台以背景狀態(Daemonized)的形式執行。

1
2
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
ee7da9a9016fd63ca61a4a2c7d8599ee5188e420f9171154176c120b4bfa7d97

使用 docker logs 指令,取得容器輸出的資訊。

1
2
docker logs ee7
hello world

使用 docker rm 指令,以及 -f 參數,強制刪除一個正在執行的容器。

1
2
docker rm -f ee7
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 指令來匯入一個容器快照到本機映像檔倉庫。這兩者的區別在於,容器快照檔將丟棄所有的歷史紀錄和中繼資料資訊(僅保存容器當時的快照狀態);而映像檔將保存完整紀錄,體積也較大。