鏡像和容器的關系可以看做是 java 中類和實例的關系。鏡像時靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
鏡像使用的是分層存儲,容器也是一樣的。每一個容器運行時是以鏡像為基礎層,在其上創建一個當前容器的存儲層,我們可以稱這個容器運行時讀寫而準備存儲層為容器存儲層。
容器存儲層的生命周期和容器一樣,容器消亡時,容器存儲層也會消失。因此任何保存于容器存儲層的信息都會隨著容器的刪除而丟失。
按照Docker最佳實踐的要求,容器不應該向存儲層內寫任何數據,容器存儲層要保持無狀態化。所有文件的寫入操作都應該使用volume 數據卷、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或者網絡存儲)發生讀寫,其性能和穩定性更高。
數據卷的生命周期獨立于容器,容器消亡,數據卷不會消亡。因此使用數據卷之后,容器刪除或者重新運行之后數據不會丟失。
容器的基本命令
# 查看容器
docker ps -a
docker ps -a -q # 查看所有停止的容器
# 創建容器
docker create -it nginx
# 啟動
docker start nginx
# 創建并啟動
docker run nginx
# 當使用docker run命令創建啟動容器時,Docker在后臺運行的標準操作有下面幾個步驟
# 1、檢測本地是否存在指定的鏡像,不存在就從公有倉庫下載
# 2、利用鏡像創建并啟動一個容器
# 3、分配一個文件系統,并在只讀的鏡像層外面掛載一層可讀寫層
# 4、從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
# 5、從地址池配置一個IP地址給容器
# 6、執行用戶指定的應用程序
# 7、執行完畢后終止容器
# 重啟
docker restart nginx
# 進入容器中 幾種方式
# 1.docker attach 命令、
docker attach nginx
# 2.docker exec 命令、
docker exec -ti nginx /bin/bash
# 3.nsenter工具
# 停止
docker stop nginx
# 移除
docker rm nginx
# -f, --force=false:強項終止并刪除一個運行中的容器。
# -l, --link=false:刪除容器的連接,但保留容器。
# -v, --volumes=false:刪除容器掛載的數據卷。
# 顯示 細節
docker inspect nginx
# 清理所有處于終止狀態的容器
docker container prune
# 啟動一個容器,容器結束運行即刪除
docker run -it --rm nginx
# 導出
docker export nginx
# 導入
docker import nginx
# 查詢幫助
docker container --help
點波關注 系統搭建(docker)