在docker中運行mysql實例

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

對docker有個大體瞭解,學習docker斷斷續續,雖然說學習不能急於求成,但斷斷續續學的話,浪費的碎片化時間也是很多的。linux

學習docker若是不肯意看文章能夠看慕課網的一個免費的視頻講解,入門徹底ok。sql

能夠在docker hub上註冊個帳號,構建本身的鏡像放到hub上,以便複用docker

docker hub地址 數據庫

個人地址centos

慕課網學習地址安全

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

一個運行起來的空的mysql容器佔用了約200M內存,free -h命令能夠查看內存使用狀況網絡

慕課網手記 (培訓的資料準備筆記)工具

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

個人是centos系統

查看linux版本能夠經過下面命令進行查看 

cat /proc/version

安裝docker,參考 http://www.javashuo.com/article/p-cmjqztdu-hx.html

安裝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 就是這樣的服務。

相關文章
相關標籤/搜索