mysql 镜像数据_mysql官方镜像数据存储问题
mysql官方鏡像的Dockerfile中,有這么一條設置,即用了VOLUME這個關鍵字,同時后面設置了一個路徑,/var/lib/mysql,這個路徑是用來存儲數據庫的各種表的數據的。
這一條設置會起到什么作用呢??
docker官方文檔對VOLUME這個關鍵詞做了解釋,這個路徑下的數據或者修改,再重新commit一個新的鏡像時,該路徑下的所有變化都會被discard,即所有的修改都會被拋棄,不會被保存到新鏡像中。(詳見官方文檔)
那我們如果想把一些基礎數據在docker run的時候,不用重新導入基礎數據就能直接使用呢??(docker run很快,但是導入數據需要時間,兩個表大概需要二十分鐘,太影響效率!)
有兩種方法:
1、在主機上創建不同的目錄(每個人建一個自己的目錄,拷貝一份基礎數據,這樣互不影響,各寫各的),在docker run的時候使用-v參數將宿主機上的目錄映射到容器里的/var/lib/mysql。
2、既然/var/lib/mysql這個目錄被VOLUME關鍵詞給限制了,我們就先把數據拷貝到容器里的其他目錄,比如根目錄,然后修改docker run的啟動文件(姑且稱為啟動文件,各種軟件的docker鏡像都會有一個啟動腳本,在docker run的時候執行,做一些初始配置、拉起服務的進程),增加這樣一個邏輯: 將我們拷貝到鏡像根目錄中的基礎數據拷貝或者移動到/var/lib/mysql目錄下,比如cp -r /mysql-basic-data /var/lib/mysql,這樣,我們的目的就達到了。
我們采用的第二種解決方法。
問題:
1、如何從宿主機拷貝數據到容器中?
有個命令叫docker cp? xxx? 容器id:xxx
當然也能從容器中拷貝到宿主機上:
docker cp 容器id:xxx? xxx
還有一種場景會用到——很多容器里不能使用vi或者vim編輯文件的,那么你可以先拷貝到宿主機上,編輯修改保存,再拷貝回去。
2、區分Dockerfile和docker run的啟動腳本
Dockerfile是在docker build的時候執行命的,而啟動腳本是在docker run的時候執行的,注意區分其執行場景和時機!!
3、mysql 5.6版本官方鏡像大小300+M,我們的數據大概300M,但是新的鏡像竟然達到了900+M大小,為什么??
具體要看docker存儲原理!!
docker使用的是聯合文件系統(AUFS,網上介紹很多),這個文件系統會把你的修改重新從底層拷貝一份到上層,即使你只有一份數據,AUFS也會把它搞成兩份數據。
同事說了一件事情,即使你在容器里執行一條chown命令,鏡像的大小增加200M都是可能的!!
4、docker進程自動重啟,導致所有容器掛掉
這時使用docker ps是查不出來了,需要使用docker ps -a,然后一個一個的docker start xxx 起來。
解決辦法: docker run的時候加個參數——autorestart,docker daemon重啟,容器也會自動拉起。
另外docker ps -l,是查看哪些容器有修改!!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql 镜像数据_mysql官方镜像数据存储问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据分片排序oracle,Oracle数
- 下一篇: oracle 一行转多行,oracle