Docker volume
常用技巧
我們可以使用 docker compose 來同時啟動多個 container,這時需要撰寫 docker-compose.yml 檔案。 有時後也會需要個別執行 docker compose 如下圖,例如:在同一個資料夾有兩個 docker-compose 檔案運行在相同 networks,可以看見項目名稱 docker-nginx,運行 2 個 container。若要停止 docker compose,我們無法用 docker compose down 停止,必須指定 project-name,才能正確停止。
常用指令
docker volume ls
docker volume create --name db-data
Docker Compose volumes 解析、Docker Compose volumes 目錄路徑生成規則
[SOURCE:]TARGET[:MODE]
SOURCE: 可以是主機系統上的命名volume或(相對或絕對)路徑。 TARGET:是容器中的絕對路徑。 MODE:是一個掛載選項,可以是只讀或讀寫。這個參數是可選的。ro(readonly 只讀) 或 rw(默認:readwrite 可讀可寫) 改變讀寫權限。
ersion: "3.9"
services:
database:
# ...
volumes: # Nested key. Configures volumes for a particular service.【嵌套的key。為特定服務配置volume】
volumes: # Top-level key. Declares volumes which can be referenced from multiple services.【頂級的key。聲明可以從多個服務引用的volume】
匿名掛載
當只指定一個目標而沒有源時,Docker Compoese 將創建一個anonymous(匿名)目錄並將其作為volume掛載到容器內的目標路徑。
默認路徑:/var/lib/docker/volumes/<uuid>
/_data,其中<uuid>
是分配给volume作為其名稱的隨機 ID。
version: "3.9"
service_A:
volumes:
- /var/www/html
具名掛載
如果存在源并且它不是路径,则 Docker Compose 假定您指的是命名卷。此卷需要在顶级volumes密钥声明的同一文件中声明。
顶级volumes键始终声明卷,从不绑定挂载。绑定坐骑没有名称,也无法命名。
主機系統上的目錄路徑 默認為/var/lib/docker/volumes/生成路徑名/_data,其中生成路徑名 = docker-compose.yml文件所在目錄名_docker-compose.yml中volumes中具名掛載指定的命名volume名。 如果是在根目錄執行,則生成文件夾名稱為default。
使用docker-compose up -d運行docker-compose.yml時,docker-compose.yml所在的目錄會加在這個命名中。
version: "3.9"
service_A:
# ...
volumes:
- service_A_html:/var/www/html
volumes: # 聲明可以從多個服務引用的volume
# 如果有service_A_html這個volume就會直接使用它,否則會創建一個新的volume並使用
service_A_html: {}
指定路徑掛載
如果 source 是絕對或相對路徑,Docker Compose 會將文件夾綁定到容器中。以.或...開頭的相對路徑相對於docker-compose.yml的位置
version: "3.9"
service_A:
volumes: # 為特定服務配置volume
- /usr/local/service_A/html:/var/www/html