詳解使用DockerHub官方的mysql鏡像生成容器

寫在前面:看到網上關於利用DockerHub官方的mysql鏡像生成容器此類的文檔比較少,故結合自身實踐分享給你們,還望多多指教。mysql

個人需求:利用docker 鏡像快速創建一個mysql容器。sql

因而我去找度娘,谷哥,看了好多以官方centos鏡像爲基礎,製做基於centos的mysql鏡像,可是製做後發現鏡像大小已經超過1G,對於通常的docker鏡像來講太臃腫了。docker

本身私下想:不至於吧,mysql的鏡像這麼大?而後去倉庫看了下數據庫

https://hub.docker.com/_/mysql/  (英文水平比較好的直接看這連接文檔來就行了,嘿嘿)vim

言歸正傳 ->centos

  我本身隱約以爲,用官方的就行了,由於這已經暫時知足個人需求了。其餘人本身製做mysql鏡像有他們的特殊需求吧!  因此我就先使用官方的了! bash

拉下來一看Docker Hub目前官方提供的mysql鏡像才380.2MB。ssh

1、下載官方的mysql鏡像tcp

[root@localhost ~]# docker pull mysql

下載完成後查看鏡像:編輯器

[root@localhost ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql               latest              1195b21c3a45        10 weeks ago        380.2 MB

 

2、生成容器 

生成容器時,調用的啓動腳本是/entrypoint.sh;經過查看/entrypoint.sh腳本內容,總結參數以下

mysqld #啓動mysql服務,必須使用
MYSQL_ROOT_PASSWORD #設置mysql的root密碼,必須使用

#如下二個參數添加除root以外的用戶並設置密碼,可選。
MYSQL_USER 
MYSQL_PASSWORD

#設置生成容器時須要新建的數據庫,可選
MYSQL_DATABASE
#容器的mysql數據庫默認的保存路徑是:
/var/lib/mysql
#容器的配置文件my.cnf的路徑爲:
/etc/mysql/my.cnf

使用上要的參數生成新的容器:

[root@localhost mysql_data]# docker run -d -p 3307:3306 --name mysql  -P  -e mysqld -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=yope -e MYSQL_PASSWORD=yope -e MYSQL_DATABASE=testDb -v /mysql_data:/var/lib/mysql  mysql 
492ffa26d8653561208aed28eb62c61e9bae0de91ef911769c35f9e4eae6b272
[root@localhost mysql_data]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                                          NAMES
492ffa26d865        mysql               "docker-entrypoint.sh"   10 seconds ago      Up 7 seconds               0.0.0.0:3307->3306/tcp                         mysql

重要參數說明:

 --name mysql

指定容器名稱爲 mysql;

-p 3307:3306

指定映射端口 將宿主機端口3307映射到容器3306端口;

-v /mysql_data:/var/lib/mysql

映射數據庫存放位置。將宿主機的目錄「/mysql_data」映射到容器的「/var/lib/mysql」目錄;這是由於默認狀況下數據庫的數據庫文件和日誌文件都會存放於容器的AUFS文件層,這不只不使得容器變得愈來愈臃腫,不便於遷移、備份等管理,並且數據庫的性能也會受到影響。所以建議掛載到宿主機的目錄到容器內。

查看本地的mysql_data是否生成容器內的數據庫:

[root@localhost /]# ll /mysql_data/
總用量 188452
-rw-r----- 1 systemd-bus-proxy ssh_keys       56 8月  20 22:25 auto.cnf
-rw-r----- 1 systemd-bus-proxy ssh_keys     1329 8月  20 22:25 ib_buffer_pool
-rw-r----- 1 systemd-bus-proxy ssh_keys 79691776 8月  20 22:25 ibdata1
-rw-r----- 1 systemd-bus-proxy ssh_keys 50331648 8月  20 22:25 ib_logfile0
-rw-r----- 1 systemd-bus-proxy ssh_keys 50331648 8月  20 22:25 ib_logfile1
-rw-r----- 1 systemd-bus-proxy ssh_keys 12582912 8月  20 22:25 ibtmp1
drwxr-x--- 2 systemd-bus-proxy ssh_keys     4096 8月  20 22:25 mysql
drwxr-x--- 2 systemd-bus-proxy ssh_keys     8192 8月  20 22:25 performance_schema
drwxr-x--- 2 systemd-bus-proxy ssh_keys     8192 8月  20 22:25 sys
drwxr-x--- 2 systemd-bus-proxy ssh_keys       19 8月  20 22:25 testDb
[root@localhost /]#

已經生成相關的文件和默認數據庫,同時也新建了"testDb"數據庫.

測試方案一:

在宿主機上經過端口訪問容器中的mysql服務

[root@localhost /]# yum -y install mysql

測試登陸:

[root@localhost mysql_data]# mysql -u root -p -h 127.0.0.1 -P 3307
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.13 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>

測試方案二:

本身本地利用mysql 鏈接工具(eg:Navicat 等)進行鏈接,注意映射出來的真實端口不必定是3306就行了。

須要注意的是:宿主機上的UID和GID是999。這是容器裏用戶mysql的UID和GID。千萬別進行權限變動,不然容器對這個目錄進行讀寫就會出現問題。若是以爲不舒服,能夠在本地新建一個mysql_docker的用戶指定UID和GID是999。

(這個注意本人沒有落實驗證,若是描寫信息有錯,還望指出)

 

3、進入到新生成的容器 (名爲mysql的容器)

使用exec進入容器,同時進行相關操做: 

[root@localhost /]# docker exec -it mysql /bin/bash

查看進程:

root@492ffa26d865:/# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mysql         1  0.2  9.7 1262696 182200 ?      Ssl  14:52   0:00 mysqld
root        127  0.2  0.1  20216  1884 ?        Ss   14:57   0:00 /bin/bash
root        133  0.0  0.0  17492  1148 ?        R+   14:58   0:00 ps -aux

查看數據庫所在的文件夾:

root@492ffa26d865:/# ls -l /var/lib/mysql/
total 188452
-rw-r----- 1 mysql mysql       56 Aug 20 14:52 auto.cnf
-rw-r----- 1 mysql mysql     1329 Aug 20 14:52 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Aug 20 14:52 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Aug 20 14:52 ib_logfile1
-rw-r----- 1 mysql mysql 79691776 Aug 20 14:52 ibdata1
-rw-r----- 1 mysql mysql 12582912 Aug 20 14:52 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Aug 20 14:52 mysql
drwxr-x--- 2 mysql mysql     8192 Aug 20 14:52 performance_schema
drwxr-x--- 2 mysql mysql     8192 Aug 20 14:52 sys
drwxr-x--- 2 mysql mysql       19 Aug 20 14:52 testDb

進入mysql:

root@492ffa26d865:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.13 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>

 

4、修改容器中mysql的配置文件 

默認鏡像中並無安裝vi或者vim,須要手工安裝

root@492ffa26d865:/# apt-get update && apt-get -yq install vim

而後就可使用vim 來修改mysql的配置文件:

root@492ffa26d865:/# vim /etc/mysql/my.cnf

vim編輯器在此不作詳述。

若是已經有一個比較成熟的my.cnf的配置方案,能夠在宿主機上新建一個文件夾將已經設置好的my.cnf和conf.d這二個文件放到裏面,

而後在新建容器的時候,直接使用參數」-v」 將這個文件夾映射到容器的」/etc/mysql」目錄上便可。

The End 

相關文章
相關標籤/搜索