1. 程式人生 > >docker教程—資料持久化

docker教程—資料持久化

  • 方式一 (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数据持久化

  • 執行容器
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数据持久化

docker数据持久化

  • 看下資料有沒有繫結成功
docker exec -it nginx1 /bin/bash

互動式執行容器

我們在容器裡建立一個檔案,退出

docker数据持久化

當我們回到主機後,發現主機繫結的目錄也多了這個檔案

docker数据持久化

  • 方式二(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無密碼

docker資料持久化

正在執行的Volume
  
  docker volume ls

docker資料持久化

檢視Volume在主機上的持久化地址

docker volume inspect mysql

docker資料持久化

驗證資料有沒有成功持久化

互動式執行容器
	docker exec -it mysql1 /bin/bash

登入mysql 檢視資料庫 mysql -uroot -hlocalhost -p

docker資料持久化

我們建立一個數據庫

docker資料持久化

退出容器並刪除。

docker rm -f mysql1
	 -f 強制刪除正在執行的容器

docker資料持久化

我們再啟動一個mysql容器,使用之前的Volume mysql

sudo docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

docker資料持久化

我們發現數據還是存在的。

docker資料持久化

這樣我們就可以做到資