docker上部署MySQL的示例

     容器雲的概念現在很火,現在很多公司都把MySQL部署在容器上,開始今天內容之前,我們先來看看容器雲的概念吧。

1 容器雲是什麼?

   要理解容器雲的概念,首先需要瞭解容器,容器的介紹過程中,需要引入虛擬機來進行對比。

虛擬機:

    VMware或者Virtual BoX這種虛擬機想必大傢在日常工作中都有用到過,它是模擬計算機操作系統的軟件,你可以在windows計算機上安裝Virtual BoX軟件,然後在Virtual Box上安裝Centos或者Ubuntu這種Linux操作系統,從而在一臺機器上運行多種類型的多個操作系統,讓我們開發測試工作變得很方便。

虛擬機的缺點是需要消耗大量資源,每個虛擬機都需要單獨分配內存和磁盤空間,還要消耗CPU資源以及很多底層硬件資源,如果你隻是在上面用程序跑瞭一個hello world,那麼會造成資源的大量浪費。

容器:

      容器的出現,就是為瞭解決這個問題,它是一種更加輕量,更加靈活的虛擬化處理技術,它將一個應用程序所需要的所有資源打包在一起,包含應用程序的code源碼、依賴庫以及操作系統,這讓應用程序在任何地方都可以輕易的運行,不再受到環境的制約。

    和虛擬機相比,容器更加輕量、可移植性更好、成本更低,更高效。

容器雲可以理解為雲上的容器技術服務。

2 docker簡介

  docker是一個開源的應用容器引擎,我們可以將它理解為一個工具,它基於go語言開發,並且兼容apache2.0協議,它可以將應用程序及其依賴(如配置文件等)打包到容器中。

   除此之外,它兼容多種環境,可以被部署在在筆記本電腦,內部服務器,公共雲或私有雲,可移植性很好,部署也非常靈活,解決瞭多種環境下的兼容性問題。

Docker 包括三個基本概念:

鏡像(Image)
容器(Container)
倉庫(Repository)

這三部分組成瞭Docker的整個生命周期,如上圖所示。

docker鏡像包含瞭文件系統,類似於虛擬機的鏡像,它是隻讀的模板。

docker容器是由鏡像實例化而來的,這和我們學習的面向對象的概念十分相似,我們可以把鏡像想象成類,把容器想象成類經過實例化後的對象,這樣就非常好理解鏡像和容器的關系瞭。

docker倉庫:類似與代碼倉庫,是Docker集中存放鏡像文件的場所

這個關系可以更加清楚的表述為:

下面我們來看docker的安裝:

1、安裝所需要的軟件包,其中yum-utils 提供瞭 yum-config-manager  ,並且 device mapper 存儲驅動程序需要 device-mapper-persistent-data 和 lvm2

yum install-y  yum-utils
yum install-y  device-mapper-persistent-data
yum install-y  lvm2

2、設置穩定的docker倉庫

yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安裝Docker Engine-Community、

yum install docker-ce docker-ce-cli cotainerd.io

此時,Docker 安裝完默認未啟動。並且已經創建好 docker 用戶組,但該用戶組下沒有用戶。

3 使用docker安裝MySQL

   使用docker安裝mysql服務非常簡單,總體步驟就下面幾步:

1、下載MySQL鏡像

可以登錄到docker的官方倉庫中尋找mysql的鏡像,網址如下:https://hub.docker.com/_/mysql?tab=tags 

也可以直接使用docker的命令去下載MySQL鏡像

yum pull mysql:5.7.16

上面的命令表示我們要下載MySQL5.7.16的鏡像。如果我們不寫最後的版本號,則默認拉取最新的MySQL版本鏡像

2、啟動MySQL。

拉取完畢之後,我們可以通過下面的命令來啟動MySQL實例:

docker run -itd --name mysql_5716 -p 3306:3306  -e MYSQL_ROOT_PASSWORD=yeyazhou mysql_5716

其中:

-i:以交互模式運行容器

-t:為容器重新分配一個偽輸入終端

-d:後臺運行容器

-p 3306:3306 :映射容器服務的 3306 端口到宿主機的 3306 端口,外部主機可以直接通過 宿主機ip:3306 訪問到 MySQL 的服務。

MYSQL_ROOT_PASSWORD=yeyazhou:設置 MySQL 服務 root 用戶的密碼。

3、查看容器的運行狀態

container id:容器的id號

其他信息包括容器的源鏡像,創建時間,狀態,端口映射信息,容器名字等。

4、進入容器查看

首先我們使用命令進入容器的交互式命令行:

docker exec -it mysql_5716 /bin/bash

運行結果如下

root@8c388ccfb761:/# ls -l
total 72
drwxr-xr-x   1 root root 4096 Nov  8  2016 bin
drwxr-xr-x   2 root root 4096 Sep 12  2016 boot
drwxr-xr-x   5 root root  360 Aug 11 11:41 dev
drwxr-xr-x   2 root root 4096 Nov  8  2016 docker-entrypoint-initdb.d
lrwxrwxrwx   1 root root   34 Nov 23  2016 entrypoint.sh -> usr/local/bin/docker-entrypoint.sh
drwxr-xr-x   1 root root 4096 Aug 11 11:41 etc
drwxr-xr-x   2 root root 4096 Sep 12  2016 home
drwxr-xr-x   1 root root 4096 Nov  8  2016 lib
drwxr-xr-x   2 root root 4096 Nov  4  2016 lib64
drwxr-xr-x   2 root root 4096 Nov  4  2016 media
drwxr-xr-x   2 root root 4096 Nov  4  2016 mnt
drwxr-xr-x   2 root root 4096 Nov  4  2016 opt
dr-xr-xr-x 104 root root    0 Aug 11 11:41 proc
drwx------   1 root root 4096 Aug 11 11:49 root
drwxr-xr-x   1 root root 4096 Nov  8  2016 run
drwxr-xr-x   2 root root 4096 Nov  4  2016 sbin
drwxr-xr-x   2 root root 4096 Nov  4  2016 srv
dr-xr-xr-x  13 root root    0 Jul 19 02:47 sys
drwxrwxrwt   1 root root 4096 Aug 11 11:41 tmp
drwxr-xr-x   1 root root 4096 Nov 23  2016 usr
drwxr-xr-x   1 root root 4096 Nov  8  2016 var

可以看到進入瞭容器交互式命令行。前面的root@8c388ccfb761中@符號後面的字符串就是我們的容器ID。

5、使用連接串連接MySQL

root@8c388ccfb761:/usr/local# mysql -uroot -pyeyazhou -h127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.7.16 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

6、啟動另外一個MySQL容器

[root@VM-0-14-centos ~]# docker run -itd -p 3307:3306 --name mysql_5716_2 -e MYSQL_ROOT_PASSWORD=yeyazhou  mysql:5.7.16  
e5e0f9a14462261d01307c4d0891587acce90e4ffd33e434878f311bf98d4f22
 
[root@VM-0-14-centos ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
e5e0f9a14462        mysql:5.7.16        "docker-entrypoint.s…"   8 seconds ago       Up 6 seconds        0.0.0.0:3307->3306/tcp   mysql_5716_2
8c388ccfb761        mysql:5.7.16        "docker-entrypoint.s…"   25 hours ago        Up 25 hours         0.0.0.0:3306->3306/tcp   mysql_5716

以上就是docker上部署MySQL的示例的詳細內容,更多關於docker上部署MySQL的資料請關註WalkonNet其它相關文章!

推薦閱讀:

    None Found