Docker学习之docker-compose部署mysql

一、安装部署docker、docker-compose

可以参考之前的两篇博客

安装docker

安装docker-compose

二、编写docker-compose文件(这里提供二种方式)

第一种、不挂载本地文件,文件都由docker附加卷直接生成,而后修改其中的文件即可

1、配置docker-compose.yml文件

version: '2'
services:
    mysql1:
        environment:
            MYSQL_ROOT_PASSWORD: "yourpassword"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'yourpassword'
        image: "docker.io/mysql:latest" 
        container_name: mysql1
        ports:
            - "3339:3306"
    mysql2:
        environment:
            MYSQL_ROOT_PASSWORD: "yourpassword"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'yourpassword'
        image: "docker.io/mysql:latest" 
        container_name: mysql2
        ports:
            - "3340:3306"
  • MYSQL_ROOT_PASSWORD为数据库的密码,也就是root用户的密码。
  • MYSQL_USER和MYSQL_PASS另外一个用户名和密码。
  • image为你拉取镜像的地址和版本,当然也可以换成自己的镜像仓库,这里使用官方的。
  • volumes里面的参数为映射本地和docker容器里面的文件夹和目录。.
  • ports 为映射主机和容器的端口,前面的端口是你要暴露给外部的端口,后面的端口是docker自己的端口。

2、启动镜像

docker-compose up -d

3、进入容器内部,连接上mysql数据库

进入容器:docker exec -it mysql1(容器ID或者name) /bin/bash
连接mysql:mysql -u root -p
接着就输入刚刚docker-compose.yml里配置的密码

正常情况下是能够正常连接的。不过也会出现下面的问题

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)

解决办法:

(1)、跳过MySQL的密码认证过程。修改/etc/my.cnf文件,加入"skip-grant-tables"用来跳过密码验证的过程

(2)、重启MySQL

     /etc/init.d/mysql restart(有些用户可能需要使用/etc/init.d/mysqld restart),

     service mysqld resatrt

     systemctl restart docker(三选一)

(3)、重启之后输入mysql即可进入mysql

Docker学习之docker-compose部署mysql_第1张图片

(4)、接下来就是用sql来修改root的密码(这步修改的方式有好多种,不一样的版本有不同的方式,每个试下成功了即可)

1.update user set password=password("你的新密码") where user="root";
2.update user set authentication_string=password("你的新密码") where user="root";
3.ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'

(5)、编辑/etc/my.cnf,去掉刚才添加的内容,然后重启MySQL。大功告成!

4、查看容器状态,docker container ps

5、使用navicat测试远程连接,ip添docker-compose.yml暴露的端口而不是3306

第二种、挂载本地文件,文件本地生成好

1、配置docker-compose.yml文件

version: '2'
services:
    mysql1:
        environment:
            MYSQL_ROOT_PASSWORD: "yourpassword"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'yourpassword'
        image: "docker.io/mysql:latest" 
        container_name: mysql1
        volumes:
            - "./db:/var/lib/mysql"
            - "./conf/my.cnf:/etc/my.cnf"
            - "./init:/docker-entrypoint-initdb.d/"
        ports:
            - "3305:3306"

当前文件夹的tree结构

root@localhost mysql # tree
.
├── conf
│   └── my.cnf
├── db
├── docker-compose.yml
└── init
    └── init.sql

2、配置文件和初始化文件

root@localhost conf # cat my.cnf 
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
root@localhost init # cat init.sql 
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword';

3.其它步骤同上

你可能感兴趣的:(mysql,docker)