[TOC]
## 將數據保存在容器外部
容器在運行項目時會產生數據,比如運行的mysql容器,那么一定會有數據產生。
如果將數據保存在容器內部,那么也就意味著我們改變了原有鏡像,這種做法是不可取的,因為在后期的鏡像升級將變得不可能了。*也就是說,運行的鏡像,最好不要改變,如果必須改變,在改變后記得commit提交打成一個新的鏡像*
顯然,數據是應該保持在容器的外部,也就是說保持在主機上了。那么容器如何讀取主機中的數據呢?
### 掛載參數 `-v`
在create或者run容器時,通過`-v`參數指定主機的目錄,掛載在容器中的某一個目錄上,這樣容器就在這個目錄讀寫數據了,從而實現了容器和數據的分離。
## 案例:運行mysql容器,將mysql的數據放在主機/data/mysql-data中。
1. 下載mysql鏡像
```
docker pull mysql:5.5
```
2. 創建容器
```
docker create --name mysql -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.5
```
參數解釋:
*--name mysql*: 指定容器的名稱為mysql
*-v /data/mysql-data:/var/lib/mysql*:將主機目錄/data/mysql-data掛載到容器的目錄/var/lib/mysql上
*-p 3306:3306* :設置端口映射,前面的端口3306是主機端口,后面的端口3306是容器內部端口
*-e MYSQL_ROOT_PASSWORD=root*: 設置容器參數,設置root用戶的密碼為root
*mysql:5.5*:指定鏡像名:版本
3. 啟動容器 `dockert start <鏡像ID>`
```
root@ubuntu:/home/guanfuchang# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b0589fb6196 mysql:5.5 "docker-entrypoint.s…" 10 seconds ago Created mysql
5f3e056f65d1 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago kind_wescoff
07bf73ec9f73 redis:5.0 "docker-entrypoint.s…" 23 hours ago Up About a minute 0.0.0.0:16379->6379/tcp redis
root@ubuntu:/home/guanfuchang#
root@ubuntu:/home/guanfuchang# docker start 6b0589fb6196
6b0589fb6196
root@ubuntu:/home/guanfuchang#
root@ubuntu:/home/guanfuchang# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b0589fb6196 mysql:5.5 "docker-entrypoint.s…" 57 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp mysql
07bf73ec9f73 redis:5.0 "docker-entrypoint.s…" 23 hours ago Up About a minute 0.0.0.0:16379->6379/tcp redis
```
4. 測試連接,創建數據



5. 檢查主機上的數據
```
root@ubuntu:/home/guanfuchang#
root@ubuntu:/home/guanfuchang# ls /data/mysql-data/
6b0589fb6196.pid ibdata1 ib_logfile0 ib_logfile1 mt_gff mysql performance_schema
root@ubuntu:/home/guanfuchang# ls /data/mysql-data/mt_gff/
db.opt student.frm
root@ubuntu:/home/guanfuchang#
```
通過上面的查詢結果可見,在主機目錄/data/mysql-data中已經保存了mysql的數據。
---
:-: 
<span style="color: #993366;"><em>***<span style="text-decoration: underline;"><span style="text-decoration: underline;">微信掃一掃,關注“python測試開發圈”,了解更多測試教程!!</span></span>***</em></span>