在docker中運行mysql實例


Docker是一種新興的虛擬化技術,能夠一定程度上的代替傳統虛擬機。下圖是容器跟虛擬機的對比

對docker有個大致了解,學習docker斷斷續續,雖說學習不能急於求成,但斷斷續續學的話,浪費的碎片化時間也是不少的。

學習docker如果不願意看文章可以看慕課網的一個免費的視頻講解,入門完全ok。

可以在docker hub上注冊個賬號,構建自己的鏡像放到hub上,以便復用

docker hub地址 

我的地址

慕課網學習地址

年前給公司的同事培訓過一次學習mysql,在阿里雲服務器上使用docker給每個同事都搭建了一個msyql運行環境,差點沒跑起來,

一個運行起來的空的mysql容器占用了約200M內存,free -h命令可以查看內存使用情況

慕課網手記 (培訓的資料准備筆記)

總結下使用docker搭建mysql實例的過程

我的是centos系統

查看linux版本可以通過下面命令進行查看 

cat /proc/version

安裝docker,參考 https://blog.csdn.net/u010046908/article/details/79553227

安裝mysql,可以通過search命令查看倉庫的mysql的各個版本

docker search mysql

通過pull命令進行拉去鏡像操作,默認拉去的是latest版本,可以通過冒號來下載指定版本,如想下載5.7的mysql

docker pull mysql:5.7

 具體有哪些版本可以查看hub,如下圖

現在下來后可以通過 docker images 命令查看下載的鏡像

想運行mysql,把它放到容器里面運行下就ok(貌似說的不咋合理)

運行直線需要做一些配置,比如數據庫data的存放位置,以及自定義的一些配置,比如mysql默認是區分大小寫的

我是在當前的用戶下面進行操作的,如下

創建一個data文件夾用於存放mysql的表結構,數據等信息

創建一個my.cnf文件來進行自定義參數設置,內容如下

[mysqld]
user=mysql sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION lower_case_table_names=1 event_scheduler=ON default-time-zone = '+8:00'
event_scheduler=ON 表示開啟事件支持
lower_case_table_names=1 表示數據庫不區分大小寫
default-time-zone = '+8:00' 表示使用中國時區

ok,准備就緒,啟動干就完了。

具體命令

docker run -d -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 --name cmysql -v /home/chy/mysql/config/my.cnf:/etc/mysql/my.cnf -v /home/chy/mysql/db:/var/lib/mysql mysql:5.7

各個參數說明

  • run:運行一個容器
  • -d:看做做守護線程(Daemon)
  • -p:進行端口映射,用於暴露給外界讓其訪問
  • -e:初始化root用戶的密碼
  • --restar=always:自動重啟,比如服務器突然斷電,重啟服務器之后不需要你重新手動啟動
  • --name:自定義容器名稱
  • -v:掛載。容器里面的數據你是不能直接訪問的,但是你可以將可見目錄掛載上去,這樣就可以訪問了(解釋的不咋到位)

啟動成功之后會出現一個隨機字符串,表示容器的id

可以通過docker ps查看,我是啟動了兩個。docker ps -a 查看所有容器

啟動之后,由於進行了端口映射,可以通過客戶端工具入sqlyog,Navicat都可以進行連接

如果想進入容器進行操作,可以通過如下命令

要想退出使用exit,快捷鍵Ctrl+d

刪除容器可以通過

docker rm cmysql

當然了,前提是容器需要關閉,關閉的命令

docker stop cmysql

一樣的道理,刪除鏡像也需要前提條件,那就是被依賴的容器刪除了才能進行刪除鏡像

docker rmi <image id>

ok,到位, 好記性不如爛筆頭,特此總結下。

補充些docker基礎概念知識

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口

鏡像(Image)

鏡像,從認識上簡單的來說,就是面向對象中的類,相當於一個模板。從本質上來說,鏡像相當於一個文件系統。Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時准備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。

容器(Container)

容器,從認識上來說,就是類創建的實例,就是依據鏡像這個模板創建出來的實體。容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。因此容器可以擁有自己的root 文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶ID 空間。容器內的進程是運行在一個隔離的環境里,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。

倉庫(Repository)

倉庫,從認識上來說,就好像軟件包上傳下載站,有各種軟件的不同版本被上傳供用戶下載。鏡像構建完成后,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM