docker上搭建部署java web运行环境(centos 7.5)
一:docker上构建mysql容器并将配置文件以及数据库文件映射到宿主机
1:首先拉去mysql镜像文件
docker pull mysql
或者docker search mysql 通过搜索镜像选择星级高的官方mysql镜像下载
2:构建mysql容器
在centos 7.5宿主机创建响应的目录和文件
mkdir data
mkdir config 【data子目录】 touch my.conf 【创建配置文件】
mkdif mysql 【data子目录】
vim my.conf 编辑配置文件并设置mysql字符集
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
执行docker命令构建mysql容器
docker run -d -p 3306:3306
–restart always
–privileged=true
–name mysql001
-e MYSQL_USER=“mysql”
-e MYSQL_ROOT_PASSWORD=“123456”
-e MYSQL_PASSWORD=“123456”
-e MYSQL_ROOT_PASSWORD=“123456”
-v=/data/config/my.cnf:/etc/my.cnf
-v=/data/mysql:/var/lib/mysql
mysql
参数说明
–restart always:开机启动
–privileged=true:提升容器内权限
-v=/data/config/my.cnf:/etc/my.cnf:映射配置文件
-v=/data/mysql:/var/lib/mysql:映射数据目录
mysql 容器名称
注意如果不设置root用户密码的话,mysql初始化会失败
MYSQL_ROOT_PASSWORD
(1):mysql 首次登陆修改 root 用户密码
mysql 8.0之前
首先登录MySQL。
mysql> use mysql;
mysql> update user set password=password(‘123’) where user=‘root’ and host=‘localhost’;
mysql> flush privileges;
mysql 8.0之后
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘new_password’;
(2):mysql 8.0开放远程连接
查看root用户允许访问权限
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘new_password’;
创建一个用户(跟mysql 5.*不同,这里必须要新创建用户)
create user ‘root’@’%’ identified with mysql_native_password by ‘123456’;
授权
grant all privileges on . to ‘root’@’%’ with grant option;
刷新权限
mysql> flush privileges;
删除root@localhost用户:
drop user ‘root’@’localhost’;
刷新权限:
flush privileges;
完成以上步骤,mysql的root用户就开启了远程访问权限
如果没有添加–privileged=true参数,容器创建后不能正常启动,查看日志发现有权限的错误
总结和思考
1、不只是MySql,应该是所有涉及到数据和配置的,都不应该放在容器内部。
2、使用-v参数挂接外部数据时,如果data目录已经存在,容器能正常启动吗?
3、在docker run命令中添加镜像参数和直接在my.cnf中设置有什么区别?
centos7.5相关命令:
1:查看防火墙状态:systemctl status firewalld
2:开启防火墙:systemctl start firewalld
3:关闭防火墙:systemctl stop firewalld
4:查看端口是否已开放:firewall-cmd --query-port=80/tcp
6:开永久端口号:firewall-cmd --add-port=3306/tcp --permanent
7:重新载入配置:firewall-cmd --reload
8:移除端口:firewall-cmd --permanent --remove-port=3306/tcp