问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用DockerHub官方的mysql镜像生成容器

发布网友 发布时间:2022-04-24 21:26

我来回答

2个回答

懂视网 时间:2022-05-02 06:55

yope  
  • 发表于 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 

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

    标签:快速   use   inpu   blog   read   启动   ima   cloud   cat   

    热心网友 时间:2022-05-02 04:03

    推荐使用Dockerfile方式。
    服务的管理使用的是supervisord, 因为dockerfile里只会有一个cmd生效,如果我想通过ssh去管理容器还要有mysql服务的启动起来 cmd的方式就无法实现,当然容器不需要以sshd的方式去管理,这些也都是看自己怎么去使用,比如说我想备份容器里的数据 我完全可以使用 –volumes-from <容器name> , 重启使用 docker restart <容器id>, 我个人也是使用ssh习惯了 所以依赖的镜像把ssh服务栽进去了。
    # docker 版本:

    复制代码
    代码如下:
    [root@private_network mysql]# docker version

    Client version: 1.6.0-rc5
    Client API version: 1.18
    Go version (client): go1.4.2
    Git commit (client): fc4825d
    OS/Arch (client): linux/amd64
    Server version: 1.6.0-rc5
    Server API version: 1.18
    Go version (server): go1.4.2
    Git commit (server): fc4825d
    OS/Arch (server): linux/amd64[/code]
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    通达信主力指标公式汇总(2023版附源码) 有什么类似地下城与勇士的手机游戏 有没有类似于DNF的游戏 苹果手机类似地下城的游戏 有什么类似地下城与勇士的手机游戏 我的系统是WIN732,为什么玩不了光晕2,一点开就弹一个对话框出来说:无法... 玩诛仙电脑配置诛仙3要求电脑配置 ...永磁为什么要跌啊?东方财富金力永磁股吧?金力永磁股票最初..._百度... 怎么找回注销的微信号 如果把手机号码和微信号同时销户后期还能找回微信号吗? 仓储与库存有什么区别? 仓位和库位的区别 30克等于多少勺 dockerphp导入文件到数据库 火锅汤勺一勺是多少克 30克白凉粉有多少勺子 一勺30g的勺子是多大 商标名字能不能用“+”“-”等符号? 什么是商标标记? 商标符号表示什么字母? 注册商标符号都有哪些?!!! 版权符号与商标符号分别是什么样的?它们之间有何区别? 商标符号表示什么字母 pdf的大小怎么改小 QQ邮箱能拒收陌生人邮件吗? 月工作总结怎么写 范文3篇2016 QQ邮箱被对方拒收或者拉黑了,还能收到对方发送的自动回复吗? QQ邮箱被对方拒收或者拉黑了,还能收到对方的自动回复吗? 问下,别人若把QQ邮箱设置了“拒收”,那么我发过去的邮件收不到会有提示吗? QQ邮箱如果拒收对方邮件,对方发邮件的时候还会显示投递成功吗? 请问QQ邮箱被拒收了对方就一定不能看见了吗? 月工作总结模板 30克蛋白粉是多少勺 就是自己家里的普通陶瓷勺子 三十克牛奶有多少勺 docker是怎么生成镜像的 30克有多少 东风风神AX7马赫版正式上市 售价9.59万元起 我已经搭好一个python的环境了,怎么导出成docker image 这个勺子一勺大概是多少克? docker save怎么解压缩 东风风神AX7马赫版正式上市 4款车型哪款值得买? 30克白糖相当于多少勺一次性汤匙 8.99万起,2021款风神AX7/风神AX7 PRO上市 这样大小的勺子,30克燕麦大概几勺? 售8.99-14.39万元,东风风神AX7 2021款和AX7 PRO正式上市 30克燕麦片有多少? 硬核升级,东风风神AX7 PRO/2021款AX7上市售8.99万元起 33克奶粉大概几勺,勺子多大 东风风神新款AX7/AX7 PRO上市 8.99-14.39万元 30克是多少? 新款风神AX7家族上市 售价8.99万起 采用全新标识 东风风神新款AX7/AX7 Pro上市 售8.99万元起