docker教程—資料持久化
阿新 • • 發佈:2019-07-05
-
方式一 (bind moumting)
先看一個Nginx dockerfile
FROM nginx
WORKDIR /usr/nginx/html
COPY index.html index.html
我們想吧容器裡的工作目錄掛載到我們 伺服器 的資料捲上,以免容器刪除後資料丟失。
- 首先我們build dockerfile成一個image 取名為 saniii/my-nginx-mount
docker build -t saniii/my-nginx-mount .
- 執行容器
docker run -d -p 3331:80 -v $(pwd):/usr/nginx/html --name nginx1 saniii/my-nginx-mount -d 後臺執行 -p 繫結主機埠到容器埠 3331:表示伺服器的埠 :80 表示容器裡的埠 -v 資料繫結 $(pwd) 代表當前路徑 :/usr/nginx/html 為要繫結的容器裡的路徑 --name 容器命名為 nginx 1 saniii/my-nginx-mount 執行的容器名
- 看下資料有沒有繫結成功
docker exec -it nginx1 /bin/bash 互動式執行容器 我們在容器裡建立一個檔案,退出
當我們回到主機後,發現主機繫結的目錄也多了這個檔案
-
方式二(Volume)
我們可以在dockerfile中定義我們資料的在容器中的持久化路徑
https://github.com/docker-library/mysql/blob/9d1f62552b5dcf25d3102f14eb82b579ce9f4a26/5.7/Dockerfile
上面是 mysql 官方dockerfile中的最佳實踐 mysql在容器中執行的時候資料持久化在以下的路徑
命令 sudo docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7 -v 資料繫結 將我們資料volume命名為mysql /var/lib/mysql容器中資料卷的路徑 -e MYSQL_ALLOW_EMPTY_PASSWORD=true 設定mysql無密碼
正在執行的Volume docker volume ls
檢視Volume在主機上的持久化地址 docker volume inspect mysql
驗證資料有沒有成功持久化
互動式執行容器 docker exec -it mysql1 /bin/bash
登入mysql 檢視資料庫 mysql -uroot -hlocalhost -p
我們建立一個數據庫
退出容器並刪除。
docker rm -f mysql1 -f 強制刪除正在執行的容器
我們再啟動一個mysql容器,使用之前的Volume mysql
sudo docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7
我們發現數據還是存在的。
這樣我們就可以做到資