写在前面:看到网上关于利用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。less
1、下载官方的mysql镜像ssh
[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