目的:
將 docker中的 mysql 容器打包,這個 mysql 容器中是有數(shù)據(jù)的叉存,在打包時要求將這些數(shù)據(jù)庫码俩、表等數(shù)據(jù)一同打包。
遇到問題:
容器導入數(shù)據(jù)后重新打包歼捏,數(shù)據(jù)丟失稿存。
問題解決方法:
mysql容器默認啟動后將容器內(nèi)/var/lib/mysql文件掛載至本地,將容器內(nèi)的數(shù)據(jù)庫文件夾復制到其他位置進行保存瞳秽。修改mysql默認的數(shù)據(jù)庫存儲路徑至新保存的路徑即可挠铲。
步驟1:復制數(shù)據(jù)
mysql 鏡像的數(shù)據(jù)默認放在 /var/lib/mysql 目錄下,需要進行修改寂诱。
進入正在運行的容器,在根目錄下創(chuàng)建 work 目錄:mkdir /work安聘。
然后復制 /var/lib/mysql 下的數(shù)據(jù)到 /work 目錄下:cp -r /var/lib/mysql /work
步驟2:修改數(shù)據(jù)庫配置文件
vi /etc/mysql/my.cnf
注意:一般容器中是沒有 vim 工具的痰洒,需要安裝。但是直接安裝不成功浴韭。需要先apt-get update丘喻,然后apt-get install -y vim。也可以不安裝vim以減小容器大小念颈,通過cp的方式進行編輯泉粉。
將這個配置文件中的 datadir 修改為剛才創(chuàng)建的目錄:
datadir = /work/mysql
注意:修改sql_mode 目的可以使MySQL上的數(shù)據(jù)更方便的遷移到目標數(shù)據(jù) 放到mysqld底部即可
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
步驟3:重啟mysql容器
docker restart 容器ID
步驟4:打包鏡像
docker commit 容器ID mysql_image(自定義鏡像名稱):v1(自定義鏡像版本)
步驟5:啟動鏡像
docker run -itd --name mysql_container -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=123456 -d mysql_image:v1
注:前面的主機端口號 3306 是映射宿主機的端口號,但是后面的 3306 一般不要改。這個 mysql_container 容器里就是包含數(shù)據(jù)的嗡靡。
來源:https://blog.csdn.net/weixin_44277386/article/details/125652097?spm=1001.2014.3001.5502