docker教程—數據持久化

  • 方式一 (bind moumting)

先看一個Nginx dockerfilehtml

FROM nginx
WORKDIR /usr/nginx/html
COPY index.html index.html

咱們想吧容器裏的工做目錄掛載到咱們 服務器 的數據捲上,以避免容器刪除後數據丟失。mysql

  •     首先咱們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中定義咱們數據的在容器中的持久化路徑nginx

https://github.com/docker-library/mysql/blob/9d1f62552b5dcf25d3102f14eb82b579ce9f4a26/5.7/Dockerfilegit

上面是 mysql 官方dockerfile中的最佳實踐 mysql在容器中運行的時候數據持久化在如下的路徑github

命令
  
  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 -psql

docker數據持久化

咱們建立一個數據庫docker

docker數據持久化

退出容器並刪除。數據庫

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

docker數據持久化

咱們再啓動一個mysql容器,使用以前的Volume mysqlbash

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

docker數據持久化

咱們發現數據仍是存在的。服務器

docker數據持久化

這樣咱們就能夠作到數據的持久化了。

相關文章
相關標籤/搜索