问题(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"]
- vim mysql_aiqa
- 编译: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;