Docker学习之docker-compose部署mysql
一、安装部署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
(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.其它步骤同上
上一篇:
IDEA上Java项目控制台中文乱码