Docker学习之docker-compose部署mysql
一、安装部署docker、docker-compose可以参考之前的两篇博客安装docker安装docker-compose二、编写docker-compose文件(这里提供二种方式)第一种、不挂载本地文件,文件都由docker附加卷直接生成,而后修改其中的文件即可1、配置docker-compose.yml文件version: '2'services:m...
一、安装部署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.其它步骤同上
更多推荐
所有评论(0)