docker mysql 容器 数据库文件怎么娴宿主机器上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker mysql 容器 数据库文件怎么娴宿主机器上相关的知识,希望对你有一定的参考价值。

docker跟宿主机交互的是通过原生网络实现的。

当Docker进程启动之后,它会配置一个虚拟的网桥叫docker0在宿主机上。这个接口允许Docker去分配虚拟的子网给即将启动的容器们。这个网桥在容器内的网络和宿主机网络之间将作为接口的主节点。

Docker容器启动后,将创建一个新的虚拟接口并分配一个网桥子网内的IP地址。这个IP地址嵌在容器内网络中,用于提供容器网络到宿主机docker0网桥上的一个通道。Docker自动配置iptables规则来放行并配置NAT,连通宿主机上的docker0,就可以访问宿主机的mysql数据文件了。
参考技术A dao pull daocloud.io/library/mysql:5.7.15
docker run --name mysql-1 -v /opt/MySQL/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d daocloud.io/library/mysql:5.7.15

docker run -v 宿主目录:容器目录 -p 宿主端口:容器端口

Docker 使用Docker创建MySQL容器

使用Docker创建MySQL容器

实践环境

Docker version 20.10.5

MySQL5.7

Centos 7.8

创建步骤

1、拉取MySQL镜像

docker pull mysql:5.7

说明:如果不执行该步骤,执行创建MySQL容器时会自动拉取镜像:docker pull mysql:latest

3、创建mysql数据文件,日志文件,配置文件挂载目录

# mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf
# chmod -R 755 /usr/local/mysql/data
# chmod -R 755 /usr/local/mysql/logs
# chmod -R 755 /usr/local/mysql/conf

2、编写MySQL数据库配置文件my.cnf

[mysqld]
basedir=/usr/local/mysql   
datadir=/usr/local/mysql/data  
port=3306
character_set_database=utf8
character_set_server=utf8
user=mysql
slow_query_log=on
slow_query_log_file=/usr/local/mysql/logs/slow.log
long_query_time=0.3
default-storage-engine=INNODB
innodb_buffer_pool_size=64M
innodb_purge_threads = 1
innodb_log_buffer_size=2M
innodb_log_file_size = 64M
innodb_thread_concurrency=8 
innodb_lock_wait_timeout = 120
innodb_flush_log_at_trx_commit=1
max_connections=512 
query_cache_size=0
tmp_table_size=18M
thread_cache_size=8
myisam_max_sort_file_size=64G 
myisam_sort_buffer_size=35M
key_buffer_size=25M 
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=16M
log-error=/usr/local/mysql/logs/mysql.log 
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


[mysql]
default-character-set=utf8
character_set_database=utf8

[client]     
port=3306
default-character-set=utf8

说明:该配置文件存放在上文创建的/usr/local/mysql/conf目录下

3、创建MySQL容器数据库

# sudo docker run --restart=always -p 3306:3306 --name db.mysql -v /usr/local/mysql/conf:/etc/mysql -v /usr/local/mysql/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/logs:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mFF!Wmh\\& -d mysql:5.7

MySQL环境变量配置说明:

MYSQL_ROOT_PASSWORD : 指定root用户初始密码,例中为 mFF!Wmh&,还可以配置其它

实践时发现,以下3个配置不起作用
MYSQL_DATABASE : 运行时需要创建的数据库名称;
MYSQL_USER : 运行时需要创建用户名,与MYSQL_PASSWORD一起使用;
MYSQL_PASSWORD : 运行时需要创建的用户名对应的密码,与MYSQL_USER一起使用;

以下配置未验证过
MYSQL_ALLOW_EMPTY_PASSWORD : 是否允许root用户的密码为空,该参数对应的值为:yes;
MYSQL_RANDOM_ROOT_PASSWORD:为root用户生成随机密码;
MYSQL_ONETIME_PASSWORD : 设置root用户的密码必须在第一次登陆时修改(只对5.6以上的版本支持)。
MYSQL_ROOT_PASSWORD 和 MYSQL_RANDOM_ROOT_PASSWORD 两者必须有且只有一个。

4、进入容器,登录MySQL

# docker exec -it db.mysql /bin/bash
root@0b023eb3b811:/# root@0b023eb3b811:/# mysql -uroot -pmH1FF\\!Kemh\\&
mysql> exit
Bye
root@0b023eb3b811:/# exit
#

如上,成功了

注意:登录时,密码如果包含特殊字符,需要进行转义,否则会报类似如下错误

bash: !Kemh: event not found

以上是关于docker mysql 容器 数据库文件怎么娴宿主机器上的主要内容,如果未能解决你的问题,请参考以下文章

docker容器内怎么连接外部的mysql

docker容器内怎么连接外部的mysql

dockerphp导入文件到数据库

Docker多容器部署LNMP环境

解决Docker容器中无法修改MySQL大小写敏感问题

Docker 使用Docker创建MySQL容器