mysql dockerfile 官方地址https://github.com/docker-library/mysql
先介绍利用的两个数据卷挂载的规则,这对于理解挂载mysql数据库存储非常有帮助。
- 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
- 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
mysql数据库物理存储位置/var/lib/mysql
步骤:
1.拉取镜像
$docker pull mysql:5.7
2.创建数据卷
# 创建数据卷 docker volume create my-vol(数据卷名称) # 查看已有的数据卷 docker volume ls #查看数据卷信息 docker volume inspect my-vol(数据卷名称) # 删除数据卷 docker volume rm my-vol(数据卷名称)
3.运行容器
$docker run -d --name mysql -v my-vol:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7
-d : --detach,后台运行。
--name : 为你的镜像创建一个别名,该别名用于更好操作。
-h : 用户名称
-p : 映射端口,一般我们会将默认端口进行更改,避免与本机的mysql端口冲突,如果你宿主机有mysql,请更改端口,如 -p 3307:3306。
-e : 环境变量。为mysql的root用户设置密码为root。
-v : 指定数据卷,意思就是将mysql容器中的/var/lib/mysql(这个是数据库所有数据信息文件)映射到宿主机/data/mysql里面。
mysql环境变量配置
MYSQL_ROOT_PASSWORD
此变量是必需的,并指定将为MySQL root
超级用户帐户设置的密码。在上面的例子中,它被设置为my-secret-pw
。
MYSQL_DATABASE
此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对该数据库的超级用户访问权限(对应于GRANT ALL
)。
MYSQL_USER
, MYSQL_PASSWORD
这些变量是可选的,可以结合使用来创建新用户并设置该用户的密码。此用户将被授予MYSQL_DATABASE
变量指定的数据库的超级用户权限(参见上文)。这两个变量都是创建用户所必需的。
请注意,不需要使用此机制来创建根超级用户,默认情况下会使用MYSQL_ROOT_PASSWORD
变量指定的密码创建该用户。
MYSQL_ALLOW_EMPTY_PASSWORD
这是一个可选变量。设置为yes
允许以root用户的空密码启动容器。注意:yes
建议不要将此变量设置为,除非您确实知道自己在做什么,因为这会使您的MySQL实例完全不受保护,从而允许任何人获得完整的超级用户访问权限。
MYSQL_RANDOM_ROOT_PASSWORD
这是一个可选变量。设置yes
为为root用户生成随机初始密码(使用pwgen
)。生成的root密码将打印到stdout(GENERATED ROOT PASSWORD: .....
)。
MYSQL_ONETIME_PASSWORD
初始化完成后,将root(不是MYSQL_USER!中指定的用户)设置为已过期,在首次登录时强制更改密码。注意:仅在MySQL 5.6+上支持此功能。在MySQL 5.5上使用此选项将在初始化期间抛出适当的错误。
允许远程连接
连接mysql,进行设置即可
mysql -u root -P 3307 -h 127.0.0.1 -p root; mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
这里又不得不提数据卷的特性,生命周期独立于容器,意味着我们可以创建新的mysql容器,只需要指定同一个数据卷就可以了。
至此简单的利用docker部署了一个简单的mysql容器,如果需要更个性化的conf,配置即可。
redis: $ docker pull redis $ docker run --name redis -d -p 6379:6379 redis