在CentOS7.4下Docker安装mysql

查看官网说明https://hub.docker.com/r/mysql/mysql-server/

一.    手动安装和配置mysql(使用putty工具连接虚拟机中的CentOS7.4)

A.下载镜像(下载前注意看我上篇博客中设置镜像服务器地址,否则下载很慢或可能失败)
输入命令systemctl start docker确保docker服务已启动。
输入命令docker pull mysql/mysql-server:5.7.21来下载指定版本的mysql优化版镜像。
输入命令docker images来查看所有镜像。
B.持久数据和配置更改和初始化脚本
Docker容器如果被删除或者损坏了,那么数据和配置就没拉。
查看官方说明https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-more-topics.html
官网文章说有两种方法保存数据和配置。其中一种方法是在运行容器时绑定容器之外的主机目录和配置文件路径。这样即时容器被删除但容器之外的文件还在。
以下这些文字直接引用的官方的:
下面命令将创建一个MySQL社区服务器容器并绑定数据目录和服务器配置文件和初始化脚本:
docker run --name=mysql1 \
--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
--mount type=bind,src=/path-on-host-machine/scripts,dst=/docker-entrypoint-initdb.d \
-d mysql/mysql-server:tag
该命令使:
B1.主机的 path-on-host-machine/my.cnf文件绑定到/etc/my.cnf(容器内的服务器配置文件)
B2主机的path-on-host-machine/datadir目录 绑定到/var/lib/mysql(容器内的数据目录)。
B3.主机的path-on-host-machine/script目录绑定到/docker-entrypoint-initdb.d目录下。(在数据库创建后将立即执行script目录下的脚本)
绑定安装必须满足以下条件:
数据目录 path-on-host-machine/datadir 必须已经存在。要进行服务器初始化,目录必须为空。
配置文件 path-on-host-machine/my.cnf 必须已经存在,并且必须包含使用用户启动服务器的规范:
[mysqld]
user=mysql

大概了解了这些说明后,就开始试试吧。

输入cd / 进入根目录。
输入 ls 查看根目录文件列表。
输入mkdir -p /mydocker/mysql 一次性在根目录下面创建好mydocker和子目录mysql两个文件夹。(mkdir -p或者--parents 若路径中的某些目录尚不存在,将自动创建不存在的目录,即一次可以建立多个目录)
输入cd /mydocker/mysql进入mysql目录。
输入mkdir config创建config目录,输入mkdir data创建data目录。
输入cd config进入config 目录。
输入vi my.cnf创建my.cnf文件。
输入i进入编辑模式,输入如下内容:
[mysqld]
user=mysql
也还可以接着输入如下内容设置字符编码(可防止中文乱码问题等)
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
(--引用自百度知道:MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思。专门用来兼容四字节的unicode。utf8mb4是utf8的超集。utf8应付日常使用完全没有问题,那为什么还要使用utf8mb4呢?Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上)和一些不常用的汉字,以及任何新增的 Unicode 字符等等,无法使用MySQL原有的 utf8字符集存储)

按Esc键退出编辑模式,然后输入:wq保存并退出。

输入cat my.cnf再检查下这个文件。

输入cd /mydocker/mysql 进入mysql目录。
输入mkdir scripts 在mysq目录下面创建好scripts文件夹。
输入cd scripts 进入script目录。
输入vi abc.sql创建abc.sql脚本。
输入i进入编辑模式,输入如下内容给abc这个用户授权(最后有个分号):
grant all privileges on *.* to 'abc'@'%' with grant option;
按Esc键退出编辑模式,然后输入:wq保存并退出。

C.mysql环境变量
在docker中启动mysql镜像的实例时可使用 –e或—env来设置环境变量。
部分环境变量的说明如下:
MYSQL_RANDOM_ROOT_PASSWORD 默认为true,表示启动容器时会生成随机root帐户的密码
MYSQL_ONETIME_PASSWORD 默认为true,表示root帐户密码被设置为可过期。
MYSQL_USER 初始化一个新用户。
MYSQL_PASSWORD 初始化新用户的密码。
MYSQL_ROOT_PASSWORD 初始化root帐户的密码。

输入如下命令来启动mysql镜像实例(注意斜杠后面不要有空格,斜杠前得有一个空格)
 docker run --name=mysql01 \
-e MYSQL_USER="abc" \
-e MYSQL_PASSWORD="abc123456" \
-e MYSQL_ROOT_PASSWORD="abc123456" \
--mount type=bind,src=/mydocker/mysql/config/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/mydocker/mysql/data,dst=/var/lib/mysql \
--mount type=bind,src=/mydocker/mysql/scripts,dst=/docker-entrypoint-initdb.d \
-d -p 3306:3306 mysql/mysql-server:5.7.21
过一会,输入docker ps 查看正在运行所有容器实例,如果实例mysql01的STATUS为healthy说明启动完成,starting说明还在启动中,过会再输入docker ps查看。
启动完成后输入命令docker exec -it mysql01 bash进入容器内。
输入mysql -uabc –p连接myql,再输入密码abc123456回车。
输入use mysql;注意有分号。
输入select user,host from user;查看mysql的用户信息。可看到有abc用户了。
输入show variables like '%char%';可看到在my.cnf设置的字符编吗也成功了。
输入exit;再输入exit;退出容器回到CentOS中。
输入cd /mydocker/mysql/data进入之前创建的data目录。

输入ls 可看到mysql的数据文件了。

开启防火墙服务(一般默认是开启的)
systemctl start firewalld.service

开放CentOS7.4的3306端口(--permanent表示永久有效,不写则重启系统失效,这里我不写)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
输入ifconfig查看IP地址,注意不是docker0:这个节点里的IP地址。

可以在我的Win10系统里用Navicat工具来连接虚拟机CentOS7.4中的Docker容器中的mysql了,如下图


备注
强制删除一个镜像:docker rmi –f $imageID
显示实例ip:docker inspect --format='{{.NetworkSettings.IPAddress}}' $INSTANCE_ID

获取配置信息:docker inspect --format='{{json .config}}' $INSTANCE_ID

二.    通过docker-compose自动安装和配置mysql(推荐)
先清理前面手动安装的mysql(使用putty工具连接虚拟机中的CentOS7.4)
输入docker stop mysql01停止容器。
输入docker rm mysql01删除容器。
输入docker rmi mysql/mysql-server:5.7.21删除镜像。
输入docker images查看所剩的镜像。
输入cd /回到根目录。
输入rm –rf /mydocker删除此目录。(-r 就是向下递归,不管有多少级目录,-f 就是直接强行删除,不作任何提示)

清理完毕后,在本地(例如我的Win10系统中)直接建好上面提到的目录mydocker等和相关文件。
然后进入mydocker/mysql目录新建一个docker-compose.yml的文件,输入以下代码:
version: '3'
services:
  mysql:
    container_name: 'mysql01'
    image: mysql/mysql-server:5.7.21
    restart: always
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: abc123456
      MYSQL_USER: abc
      MYSQL_PASSWORD: abc123456
    volumes:
      - /mydocker/mysql/scripts:/docker-entrypoint-initdb.d
      - /mydocker/mysql/config/my.cnf:/etc/my.cnf
      - /mydocker/mysql/data:/var/lib/mysql
接着可使用WinSCP工具将本地目录mydocker直接上传到虚拟机中的CentOS中去。
上传完成后,继续使用putty来完成操作。

查看官网docker-compose安装说明https://docs.docker.com/compose/install
1.运行此命令下载1.20版本的Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2.对二进制文件应用可执行权限
chmod +x /usr/local/bin/docker-compose
3.测试安装
 docker-compose --version

输入ls来查看上传的文件夹和文件,可看到mydocker。
输入cd /mydocker/mysql进入目录。
输入docker-compose up –d执行目录中的docker-compose.yml文件。
稍等片刻,安装完成。
输入docker ps查看正在运行的容器,可以看到有mysql01了。
输入ifconfig查看IP地址。
在Win10中使用Navicat工具并用查到的IP地址连接上去。
也可用手动步骤中的docker exec -it mysql01 bash进入容器内进行相关操作验证安装和配置。

猜你喜欢

转载自blog.csdn.net/junshangshui/article/details/79672966