容器在運行項目時會產生數據,好比運行的mysql容器,那麼必定會有數據產生。
若是將數據保存在容器內部,那麼也就意味着咱們改變了原有鏡像,這種作法是不可取的,由於在後期的鏡像升級將變得不可能了。也就是說,運行的鏡像,最好不要改變,若是必須改變,在改變後記得commit提交打成一個新的鏡像mysql
顯然,數據是應該保持在容器的外部,也就是說保持在主機上了。那麼容器如何讀取主機中的數據呢?redis
-v
在create或者run容器時,經過-v
參數指定主機的目錄,掛載在容器中的某一個目錄上,這樣容器就在這個目錄讀寫數據了,從而實現了容器和數據的分離。sql
docker pull mysql:5.5
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:指定鏡像名:版本docker
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
測試鏈接,建立數據
ubuntu
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的數據。微信
:-:
微信掃一掃,關注「python測試開發圈」,瞭解更多測試教程!tcp