文档章节

详解使用DockerHub官方的mysql镜像生成容器

yope
 yope
发布于 2016/08/20 23:52
字数 1601
阅读 2365
收藏 32

写在前面:看到网上关于利用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 

© 著作权归作者所有

yope
粉丝 15
博文 40
码字总数 34264
作品 0
厦门
程序员
私信 提问
详解如何使用Docker Hub官方的MySQL镜像生成容器

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 一直在尝试以官方CentOS镜像...

李金泽
2018/03/13
0
0
快速零基础入门 Docker

Docker是什么? Docker 是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用 Python 开发网站后台,开发测试完成后...

VincentZ
2017/12/11
0
0
Docker基本概念与实践(一)-镜像

Docker镜像 拉取镜像前准备工作 为了方便以后的管理,新增docker用户并赋予执行docker命令的权限 国内的服务器由于拉取镜像速度感人QAQ,因此博主采用阿里云作为加速地址(也可使用网易蜂巢等)...

garwer
2018/04/23
0
0
用Docker重新定义Java虚拟化部署

Docker是一个用于构建、分发、运行分布式应用的开源平台。Docker化的应用可以在开发者的电脑上运行,并能够被部署到生产的云环境中,Docker正以前所未有的方式在持续集成和持续部署中发挥着巨...

dockerer
2015/12/11
1K
0
Docker搭建mysql容器

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 转载自:http://blog.csdn....

李金泽
2018/03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

02.日志系统:一条SQL更新语句是如何执行的?

我们还是从一个表的一条更新语句说起,我们创建下面一张表: create table T(ID int primary key, c int); 如果要将ID=2这一行c的值加1,SQL可以这么写: update T set c=c+1 where ID=2; 前...

scgaopan
今天
7
0
【五分钟系列】掌握vscode调试技巧

调试前端js 准备一个前端项目 index.html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1......

aoping
今天
6
0
PhotoShop 高级应用:USM锐化/S锐化/防抖

、 高反差锐化+混合模式:叠加模式 【将更多的边缘细节添加到图像中】

东方墨天
今天
7
0
Python数据可视化之matplotlib

常用模块导入 import numpy as npimport matplotlibimport matplotlib.mlab as mlabimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmfrom mpl_toolkits.mplot3d i......

松鼠大帝
昨天
5
0
我用Bash编写了一个扫雷游戏

我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法。比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习。 我在...

老孟的Linux私房菜
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部