docker容器定制mysql镜像_详解使用DockerHub官方的mysql镜像生成容器

写在前面:看到网上关于利用DockerHub官方的mysql镜像生成容器此类的文档比较少,故结合自身实践分享给大家,还望多多指教。

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

于是我去找度娘,谷哥,看了好多以官方centos镜像为基础,制作基于centos的mysql镜像,但是制作后发现镜像大小已经超过1G,对于一般的docker镜像来说太臃肿了。

自己私下想:不至于吧,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一个开放源代码的虚拟化平台,能够以容器的形式打包和分发应用程序。MySQL是一种流行的开源关系型数据库管理系统。使用Docker部署MySQL可以极大简化安装和配置的过程,并且能够实现数据的持久化。 首先,我们需要在Docker上搜索并选择适合的MySQL镜像。可以通过运行`docker search mysql`命令来查找可用的MySQL镜像。选择合适的镜像后,可以通过`docker pull <镜像名称>`来下载镜像,例如`docker pull mysql:latest`。 下载完成后,我们可以运行以下命令来创建一个MySQL容器: ``` docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=your_password -d mysql:latest ``` 这个命令将会创建一个名为mysql容器,并将MySQL服务的默认端口3306映射到宿主机的3306端口。同样,我们可以设置一个root密码,让MySQL服务有一个基本的访问控制。 这样,MySQL容器就成功运行起来了。我们可以通过`docker ps`命令来查看正在运行的容器。接下来,我们可以使用MySQL客户端连接到该容器。可以通过以下命令登录到MySQL容器内部的MySQL服务: ``` docker exec -it mysql mysql -uroot -p ``` 然后,我们可以在MySQL容器内部使用标准的MySQL命令来管理和操作数据库。 要实现数据的持久化,我们可以将MySQL容器内部的数据目录和宿主机的目录进行挂载。可以使用`-v`参数来指定目录的挂载点。例如: ``` docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=your_password -v /path/to/mysql/data:/var/lib/mysql -d mysql:latest ``` 这将会将MySQL容器内部的`/var/lib/mysql`目录与宿主机上的`/path/to/mysql/data`目录进行挂载,从而实现数据的持久化。 通过以上步骤,我们可以使用Docker部署MySQL,并且实现数据的持久化。这样,我们可以方便地在不同的环境之间快速部署和迁移MySQL数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值