阿里云Linux系统搭建Docker容器部署MySQL【亲测】

一、安装部署Docker容器

第一步:查看系统要求删除旧版本要求 CentOS 系统的内核版本高于 3.10

#查看内核版本
uname -a
#删除旧版本
yum remove docker  docker-common docker-selinux docker-engine

第二步:安装所需依赖、设置Docker yum源

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 安装驱动依赖
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #设置docker镜像源

第三步:查看所有仓库中所有docker版本并安装

yum list docker-ce --showduplicates | sort -r # 可以查看所有仓库中所有docker版本,并选择特定的版本安装。
sudo yum install docker-ce # 安装 由于repo中默认只开启stable仓库,故这里安装的是最新稳xxxxx.centos如果要安装特定版本:
sudo yum install docker-ce-18.06.1.ce  

第四步:快捷键设置

[root@MrYu Download]# systemctl enable docker  设置为开机启动
[root@MrYu Download]# systemctl start docker   启动
[root@MrYu Download]# systemctl status docker  查看启动状态
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-09-01 12:16:50 CST; 3s ago
     Docs: https://docs.docker.com
 Main PID: 9967 (dockerd)
   Memory: 40.4M
   CGroup: /system.slice/docker.service
           └─9967 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock      
[root@MrYu Download]# docker version 查看版本

二、Docker下快速安装部署MySQL

第一步:下拉镜像、创建主宿机映射目录

docker pull mysql:5.7   # 下拉安装稳定5.7版本

[root@MrYu /]# docker images   #查看本地镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 718a6da099d8        3 weeks ago         448MB

mkdir -p /usr/local/docker/mysql/logs   #创建日志存储目录
mkdir -p /usr/local/docker/mysql/data   #创建数据存储目录
mkdir -p /usr/local/docker/mysql/conf   #创建配置目录

第二步:配置 /usr/local/docker/mysql/conf/my.cnf

vi /usr/local/docker/mysql/conf/my.cnf  # 添加以下内容
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock

[mysqld]
#mysql5.7以后的不兼容问题处理
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

#允许最大连接数
max_connections=200

#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8

#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M 

#设置时区
default-time_zone='+8:00'

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
# include all files from the config directory

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

第三步:启动容器(登录mysql是一样的)

# 初始化容器 注意修改password
docker run --name mysql -p 3306:3306 --privileged=true --restart=always -d -v /usr/local/docker/mysql/logs:/logs -v /usr/local/docker/mysql/data:/var/lib/mysql -v  /usr/local/docker/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=QINg0201$ mysql:5.7

docker ps -a    # 查看容器启动状态
docker exec -it  mysql  /bin/bash  # 进入容器

注意:登录mysql密码可跳过密码验证重新创建密码

(初始化容器后进行登录说密码不对报错如下、则忘记密码修改下)
[root@MrYu mysql]# docker run --name mysql -p 3306:3306 --privileged=true --restart=always -d -v /usr/local/docker/mysql/logs:/logs -v /usr/local/docker/mysql/data:/var/lib/mysql -v  /usr/local/docker/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=QINg0201$ mysql:5.7
3e655e926a600615852862caff50cdc6748af582363f142ffd68f22c2af4b7c6
[root@MrYu mysql]# docker exec -it  mysql  /bin/bash 
root@3e655e926a60:/# mysql -uroot -p QINg0201$
mysql: [Warning] skipping '!includedir /etc/mysql/conf.d/' directive as maximum includerecursion level was reached in file /etc/mysql/mysql.conf.d/mysqld.cnf at line 38!
mysql: [Warning] skipping '!includedir /etc/mysql/mysql.conf.d/' directive as maximum includerecursion level was reached in file /etc/mysql/mysql.conf.d/mysqld.cnf at line 39!
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

1、修改my.conf
[root@MrYu conf]# vi /usr/local/docker/mysql/conf/my.cnf 
#在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程: 
skip-grant-tables
2、再次进入容器、进入mysql
mysql> mysql
mysql> update user set password=password("QINg0201$") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
mysql> update mysql.user set authentication_string=password('QINg0201$') where user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 2  Changed: 0  Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
3、最后注释掉my.conf中的skip-grant-tables

最后:开放远程连接

允许所有用户可访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'QINg0201$' WITH GRANT OPTION;
允许指定Ip用户访问
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ip_xxx' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
允许指定Ip用户访问指定数据库
GRANT ALL PRIVILEGES ON db.* TO 'user'@'ip_xxx' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
别忘记执行刷新配置
FLUSH   PRIVILEGES;