[Java学习笔记]Docker安装MySql

参考文档:https://hub.docker.com/_/mysql/

一、Docker获取MySql镜像

下载镜像

$ sudo docker pull mysql:5.7   # 拉取 mysql 5.7
$ sudo docker pull mysql       # 拉取最新版mysql镜像

访问官网太慢报错

Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout

配置 Docker 镜像站
`该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
docker version >= 1.12
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
Success.
You need to restart docker to take effect: sudo systemctl restart docker

重启docker

$ sudo systemctl restart docker

查看是否安装成功

$ sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 d5cea958d330        35 hours ago        440MB

二、配置

将全部的配置文件和关联的文件夹统一放到/opt/docker-mysql

$ sudo mkdir -p /opt/docker-mysql/conf.d

转到刚创建的目录

$ cd /opt/docker-mysql/conf.d

创建配置文件config-file.cnf

$ sudo vi config-file.cnf

Linux下默认是区分的,设置表名不区分大小写。内容如下:

[mysqld]
# 表名不区分大小写
lower_case_table_names=1 
#server-id=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0
# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

三、启动

增加数据库文件夹

$ sudo mkdir -p /opt/docker-mysql/var/lib/mysql

建立目录树启动 -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录

$ sudo docker run --name mysql \
    --restart=always \
    -p 3306:3306 \
    -v /opt/docker-mysql/conf.d:/etc/mysql/conf.d \
    -v /opt/docker-mysql/logs:/var/log/mysql \
    -v /opt/docker-mysql/var/lib/mysql:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:5.7

如果不需要建立目录树,命令如下:

$ sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

  • –name:容器名,此处命名为mysql
  • -e:配置信息,此处配置mysql的root用户的登陆密码
  • -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -d:源镜像名,此处为 mysql:5.7
    检查容器是否允许正确

$ docker container ls

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
393a726634e1        mysql:5.7           "docker-entrypoint.s…"   39 seconds ago      Up 36 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

四、远程连接

使用sudo docker exec -it mysql bash进入容器

$ sudo docker exec -it mysql bash #进入容器
$ mysql -u root -p #进入MySql

修改root访问权限为任意访问

grant all privileges on *.* to 'root'@'%' ;

刷新权限

flush privileges;

查看权限

use mysql;
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 

得到结果如下:

+------------------------------------+
| query                              |
+------------------------------------+
| User: 'root'@'%';                  |
| User: 'mysql.session'@'localhost'; |
| User: 'mysql.sys'@'localhost';     |
| User: 'root'@'localhost';          |
+------------------------------------+
4 rows in set (0.00 sec)

现在可以通过IP远程访问了,如果仍然无法访问查看一下安全策略和防火墙。

五、常用命令

使用sudo docker exec -it mysql bash进入容器

$ sudo docker exec -it mysql bash #进入容器
$ mysql -u root -p #进入MySql

查看日志

$ sudo docker logs -f mysql

备份数据

$ sudo docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"123456"' > /some/path/on/your/host/all-databases.sql

恢复数据

$ sudo docker exec -i mysql sh -c 'exec mysql -uroot -p"123456-abc"' < /some/path/on/your/host/all-databases.sql

使用docker ps -a查看容器的运行或终止状态

$ sudo docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
393a726634e1        mysql:5.7           "docker-entrypoint.s…"   11 minutes ago      Up 11 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

使用docker stop $CONTAINER_ID来终止一个运行中的容器

$ sudo docker stop 393a726634e1 #393a726634e1是刚才查询的MySql编号

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
393a726634e1        mysql:5.7           "docker-entrypoint.s…"   15 minutes ago      Exited (0) 6 seconds ago                       mysql

终止状态的容器,可以使用docker start $CONTAINER_ID来重新启动

$ sudo docker start 393a726634e1 #393a726634e1是刚才查询的MySql编号
$ sudo docker restart 393a726634e1 #使用docker restart命令来重启一个容器。

容器终止后,在需要的时候可以重新启动,确定不需要了,可以进行删除操作。
docker rm [NAME]/[CONTAINER ID]:不能够删除一个正在运行的容器,会报错。需要先停止容器。

$ sudo docker rm 393a726634e1

全部删除:docker本身没有提删除所有的操作,但是可以使用如下命令实现:
docker rm 'docker ps -a -q'

  • -a 标志列出所有容器
  • -q 标志只列出容器的ID 然后传递给rm命令,依次删除容器。

你可能感兴趣的:([Java学习笔记]Docker安装MySql)