3.实例(ubuntu创建mysql环境)

问题(2018-06-19补充)

  • 本文章的方法
    • 问题:docker容器每次启动时都会执行start_mysql.sh,重复创建数据库;
    • 解决:暂无
  • 运行基本mysql镜像后,在容器里面导入执行始化数据库脚本然后生成镜像
    • 问题:mysql容器数据存放目录/var/lib/mysql默认是宿主机器挂载,数据最终保存到了宿主机器,镜像中不能保存;
    • 解决:需要把宿主机器的数据目录和镜像一同保存处理;
  • 运行mysql基本镜像,然后通过mysql客户端执行初始化sql脚本;
    • 暂时的解决方法;

1.目标:搭建mysql环境

  • 使用mysql官方docker镜像(体积小);
  • 设置root远程连接,修改密码和utf-8字符集;
  • 执行初始化数据库脚本;

2.mysql官方docker镜像使用说明

  • docker run -e:指定环境参数,MySQL容器的环境参数:
    • MYSQL_ROOT_PASSWORD:设置root用户的密码;
    • MYSQL_DATABASE:运行时需要创建的数据库名称;
    • MYSQL_USER:运行时创建用户名,与MYSQL_PASSWORD一起使用;
    • MYSQL_PASSWORD:运行时创建用户名对应的密码,与MYSQL_USER一起使用;
    • MYSQL_ALLOW_EMPTY_PASSWORD:是否允许root用户的密码为空;
    • MYSQL_RANDOM_ROOT_PASSWORD:为root用户生成随机密码;
    • MYSQL_ONETIME_PASSWORD:设置root用户的密码必须在第一次登陆时修改;
    • MYSQL_ROOT_PASSWORD 和 MYSQL_RANDOM_ROOT_PASSWORD两者有且只有一个;
  • 说明,使用命令不能执行初始化数据库脚本,故采用后面的方法生成mysql镜像;

3.生成镜像(Dockerfile方式)

  • dockerfile

    • vim mysql_aiqa
      
      # 系统镜像mysql:5.7
      
      FROM mysql:5.7
      
      
      # 维护者
      
      MAINTAINER Pings 275598139@qq.com
      
      
      # mysql设置,utf-8字符集脚本
      
      COPY conf/mysql/my.cnf /etc/mysql/conf.d/my.cnf
      
      # my.cnf默认不全权限,mysql不允许,修改权限
      
      RUN chmod 644 /etc/mysql/conf.d/my.cnf
      
      # 数据库初始化脚本
      
      COPY conf/mysql/aiqa.sql /mysql/aiqa.sql
      
      # 设置root远程连接,修改密码
      
      COPY conf/mysql/privileges.sql /mysql/privileges.sql
      
      # 启动脚本
      
      COPY conf/start_mysql.sh /mysql/start_mysql.sh
      
      
      # 启动
      
      CMD ["/mysql/start_mysql.sh"]
  • 编译:docker build -t pings/mysql_aiqa -f mysql_aiqa .
  • 运行:docker run -p 3306:3306 pings/mysql_aiqa

4.启动脚本

  • vim start_mysql.sh
#!/bin/bash
set -e

#查看mysq状态
echo `service mysql status`

# 启动mysql
echo '1.启动mysql....'
service mysql start
sleep 3
echo `service mysql status`

# 导入数据
echo '2.开始导入数据....'
mysql < /mysql/aiqa.sql
echo '3.导入数据完毕....'
sleep 3
echo `service mysql status`

# 重设置密码
echo '4.开始修改密码....'
mysql < /mysql/privileges.sql
echo '5.修改密码完毕....'

echo 'mysql容器启动成功.....'

tail -f /dev/null

5.mysql配置

  • /etc/mysql/conf.d/目录自定义配置文件,设置utf-8字符集
  • vim my.cnf
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.  
#  
# This program is free software; you can redistribute it and/or modify  
# it under the terms of the GNU General Public License as published by  
# the Free Software Foundation; version 2 of the License.  
#  
# This program is distributed in the hope that it will be useful,  
# but WITHOUT ANY WARRANTY; without even the implied warranty of  
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
# GNU General Public License for more details.  
#  
# You should have received a copy of the GNU General Public License  
# along with this program; if not, write to the Free Software  
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA  


#  
# The MySQL  Server configuration file.  
#  
# For explanations see  
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html  


[mysql]  
default-character-set = utf8  


[mysql_safe]  
default-character-set = utf8  


[client]  
default-character-set = utf8  


[mysqld]  
pid-file      = /var/run/mysqld/mysqld.pid  
socket        = /var/run/mysqld/mysqld.sock  
datadir       = /var/lib/mysql  
#log-error    = /var/log/mysql/error.log  
# By default we only accept connections from localhost  
#bind-address = 127.0.0.1  
# Disabling symbolic-links is recommended to prevent assorted security risks  
symbolic-links=0  
init_connect  = 'SET NAMES utf8'  
character-set-server = utf8  
collation-server = utf8_unicode_ci  

6.导入数据

  • vim aiqa.sql
-- 创建数据库
create database tax_kbase default character set utf8 collate utf8_general_ci;
use tax_kbase;

CREATE TABLE `test`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
);

7.设置root远程连接,修改密码

  • vim privileges.sql
use mysql;
select host, user from user;

update user set host = '%' where user = 'root' and host = '127.0.0.1';
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

8.源码

https://github.com/pingszi/MyDockerfile.git -> aiqa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值