一條命令啟動一個MySQL服務,神奇而強大的docker!

上一篇文章說到了怎麼啟動一個Linux虛擬機,好了本次教程就來玩一個比較酷的東西-docker!在玩之前我們先來了解一些相關的知識和概念。

1.容器簡介

因為docker最開始是基於LXC(Linux containers)所以在介紹docker的之前,先說下LXC是什麼,Linux容器是一個在單一 Linux 主機上提供多個隔離的 Linux 環境的操作系統級虛擬技術。不像虛擬機(VM),容器並不需要運行專用的訪客guest操作系統。容器們共享宿主機的host操作系統內核,並使用訪客操作系統的系統庫來提供所需的功能。由於不需要專用的操作系統,因此容器要比虛擬器啟動快得多。

容器藉助 Linux 內核的 Namespaces、Apparmor、SELinux 情景模式profile、chroot 和 CGroup 等功能來提供類似於虛擬機的隔離環境。Linux 的安全模塊可以確保正確地控制容器對宿主機和內核的訪問,從而避免各種入侵活動。此外,在宿主機上可以運行不同的 Linux 發行版,只要它們運行在同樣的 CPU 架構下。

簡單地說,容器提供的是一種基於各種 Linux 發行版創建容器鏡像的方法、一套管理容器生命週期的 API、與該 API 交互的客戶端工具、保存快照的功能、在宿主機之間遷移容器實例的能力等等。


2.docker簡介

行業內有一個顯著趨勢,部署軟件應用從虛擬機逐漸移到了容器。其主要的原因是容器相比於虛擬機而言更加靈活和低消耗。Google 已經使用容器技術好多年了,它在 Borg 和 Omega 容器集群管理平臺上可以成規模地運行 Google 應用。並且Google 藉助其在 Borg 中取得的經驗,開源了一個叫做 Kubernetes 的容器集群管理系統。這套管理系統基本算是容器編排領域的領導者!而這套容器編排採用docker進行運行容器。在GitHub上,誕生沒幾年的Docker開源項目已經有超過3多個star,這麼多年了,Linux才3萬左右,可見Docker是有多火。這個新生的開源項目的發展速度真是令人咋舌,甚至有人直接把Docker和容器劃上了等號。

Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬於操作系統層面的虛擬化技術。由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其為容器。最初實現是基於 LXC,從 0.7 以後開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11本版開始,則進一步演進為使用 runC 和 containerd。

Docker火爆的原因是因為它在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。


3.docker的三個基本的概念

1).鏡像

Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

2).容器

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

3).倉庫(Docker Registry)

各種各樣的服務就會有各種各樣的容器來提供,而容器又是基於鏡像啟動的,所以這就需要一個集中的倉庫來存儲、分發鏡像,Docker Registry 就是這樣的一個服務。鏡像倉庫分為公有和私有的,公有的意思就是大家都能夠訪問得到的,最常使用的公有鏡像倉庫是官方的 Docker Hub,這也是默認的 Registry,並擁有大量的高質量的官方鏡像。除此以外,還有 CoreOS 的 Quay.io,CoreOS 相關的鏡像存儲在這裡;Google 的 Google Container Registry,Kubernetes 的鏡像使用的就是這個倉庫。私有就是自己搭建的,既然有公有的為啥麼還要搭建私有倉庫呢?其實第一個是公司的保密之類的原因。第二個就是因為在自己的服務器搭建的鏡像倉庫,push和pull鏡像都比在公有倉庫要快速!而一個容器編排系統最看重的就是啟動容器的速度!所以一個公司基本都會有自己的私有鏡像倉庫。


4.實戰--使用docker啟動一個MySQL服務

1).安裝docker

本教程是在上一篇安裝好的centos7.2的環境進行的,安裝docker也是非常簡單,只需要輸入以下命令即可yum -y install docker,如下圖:

一條命令啟動一個MySQL服務,神奇而強大的docker!

安裝完成後我們需要啟動一下docker,service docker start然後檢查一下docker的版本,輸入docker version,如下圖:

一條命令啟動一個MySQL服務,神奇而強大的docker!

如果沒有執行service docker start會提示你docker是否啟動了,如下:

一條命令啟動一個MySQL服務,神奇而強大的docker!

很好,這樣docker就裝好啦!簡單吧!下面讓我們來pull一個MySQL的鏡像到本地。


2).從docker registry拉取鏡像

拉取一個鏡像也非常簡單,輸入docker pull mysql/mysql-server:latest,這個命令是什麼意思呢,pull代表拉取,mysql代表倉庫名稱,mysql-server表示鏡像名稱,latest表示最新的版本。如下圖:

一條命令啟動一個MySQL服務,神奇而強大的docker!

3).啟動一個MySQL服務

使用docker啟動一個MySQL非常簡單,一條命令就完成了,輸入以下命令:docker run --restart always -d --name mysql-server -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yunzhongmuge mysql/mysql-server:latest

解釋一下這條命令的意思

run 運行一個容器;

--restart always 假如docker進程掛掉了,重啟時把這個容器也啟動起來;

-d 在後臺運行

--name 這個容器的名稱

-p 映射服務端口到虛擬機

-v 掛載的目錄,把數據卷掛到本地,防止數據丟失

-e 設置MySQL服務root用戶的密碼

mysql/mysql-server 鏡像名稱

latest 鏡像的版本號

如下圖:

一條命令啟動一個MySQL服務,神奇而強大的docker!

4).登錄mysql-server

我們先把mysql 這個二進制文件從容器裡面複製到本地的PATH路徑,然後使用該二進制文件登錄到MySQL服務,如下圖:

一條命令啟動一個MySQL服務,神奇而強大的docker!


非常好!夠酷吧!啟動一個MySQL只需要一條命令就好了,所以這個比用傳統的方式啟動MySQL的效率提升不知多少倍!好了,今天教程為啥沒及時出來,就是因為在拉取鏡像拉了半天!所以下一篇就是怎麼搭建一個自己的docker私有倉庫!本次的教程就到此結束了!good luck!



May you share freely, never taking more than you give.


都看到這裡,那就關注、評論、收藏、轉發一下唄!謝謝!


分享到:


相關文章: