Alpine Linux是一個輕型Linux發行版,它不同於通常的Linux發行版,Alpine采用了musl libc 和 BusyBox以減少系統的體積和運行時的資源消耗。Alpine Linux提供了自己的包管理工具:apk,我們可以通過https://pkgs.alpinelinux.org/packages 查詢包信息。
Alpine Docker鏡像繼承了Alpine Linux發行版的這些優勢,相比於其他Linux Docker進行,它的體積非常小,docker.io/alpine:3.7只有4.15M,而 CentOS和Ubuntu系列的Docker鏡像則都在200M左右。據說Docker官方也已開始推薦使用Alpine替代之前的Ubuntu來作為基礎鏡像,因為這樣會帶來多個好處,包括鏡像下載速度加快,鏡像安全性提高,占用更少的主機磁盤空間等。
Alpine Docker為了精簡體積,默認是沒有安裝bash的。 需要的話可以查看官方文檔:https://www.cyberciti.biz/faq/alpine-linux-install-bash-using-apk-command/
-----------------------------------------------------------------------------------------------------------------------------
格式為:
VOLUME ["<路徑1>", "<路徑2>"...] VOLUME <路徑>
之前我們說過,容器運行時應該盡量保持容器存儲層不發生寫操作,對於數據庫類需要保存動態數據的應用,其數據庫文件應該保存於卷(volume)中,后面的章節我們會進一步介紹 Docker 卷的概念。
為了防止運行時用戶忘記將動態文件所保存目錄掛載為卷,在 Dockerfile 中,我們可以事先指定某些目錄掛載為匿名卷,這樣在運行時如果用戶不指定掛載,其應用也可以正常運行,不會向容器存儲層寫入大量數據。
VOLUME /data
這里的 /data 目錄就會在運行時自動掛載為匿名卷,任何向 /data 中寫入的信息都不會記錄進容器存儲層,從而保證了容器存儲層的無狀態化。當然,運行時可以覆蓋這個掛載設置。比如:
docker run -d -v mydata:/data xxxx
在這行命令中,就使用了 mydata 這個命名卷掛載到了 /data 這個位置,替代了 Dockerfile 中定義的匿名卷的掛載配置。
使用 dokcer inspect mycontainer 可以查看到具體的掛載情況:
如上圖所示,容器中的"/home/xiaoban/logs/eureka-server/log" 被自動匿名掛載到了本地機器上的 /var/lib/docker/volumes/***