拉取ubuntu镜像
参考前一篇博客Docker 入门(一) ubuntu 镜像 安装 jdk1.8
安装mysql
- 进入容器后执行更新
apt-get update
- 安装mysql
apt-get install mysql-server
# 提示×××(Y\N) 的时候 输入 Y 回车
- 启动mysql 服务
service mysql start
- 设置密码
# 安装vim
apt-get install -y vim
# 安装完毕后执行
vim /etc/mysql/debian.cnf
# 复制文件中的密码后执行
mysql -u debian-sys-maint -p
# 黏贴复制的密码,进入mysql 后执行
use mysql;
#显示user表中的列
show fields from user; // 或者(describe user;)
# authentication_string这列就是密码(注:以前的版本这个字段是password,如果是password下面的操作将authentication_string替换成password即可)
update mysql.user set authentication_string=password('123456') where user='root'
# 刷新
flush privileges;
# 退出
quit;
# 设置目录
usermod -d /var/lib/mysql/ mysql
# 重启服务
service mysql restart
- 修改字符集utf8,设置忽略表明大小写
# 编辑 mysql.cnf
vim /etc/mysql/mysql.cnf
# 增加或修改配置如下
=================== start ===================
[client]
default-character-set=utf8
[mysqld]
lower_case_table_names=1
collation-server = utf8_unicode_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
# 设置外部访问
bind-address = 0.0.0.0
=================== end ===================
#保存 摁ESC
:wq
# 重启mysql 进入 mysql
show variables like "char%";
# 显示结果为说明配置成功
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
- 保存 镜像
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# OPTIONS说明:
# -a :提交的镜像作者;
# -c :使用Dockerfile指令来创建镜像;
# -m :提交时的说明文字;
# -p :在commit时,将容器暂停。
docker commit -a "xiyeming" -m "this is mysql5.7" 651a8541a47d(你的容器ID) myubuntu:v1(z自定义容器名称和标签)
- 启动docker 映射端口
docker run -d -it -p 8080:3306 ubuntu-jkd1.8-mysql5.7:latest /bin/bash
# 然后进入容器启动mysql 就可以在宿主机通过navicat 访问了(8080 映射的docker3306端口)
- mysql挂载目录到宿主机(也可以保存在容器,就不用设置此步骤,弊端是容器会越来越大添加链接描述)
在宿主机创建目录并创建mysql配置文件my.cnf
mkdir /home/data/mysql56/data #创建存放数据目录
mkdir /home/data/mysql56/conf #创建存放配置目录
cd /home/data/mysql56/conf
touch my.cnf #创建mysql配置文件my.cnf
vi my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
3.执行命令
docker run -p 3307:3306 --restart=always --privileged=true --name mysql57 -v /home/data/mysql57/conf:/etc/mysql/conf.d -v /home/data/mysql57/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hm12345 -d mysql:5.7
注释:
1)-p 端口映射,格式为:主机(宿主)端口:容器端口
2)--restart=always 设置随服务启动而启动容器
3)--name 命名容器名称
4)-v 设置挂载点,格式为:主机(宿主)目录:容器目录
5)-e 设置环境变量
6)-d 后台运行容器,并返回容器ID
7)--privileged=true 使用该参数,container内的root拥有真正的root权限
8)对于已经运行但没设置随docker服务的启动而启动容器的可以执行如下命令
docker update --restart=always 容器名
- 启动失败解决方案(Fatal error: Can’t open and lock privilege tables: Table storage engine for ‘user’ doesn’t have this option.)
#查看异常日志
vim + /var/log/mysql/error.log
# 如果 是 (Fatal error: Can't open and lock privilege tables: Table storage engine for '××' doesn't have this option.)
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld
# 启动mysql
service mysql start