docker版mysql的使用和配置(2)——docker版mysql的dockerfile

既然目标是定制满足自己需要的dockerfile,那么就来看看mysql的dockerfile长什么样。

dockerfile选择的是 https://github.com/mysql/mysql-docker/blob/mysql-server/5.7/Dockerfile

原因是这个比较短(捂脸)

关于dockerfile中的各种命令,可以查看官方文档,或者参考这篇: https://www.cnblogs.com/jie-fang/p/7927643.html

 1 # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
 2 #
 3 # This program is free software; you can redistribute it and/or modify
 4 # it under the terms of the GNU General Public License as published by
 5 # the Free Software Foundation; version 2 of the License.
 6 #
 7 # This program is distributed in the hope that it will be useful,
 8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 # GNU General Public License for more details.
11 #
12 # You should have received a copy of the GNU General Public License
13 # along with this program; if not, write to the Free Software
14 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
15 FROM oraclelinux:7-slim
16
17 ARG MYSQL_SERVER_PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm
18 ARG MYSQL_SHELL_PACKAGE_URL=https://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-shell-8.0.12-1.el7.x86_64.rpm
19
20 # Install server
21 RUN rpmkeys --import https://repo.mysql.com/RPM-GPG-KEY-mysql \
22   && yum install -y $MYSQL_SERVER_PACKAGE_URL $MYSQL_SHELL_PACKAGE_URL libpwquality 23   && yum clean all 24   && mkdir /docker-entrypoint-initdb.d
25
26 VOLUME /var/lib/mysql
27
28 COPY docker-entrypoint.sh /entrypoint.sh
29 COPY healthcheck.sh /healthcheck.sh
30 ENTRYPOINT ["/entrypoint.sh"]
31 HEALTHCHECK CMD /healthcheck.sh
32 EXPOSE 3306 33060
33 CMD ["mysqld"]

咱们一行一行看。

FROM oraclelinux:7-slim

15行,这里是oracle自己的linux,不过看后面使用的是yum,我们自己配置的时候大概可以用centos代替。

ARG MYSQL_SERVER_PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm
ARG MYSQL_SHELL_PACKAGE_URL=https://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-shell-8.0.12-1.el7.x86_64.rpm

17和18两行,定义了两个变量用来指向接下来需要用的rpm包的地址。

RUN rpmkeys --import https://repo.mysql.com/RPM-GPG-KEY-mysql \
  && yum install -y $MYSQL_SERVER_PACKAGE_URL $MYSQL_SHELL_PACKAGE_URL libpwquality   && yum clean all   && mkdir /docker-entrypoint-initdb.d

21~24行,这里安装了mysql包。如果我们进行简化的话,rpmkeys和libpwquality都可以省略掉。

VOLUME /var/lib/mysql

COPY docker-entrypoint.sh /entrypoint.sh
COPY healthcheck.sh /healthcheck.sh
ENTRYPOINT ["/entrypoint.sh"]
HEALTHCHECK CMD /healthcheck.sh

26~31行,这里复制了需要的脚本文件,重点是entrypoint.sh。healthcheck如果进行简化的话也可以省略掉。

EXPOSE 3306 33060

32行规定了向主机暴露的端口号。如果不需要的话可以省略。另外注意,并不是expose了就可以用,还是需要在run的时候进行端口映射。

CMD ["mysqld"]

最后33行是dockerfile执行的启动命令(的参数)。

根据上面的分析,我们自己的dockerfile的mysql部分,大概应该是这样的:

FROM centos:7.2.1511

ARG MYSQL_SERVER_PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm
ARG MYSQL_SHELL_PACKAGE_URL=https://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-shell-8.0.12-1.el7.x86_64.rpm
RUN yum install -y --nogpgcheck $MYSQL_SERVER_PACKAGE_URL $MYSQL_SHELL_PACKAGE_URL
COPY docker-entrypoint.sh /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
CMD ["mysqld"]

然后就可以先试试看了:

shell> docker build -t mysql_basic .
Sending build context to Docker daemon  10.24kB
Step 1/7 : FROM centos:7.2.1511
 ---> ddc0fb7d7a72
Step 2/7 : ARG MYSQL_SERVER_PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm
 ---> Running in 3ff12f470551
Removing intermediate container 3ff12f470551
 ---> a544211d9806
Step 3/7 : ARG MYSQL_SHELL_PACKAGE_URL=https://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-shell-8.0.12-1.el7.x86_64.rpm
 ---> Running in fa793935528a
Removing intermediate container fa793935528a
 ---> ecc70ab46823
Step 4/7 : RUN yum install -y --nogpgcheck $MYSQL_SERVER_PACKAGE_URL $MYSQL_SHELL_PACKAGE_URL
 ---> Running in 6f3dd9f850f2
Loaded plugins: fastestmirror
Examining /var/tmp/yum-root-2ratBJ/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm: mysql-community-server-minimal-5.7.23-1.el7.x86_64
Marking /var/tmp/yum-root-2ratBJ/mysql-community-server-minimal-5.7.23-1.el7.x86_64.rpm to be installed
Examining /var/tmp/yum-root-2ratBJ/mysql-shell-8.0.12-1.el7.x86_64.rpm: mysql-shell-8.0.12-1.el7.x86_64
Marking /var/tmp/yum-root-2ratBJ/mysql-shell-8.0.12-1.el7.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package mysql-community-server-minimal.x86_64 0:5.7.23-1.el7 will be installed
--> Processing Dependency: libaio.so.1(LIBAIO_0.1)(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64
Determining fastest mirrors
 * base: mirror.hmc.edu
 * extras: mirror.nodesdirect.com
 * updates: mirror.teklinks.com
--> Processing Dependency: libaio.so.1(LIBAIO_0.4)(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64
--> Processing Dependency: libnuma.so.1(libnuma_1.1)(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64
--> Processing Dependency: libnuma.so.1(libnuma_1.2)(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64
--> Processing Dependency: libaio.so.1()(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64
--> Processing Dependency: libnuma.so.1()(64bit) for package: mysql-community-server-minimal-5.7.23-1.el7.x86_64
---> Package mysql-shell.x86_64 0:8.0.12-1.el7 will be installed
--> Running transaction check
---> Package libaio.x86_64 0:0.3.109-13.el7 will be installed
---> Package numactl-libs.x86_64 0:2.0.9-7.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch   Version         Repository                          Size
================================================================================
Installing:
 mysql-community-server-minimal
                x86_64 5.7.23-1.el7    /mysql-community-server-minimal-5.7.23-1.el7.x86_64
                                                                           67 M
 mysql-shell    x86_64 8.0.12-1.el7    /mysql-shell-8.0.12-1.el7.x86_64    25 M
Installing for dependencies:
 libaio         x86_64 0.3.109-13.el7  base                                24 k
 numactl-libs   x86_64 2.0.9-7.el7     base                                29 k

Transaction Summary
================================================================================
Install  2 Packages (+2 Dependent packages)

Total size: 92 M
Total download size: 54 k
Installed size: 92 M
Downloading packages:
--------------------------------------------------------------------------------
Total                                               33 kB/s |  54 kB  00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : numactl-libs-2.0.9-7.el7.x86_64                              1/4
  Installing : libaio-0.3.109-13.el7.x86_64                                 2/4
  Installing : mysql-community-server-minimal-5.7.23-1.el7.x86_64           3/4
  Installing : mysql-shell-8.0.12-1.el7.x86_64                              4/4
  Verifying  : mysql-community-server-minimal-5.7.23-1.el7.x86_64           1/4
  Verifying  : libaio-0.3.109-13.el7.x86_64                                 2/4
  Verifying  : numactl-libs-2.0.9-7.el7.x86_64                              3/4
  Verifying  : mysql-shell-8.0.12-1.el7.x86_64                              4/4 

Installed:
  mysql-community-server-minimal.x86_64 0:5.7.23-1.el7
  mysql-shell.x86_64 0:8.0.12-1.el7                                             

Dependency Installed:
  libaio.x86_64 0:0.3.109-13.el7        numactl-libs.x86_64 0:2.0.9-7.el7       

Complete!
Removing intermediate container 6f3dd9f850f2
 ---> e118192698af
Step 5/7 : COPY docker-entrypoint.sh /entrypoint.sh
 ---> 1aab375ae211
Step 6/7 : ENTRYPOINT ["/entrypoint.sh"]
 ---> Running in 4c99517c3da0
Removing intermediate container 4c99517c3da0
 ---> 54f44871daeb
Step 7/7 : CMD ["mysqld"]
 ---> Running in f534cb3d8f0e
Removing intermediate container f534cb3d8f0e
 ---> dc0ae9f1dc87
Successfully built dc0ae9f1dc87
Successfully tagged mysql_basic:latest

看看image

shell> docker images
REPOSITORY                                              TAG                 IMAGE ID            CREATED              SIZE
mysql_basic                                             latest              dc0ae9f1dc87        About a minute ago   400MB

跑起来看看

shell> docker run -d --name mysqlbasic mysql_basic
shell> docker ps
CONTAINER ID        IMAGE                                                           COMMAND                  CREATED             STATUS              PORTS               NAMES
a7efdfdaa91d        mysql_basic                                                     "/entrypoint.sh mysq…"   5 seconds ago       Up 3 seconds                            mysqlbasic

再看看docker里面的情况

docker exec -it mysqlbasic bash
[[email protected] /]# mysql
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)

哈哈access denied。上一篇说过的,第一次密码是随机生成的。那么我们来拿密码试试。

shell> docker logs mysqlbasic
[Entrypoint] MySQL Docker Image 5.7.23-1.1.7
[Entrypoint] No password option specified for new database.
[Entrypoint]   A random onetime password will be generated.
[Entrypoint] Initializing database
[Entrypoint] Database initialized
Warning: Unable to load ‘/usr/share/zoneinfo/iso3166.tab‘ as time zone. Skipping it.
Warning: Unable to load ‘/usr/share/zoneinfo/zone.tab‘ as time zone. Skipping it.
[Entrypoint] GENERATED ROOT PASSWORD: 0D0horOvZOHufUpuvAr0L]UkOBX3

[Entrypoint] ignoring /docker-entrypoint-initdb.d/*

[Entrypoint] Server shut down
[Entrypoint] Setting root user as expired. Password will need to be changed before database can be used.

[Entrypoint] MySQL init process done. Ready for start up.

[Entrypoint] Starting MySQL 5.7.23-1.1.7

[[email protected]91d /]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.23

Copyright (c) 2000, 2018, 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> 

成功的登录了root账号。这样,我们就把dockerfile里关键的部分提取出来,并且可以正常的build和run了。

接下来的问题,我们不能每次都先找随机生成的密码,然后再登录。所以我们要把mysql的初始化和启动服务的过程搞清楚。这样才能根据自己的要求进行修改。

接下来是下一篇的内容了!

PS:其实这种方法是有其本身的问题的……比如,很多时候,我们并不要把docker扔到后台运行,而是直接在前台运行一个bash。

那么我们来试试刚才build的image。

shell> docker run -it --name mysqlbasic mysql_basic /bin/bash
[Entrypoint] MySQL Docker Image 5.7.23-1.1.7
[[email protected] /]# mysql
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)

首先,我们和刚才用docker logs打出的log对比一下,发现这里Entrypoint只有一行。看来前后台的docker启动方式有一些不同。

那么这种不同导致了什么区别呢?尝试一下mysql。哎呀居然报了错误。

看来需要仔细研究一下entrypoint.sh到底干了什么。(就是下一篇的内容了!)

原文地址:https://www.cnblogs.com/wangzhao765/p/9533107.html

时间: 2024-10-08 07:23:34

docker版mysql的使用和配置(2)——docker版mysql的dockerfile的相关文章

MySQL多实例安装配置

MySQL多实例安装配置 一.基本概念 MySQL多实例就是,在一台机器上开启多个不同的服务端口(如:3306,3307,3308...),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的端口提供服务. MySQL可以共用一套安全程序,使用不同的my.cnf配置文件,启动程序,数据文件. 逻辑上是独立的,但是一个实例过载过高的时候会对其他造成影响. MySQL多实例的作用与问题: 1.有效利用服务器资源 2.节约服务器资源 3.资源互相抢占问题 当某个服务实现并发生很高的

Freeradius+mysql+daloradius简单安装配置

概述 之前说了Freeradius与AD结合进行802.1x认证方面的内容.本例则在之前实验配置的基础之上,将Freeradius与mysql.daloradius结合,实现可以通过web方式管理radius服务器,并通过数据库进行用户认证等信息的存储.本例只适合centos7环境下的freeradius3.0.x版本. 环境准备 1.      FreeRadius服务器,之前已经配置好的. 2.      组件apache.mariadb(mysql).daloradius等. 安装配置 1

mysql 5.5 安装配置方法图文教程

1.首先进入的是安装引导界面 2.然后进入的是类型选择界面,这里有3个类型:Typical(典型).Complete(完全).Custom(自定义).这里建议 选择"自定义"(Custom)安装,这样可以自定义选择MySQL的安装目录,然后点"Next"下一步,出现自定义安装界面,为了数据安全起见,不建议将MySQL安装系统盘C目录. 3.准备安装 4.安装完成之后会出现MySQL配置的引导界面 5.这里有个引导配置MySQL的选项(Luanch the MySQL

MySQL数据库的同步配置+MySql读写分离

使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3.将主服务器上的数据复制到从服务器上,保护数据免受意外的损失. 环境描述: 新企业要搭建架构为主从复制的mysql数据库. 主服务器(mysql-master):IP地址:192.168.48.128,mysql已安装,没有用户数据. 从服务器(mysql-slave):IP地址:192.168.48

mysql主从服务器的配置

使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3.将主服务器上的数据复制到从服务器上,保护数据免受意外的损失. 环境描述: 新企业要搭建架构为主从复制的mysql数据库. 主服务器(mysql-master):IP地址:192.168.48.128,mysql已安装,没有用户数据. 从服务器(mysql-slave):IP地址:192.168.48

docker版mysql的使用和配置(1)——docker的基本操作

最近实在是忙成狗,其他的内容等稍微闲一点了一起更新. 这篇主要是讲docker版的mysql的使用和配置信息.因为实习公司需要搞一个docker做测试环境用,还需要包括基本的依赖.最重要的是,因为这个docker是作为jenkins的slave使用的,所以有可能不能在启动的时候加参数.这就导致我得把docker版的mysql的整个使用和配置详细过一遍,看看是否有代替启动参数的设置方法. 文中涉及到的mysql的基本信息见以下链接: https://hub.docker.com/r/mysql/m

MySQL数据库学习笔记(一)----MySQL-5.6.21的安装和配置(setup版)

  [开发环境] 物理机版本:Win 7旗舰版(64位) MySQL版本:5.5.40MSI版(64位) 一.数据库类型: (1)关系数据库 (2)面向对象数据库 (3)XML数据库 现在的主流是关系型数据库. 二.数据库产品: 大型数据库有:Oracle.Sybase.DB2.SQL server 小型数据库有:MySQL.Access等 上面列举的数据库都是关系型数据库,只是Oracle中有一小部分是面向对象的.MySQL具有开源.免费等特性,适合中小型企业的开发. 三.关系型数据库的基本概

配置免安装版的mysql

1.下载免安装版的压缩文件之后,解压至一个目录,如:D:\mysql\mysql56 2.在解压后的根目录下有一个my-default.int,复制此文件至别的目录,重命名为my.ini. 2.1.    修改my.ini文件,具体内容如下所示: [client] port=3306 default-character-set=utf8 [mysqld] # These are commonly set, remove the # and set as required. basedir = D

Docker MySQL 启动和binlog配置修改

docker run -d --name mysql -p 3306:3306 --restart=always \ --privileged=tru -e MYSQL_ROOT_PASSWORD=root -v /home/mysql/data/:/var/lib/mysql/ \ -v/home/mysql/config/:/etc/mysql/mysql.conf.d --character-set-server=utf8mb4 --collation-server=utf8mb4_uni