1、docker 安裝
正常安裝docker軟件,運行docker時,會提示:No docker socket 服務
2、啟動docker服務(包含守護進程)
systemctl start docker
#dockerd &if ! ps aux | grep -v grep | grep -q "dockerd"; thenecho "Starting dockerd in background..."nohup dockerd > /dev/null 2>&1 &export DOCKER_DAEMON_STARTED_BY_BASHRC=1 # 標記由本腳本啟動
elseecho "dockerd is already running."
fi
現在可以運行了,但是發現運行在vfs模式,非常占用IO,需要更換成overlay模型
docker info | grep "Storage Driver"
可確認當前存儲驅動是否為 vfs。若輸出為 Storage Driver: vfs,則說明 Docker 未使用 overlay2。
3、容器內需要安裝overlay模組
我的思路是直接apt安裝,發現不行。然后我把宿主機的 /lib/modules/5.4.0-* 復制到容器中。通過這個可查看內核版本$(uname -r)
。
加載模塊
depmod -amodprobe overlaylsmod | grep overlay
4、這個時候還是無法dockerd啟動overlay,還是用fuse-overlayfs
內核態搞不了就換成用戶態的overlay,到https://github.com/containers/fuse-overlayfs
的release頁面下載二進制bin文件。然后復制到容器的/bin目錄
檢查模塊是否加載:
lsmod | grep overlay # 或 modinfo overlayfuse-overlayfs --version
這個時候我這邊啟動dockerd已經ok
最后在容器的 .bashrc 添加腳本,確保每次都能啟動docker服務
systemctl start docker
#dockerd &if ! ps aux | grep -v grep | grep -q "dockerd"; thenecho "Starting dockerd in background..."modprobe overlaylsmod | grep overlaynohup dockerd > /dev/null 2>&1 &export DOCKER_DAEMON_STARTED_BY_BASHRC=1 # 標記由本腳本啟動
elseecho "dockerd is already running."
fi