mysql利用docker做容器化,無論是測試還是生產,還是建議配置檔案和資料儲存掛載在宿主機。這樣既可以確保配置的靈活性,又可以確保資料的安全,以及遷移的便利性。下面以在centos平台建立mysql5.7容器化為例。關於docker的安裝本章就不說了,假設使用者對docker都有基本的認知。
docker pull mysql5.7
自定義本地與mysql容器相關的目錄
mkdir -p /docker/mysql
初步啟動乙個mysql容器(到時要刪除,只是想看看這個映象具體的mysql的配置情況,進行有針對性的掛載安排,只要是弄清楚my.cnf在**?conf.d 在**?資料儲存的位置在**?)
# 啟動乙個mysql容器,到時要刪除的
docker run -p 3306:3306 --name mymysql -e mysql_root_password=123456 -d mysql:5.7
進入容器(進入所有的容器都是這個命令,只不過容器名不同),查詢配置位置。
docker exec -it mymysql /bin/bash
發現my.cnf在容器內部的位置和名字是」/etc/mysql/my.cnf「,資料儲存在」/var/lib/mysql「,conf.d在」/etc/mysql/conf.d「。
退出容器(exit)
# 退出容器的命令
exit
把容器內的配置匯出到宿主機掛載的地方,作為初始配置。資料儲存不用匯出,就在宿主機的/docker/mysql/下新建datadir檔案。
# 複製mymysql容器內的配置檔案my.cnf到本地/docker/mysql/下
docker cp mymysql:/etc/mysql/my.cnf /docker/mysql/my.cnf
# 複製conf.d,也是配置有關於,倒是沒有仔細研究
docker cp mymysql:/etc/mysql/conf.d /docker/mysql/conf.d
# 建立資料放置的地方
mkdir /docker/mysql/datadir
啟動前刪除之前的容器,一則3306埠不夠用;二則,容器太多,也吃伺服器記憶體。
# 停止容器
docker stop mymysql
# 刪除容器
docker rm mymysql
啟動乙個mysql的容器,容器的名字是mysql5.7,-v代表掛載(-v 本地目錄:容器目錄),埠還是3306。--privileged=true表示容器的內的root具有真正的root許可權,否則進入容器後啥都受限。
docker run --privileged=true --name mysql5.7 -p 3306:3306 \
-v /docker/mysql/datadir:/var/lib/mysql \
-v /docker/mysql/conf.d:/etc/mysql/conf.d \
-v /docker/mysql/my.cnf:/etc/mysql/my.cnf -e mysql_root_password=root -d mysql:5.7
命令列執行容器內的mysql
# 若本地沒有mysql的登入工具,則:
sudo docker exec -it mysql5.7 bash
# 宿主機測試連線(-h少不了)
mysql -uroot -p -h127.0.0.1 -p 3306
若是阿里雲伺服器,切記把3306埠加入安全-防火牆白名單。 docker容器虛擬化
network namespace 是 linux 核心提供的功能,是實現網路虛擬化的重要功能,它能建立多個隔離的網路空間,它們有獨自網路棧資訊。不管是虛擬機器還是容器,執行的時候彷彿自己都在獨立的網路中。而且不同network namespace的資源相互不可見,彼此之間無法通訊。假如我們的物理機...
Docker容器虛擬化
network namespace 是 linux 核心提供的功能,是實現網路虛擬化的重要功能,它能建立多個隔離的網路空間,它們有獨自網路棧資訊。不管是虛擬機器還是容器,執行的時候彷彿自己都在獨立的網路中。而且不同network namespace的資源相互不可見,彼此之間無法通訊。假如我們的物理機...
docker容器虛擬化
network namespace 是 linux 核心提供的功能,是實現網路虛擬化的重要功能,它能建立多個隔離的網路空間,它們有獨自網路棧資訊。不管是虛擬機器還是容器,執行的時候彷彿自己都在獨立的網路中。而且不同network namespace的資源相互不可見,彼此之間無法通訊。假如我們的物理機...