前情摘要:项目要上线到内网环境的麒麟V10的测试服务器上,在配置环境的时候,想着用docker跑一个mysql,却种种报错,好在一番折腾后最终得以解决,特此记一次docker安装mysql8
这里主要突出mysql的安装过程,所以前期工作,下载build好mysql.tar传输到服务器上的准备工作默认已经准备好了。
bashsudo mkdir -p /usr/local/mysql/conf
cd /usr/local/mysql/conf
touch my.cnf
bash[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# 数据库忽略大小写
lower_case_table_names = 1
#设置3306端口
port=3306
#允许最大连接数
max_connections=1000
#允许连接失败的次数。
max_connect_errors=10
#最大允许包
max_allowed_packet=10M
#服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
collation_server = utf8mb4_general_ci
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# mysql8中“mysql_native_password”插件认证不让用了,改成默认的caching_sha2_password
# mysql8.4 中已经没有default_authentication_plugin变量了,要注释掉
# default_authentication_plugin=caching_sha2_password
检查文件权限,尽量使用root创建,避免一些不必要的权限拒绝问题。
注意:如果您使用已包含数据库的数据目录启动容器,则下面的任何变量都不会产生任何影响:任何预先存在的数据库在容器启动时始终保持不变。即:挂载的数据卷data目录要是空的,否则容易出现错误。
换句话说,就是运行出错了,每次docker run 之前都必须先清除一下/usr/local/mysql/data
的内容,当然你也可以将整个mysql目录都删除掉,重新创建。
bashcd /usr/local/
rm -rf mysql
mkdir mysql
cd mysql
mkdir data
mkdir log
mkdir conf
mkdir mysql-files
dockerdocker run -d -p 3306:3306 \ --restart=always \ --privileged=true \ -v /usr/local/mysql/log:/var/log/mysql \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -v /usr/local/mysql/mysql-files:/var/lib/mysql-files \ -v /etc/timezone:/etc/timezone:ro \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=123456 \ -e TZ=Asia/Shanghai \ --name mysql mysql:latest
启动成功后,进入容器:
bashdocker exec -it mysql /bin/bash
mysql -u root -p
mysql> use mysql;
mysql> select Host, User, plugin, authentication_string from user;
查询mysql账户,发现已经有root--%账户了,可以直接远程登陆了
如果没有的话,进去授权一下即可
mysqlmysql -u root -p use mysql; # 创建账号 CREATE USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY '新设置的密码'; # 授权 grant all privileges on *.* to 'root'@'%'; # 刷新权限 FLUSH PRIVILEGES;
然后就可以愉快用navicat远程连接访问啦,注意防火墙问题,看看网络通不通。
centos7 docker 安装mysql8
bash1.yum -y install docker
2.vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://hub.rat.dev",
"https://docker.xuanyuan.me"
]
}
3.systemctl daemon-reload
4.docker pull mysql:8.0.23 // docker tag mysql:8.0.23 mysql:8
5.docker run -d --name mysql8 -e MYSQL_ROOT_PASSWORD=JGhQ83axm5ydtQEnX8B3RgtqnFIY6U3+TO5VMMVyLxA= -p 3306:3306 mysql:8
6.
mkdir -p /home/mysql/data
mkdir -p /home/mysql/config
mkdir -p /home/mysql-files
# 设置文件目录权限
sudo chmod -R 777 /home/mysql
# 复制容器配置文件
docker cp mysql8:/etc/mysql/my.cnf /home/mysql/config
# 停止并删除容器
docker stop mysql8
docker rm mysql8
7.docker run -d --name mysql8 -v /home/mysql/data:/var/lib/mysql:Z -v /home/mysql/config/my.cnf:/etc/mysql/my.cnf -v /home/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=JGhQ83axm5ydtQEnX8B3RgtqnFIY6U3+TO5VMMVyLxA= -p 3306:3306 --restart=unless-stopped mysql:8
8.docker exec -it mysql8 mysql -u root -p
9.JGhQ83axm5ydtQEnX8B3RgtqnFIY6U3+TO5VMMVyLxA=
10.GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
11.FLUSH PRIVILEGES;
bash#redis
1.docker pull redis:6.0.8
2.
mkdir -p /home/redis
touch /home/redis/redis.conf
chmod -R 777 /home/redis
vim /home/redis/redis.conf
3.# 开启密码验证
requirepass ivytech
# 允许redis外地连接,需要注释掉绑定的IP
# bind 127.0.0.1
# 关闭保护模式
protected-mode no
# 注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
# 开启redis数据持久化
appendonly yes
4.
docker run -d -p 6379:6379 --name redis --privileged=true -v /home/redis/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data redis:6.0.8 redis-server /etc/redis/redis.conf
docker run -d -p 6378:6379 --name redis --privileged=true -v /home/redis/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data redis:6.0.8 redis-server /etc/redis/redis.conf
5.
docker exec -it redis /bin/bash
6.
redis-cli
auth ivytech
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://registry.cyou",
"https://lispy.org"
]
}
EOF
{
"registry-mirrors" : [
"https://docker.m.daocloud.io",
"https://mirror.aliyuncs.com"
],
"insecure-registries": ["docker.m.daocloud.io"],
"debug": true,
"experimental": false
}
------------------------------------------------------
#rabbitmq
docker pull rabbitmq:3.7.17-management
docker run -itd --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 --restart=always xxximageId
-----------------------------------------------------------------
#minio
docker pull minio/minio
sudo mkdir -p /home/minio/data
sudo mkdir -p /home/minio/config
sudo chmod -R 777 /home/minio
docker run -p 9000:9000 -p 9001:9001 --name minio -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=admin123" -v /home/minio/data:/data:z -v /home/minio/config:/root/.minio -d minio/minio server /data --console-address ":9001"
mc alias set sourceMinio http://8.130.17.200:9000 admin admin123
mc alias set targetMinio http://10.0.2.130:9002 admin admin123
mc mirror --watch --overwrite --retry sourceMinio/ivytech-project targetMinio/ivytech-project
sudo docker run --security-opt seccomp=unconfined -d --name ivytech-project -p 7777:7777 -e "spring.profiles.active=prod" --ulimit nproc=1024:1024 ivytech-project:1.0
本文作者:wjc
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC 许可协议。转载请注明出处!