1、搜索鏡像
docker search mysql
2、下載mysql的官方鏡像
docker pull mysql
3、查看自己的鏡像
[root@localhost mysql]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wordpress latest e6bc04e5d2ab 4 weeks ago 442MB mysql latest 5195076672a7 7 weeks ago 371MB hello-world latest f2a91732366c 5 months ago 1.85kB
4、啟動MySQL容器
docker run -d --name myMysql -v /data/mysql:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.6
d : --detach,后台運行。
--name : 為你的鏡像創建一個別名,該別名用於更好操作。
-p : 映射端口,一般我們會將默認端口進行更改,避免與本機的mysql端口沖突,如果你宿主機有mysql,請更改端口,如 -p 33060:3306。
-e : 環境變量。為mysql的root用戶設置密碼為123456。
-v : 指定數據卷,意思就是將mysql容器中的/var/lib/mysql(這個是數據庫所有數據信息文件)映射到宿主機/data/mysql里面。
5、進入到myMysql容器中
docker exec -ti myMysql /bin/bash
-i : --interactive,交互界面。
-t : --tty,偽終端界面。
6、登錄到mysql服務器中
mysql -uroot -p -h127.0.0.1
7、查看myMysql容器的IP
[root@localhost mysql]# docker inspect myMysql | grep "IPAddress" "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2",
8、-v參數
這時,其實數據卷已經進行了分離,還記得啟動容器時我們攜帶的“-v”參數么。
# 在宿主機執行
ls /data/mysql
刪除容器,看數據卷是否還在
docker rm myMysql
依然還在,這說明如果我們創建新的mysql容器,那么只需要指定數據卷就可以了。
9、細節處還需深入研究
docker -v /data/mysql:/var/lib/mysql
以上這條命令到底是咋運行的。
第一次,啟動mysql容器時,宿主機的/data/mysql是空的。是docker容器中的/var/lib/mysql會自動映射到宿主機/data/mysql,讓宿主機有了對應的文件信息。
第二次,我刪除了docker容器,這時宿主機的/data/mysql是有文件的。然后我創建了mysql容器,並設置對應的映射關系。這時,宿主機的/data/mysql文件映射到了容器中,保持數據一致。
這就產生疑問了?到底是以哪一個為主要的數據呢?
總結 基本上可以了解為這樣一個流程,當指定-v參數時,在啟動容器時會首先檢查宿主機中是否有數據文件:
如果有的話,則判斷是否是數據庫文件,如果符合數據庫文件系統的文件目錄。那么則會使用;如果不符合數據庫文件系統的文件目錄,那么則會無法啟動,直接報錯。 如果沒有的話則會初始化數據庫文件,生成一個干凈的數據庫系統並進行宿主機和docker容器間的互通。
10、docker相關命令
docker ps 默認顯示運行的容器 docker ps -a 顯示所有容器 docker stop myMysql 停止容器 docker rm -fv myMysql 刪除容器,連卷也一起刪除
docker logs myMysql 查容器啟動失敗日志
docker inspect mysql 查鏡像詳情
docker pull mysql:5.6
11、注意事項
不這樣操作 容器運行不起來
在使用-v選項映射目錄時,宿主機需關閉SElinux:
# setenforce 0
或者給數據目錄添加相關selinux權限:
chcon -Rt svirt_sandbox_file_t /data/mysql
最后自己發現還都不行,需要把自己手動創建的目錄/data/mysql刪除了,再成功啟動容器
補充,還有可能是用了最新版本的MySQL8.0