介紹
Docker是一個流行的容器化工具,用於為軟件應用程序提供一個包含它們運行所需的一切的文件系統。使用Docker容器可以確保軟件在部署的地方行為一致,因為其運行時環境是無情一致的。
在本教程中,我們將簡要概述Docker映像和Docker容器之間的關係。然後,我們將更詳細地了解如何運行、啟動、停止和刪除容器。
概述
我們可以將Docker映像想像成一個靜態模板,用於創建Docker容器。映像通常從根文件系統開始,然後按照順序將文件系統更改及其相應的執行參數添加到只讀的層中。與典型的Linux發行版不同,Docker映像通常僅包含運行應用程序所需的基本內容。映像不具有狀態,也不會更改。相反,它們形成了Docker容器的起點。
使用docker run
命令,圖像被帶到生活中,該命令通過在圖像上添加一個讀寫層來創建一個容器。這種由只讀層頂部的讀寫層組合被稱為聯合文件系統。當對運行中的容器中的現有文件進行更改時,該文件會從只讀空間複製到讀寫層中,然後應用更改。讀寫層中的版本隱藏了原始文件,但不會將其刪除。讀寫層中的更改僅存在於個別容器實例中。當刪除容器時,任何更改都將丟失,除非採取措施保存它們。
如何使用Docker容器
使用容器
每次使用docker run
命令时,它都会从您指定的映像创建一个新的容器。这可能会导致混淆,所以让我们通过一些示例来看看:
步骤1:创建两个容器
以下docker run
命令将使用基础ubuntu
映像创建一个新的容器。-t
将为我们提供一个终端,-i
将允许我们与其交互。我们将依赖于Ubuntu基础映像的Docker文件中的默认命令,bash
,将我们放入一个shell中。
命令行提示符更改以指示我们已作为root用户进入容器,后跟12个字符的容器ID。
我们将通过将一些文本回显到容器的/tmp
目录中进行更改,然后使用cat
来验证它是否成功保存。
OutputExample1
现在,让我们退出容器。
Docker容器一旦執行的命令完成,就會停止運行,因此當我們退出bash shell時,我們的容器就停止了。如果我們運行docker ps
,這個命令用於顯示運行中的容器,我們就看不到我們的容器。
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
如果我們添加-a
標誌,它會顯示所有容器,包括停止或運行中的,那麼我們的容器就會出現在列表中:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi
容器創建時會分配一個容器ID和一個隨機生成的名稱。在這個例子中,11cc47339ee1是容器ID,small_sinoussi
是隨機生成的名稱。ps -a
顯示這些值,以及創建容器的映像(ubuntu
)、容器創建時間(六分鐘前
)以及在其中運行的命令(/bin/bash
)。輸出還提供了容器的狀態(Exited
)以及容器進入該狀態的時間(6秒前
)。如果容器仍在運行,我們會看到狀態是“Up”,然後是容器運行了多長時間。
如果我們重新運行相同的命令,將創建一個全新的容器:
我們可以通過命令提示符中的ID不同以及當我們尋找我們的Example1文件時找不到它來確定這是一個新容器:
Outputcat: /tmp/Example1: No such file or directory
這可能會讓人覺得數據消失了,但事實並非如此。現在我們退出第二個容器,看看它和我們創建的帶有文件的第一個容器都還在系統上。
當我們再次列出容器時,兩個都會出現:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg
11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi
步驟2:重新啟動第一個容器
要重新啟動現有的容器,我們將使用start
命令,並使用-a
標誌附加到它,以及使用-i
標誌使其互動,然後是容器的ID或名稱。請確保在下面的命令中替換為您的容器ID:
我們再次回到容器的 bash 提示符,當我們cat
之前創建的文件時,它仍然存在。
OutputExample1
現在我們可以退出容器:
此輸出顯示容器內進行的更改會持久保存,只有在刪除容器時內容才會被刪除。此示例還說明了更改僅限於個別容器。當我們啟動第二個容器時,它反映了映像的原始狀態。
步驟3:刪除兩個容器
我們已經創建了兩個容器,我們將通過刪除它們來結束我們的簡短教程。docker rm
命令僅適用於已停止的容器,它允許您指定一個或多個容器的名稱或ID,因此我們可以使用以下命令刪除兩個容器:
Output11cc47339ee1
kickass_borg
兩個容器以及我們對它們所做的任何更改,現在都不見了。
結論
我們詳細研究了 docker run
命令,看看它每次運行時如何自動創建一個新容器。我們還看到了如何找到停止的容器,啟動它並連接到它。如果您想了解更多關於管理容器的信息,您可能會對指南《命名 Docker 容器:初學者的 3 個提示》感興趣。
Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers