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


詳解使用DockerHub官方的mysql鏡像生成容器
 
  • 發表於 10個月前
  •  
  • 閱讀 1506
  •  
  • 收藏 32
  •  
  • 點贊 1
  •  
  • 評論 0
摘要: 詳解使用DockerHub官方的mysql鏡像生成容器 一、下載官方的mysql鏡像; 二、生成容器 ; 三、進入到新生成的容器; 四、修改容器中mysql的配置文件 。

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

我的需求:利用docker 鏡像快速建立一個mysql容器。

於是我去找度娘,谷哥,看了好多以官方centos鏡像為基礎,制作基於centos的mysql鏡像,但是制作后發現鏡像大小已經超過1G,對於一般的docker鏡像來說太臃腫了。

自己私下想:不至於吧,mysql的鏡像這么大?然后去倉庫看了下

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

言歸正傳 ->

  我自己隱約覺得,用官方的就好了,因為這已經暫時滿足我的需求了。其他人自己制作mysql鏡像有他們的特殊需求吧!  所以我就先使用官方的了! 

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

一、下載官方的mysql鏡像

[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

 

二、生成容器 

生成容器時,調用的啟動腳本是/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。

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

 

三、進入到新生成的容器 (名為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>

 

四、修改容器中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 


免責聲明!

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



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