用Docker运行Percona Server
用Docker运行Percona Server
作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs
Percona官方提供了一个Percona Docker镜像,可以运行Percona Server MySQL和Percona Server for MongoDB。
Docker官方也提供了Percona镜像,具体见: Percona,但是这个镜像不是Percona官方提供的。
而在Percona官方提供的镜像中,针对每种存储引擎的镜像都有,具体见:
https://hub.docker.com/r/percona/
但是,目前Percona官方提供的镜像刚刚开始,还处于实验性阶段。
1、运行Percona Server/MySQL镜像
docker run --name container-name -e MYSQL_ROOT_PASSWORD=secret -d percona/percona-server:tag
container-name是你为容器赋予的名字
secret是Percona服务器root账户的密码
tag是你想指定的Percona版本,目前有4个选择:latest、5.6、5.6.28、5.6.27。
要从另一个Docker容器的应用程序连接到Percona Server容器:
(假定Percona使用默认的3306端口)
docker run --name app-container-name --link container-name -d app-that-uses-mysql
从MySQL命令行客户端连接到Percona Server容器:
(下面的命令会从另一个Docker容器中运行MySQL命令行客户端,再连接到Percona Server容器)
docker run -it --link container-name --rm percona/percona-server:tag mysql -h container-name -P 3306 -uroot -psecret'
2、运行Percona Server/MongoDB镜像
要改变镜像的存储引擎很简单,比如换成RocksDB引擎,可以这样:
docker run --name psmdbrocks -d percona/percona-server-mongodb:latest --storageEngine=RocksDB
或者是换成PerconaFT存储引擎:
docker run --name psmdbperconaft -d percona/percona-server-mongodb:latest --storageEngine=PerconaFT
3、环境变量
在启动Percona Server容器时,可以通过docker run命令行传递一些环境变量来调整实例的运行配置。要注意,如果容器已经包含了数据库数据目录的话,那么这些环境变量会不起作用,也即任何预先存在于镜像中的数据库会使得环境变量无效。主要使用的环境变量有下面几个:
1)MYSQL_ROOT_PASSWORD
它表示Percona服务器root超级用户的密码。
2)MYSQL_RANDOM_ROOT_PASSWORD
如果这个值设置为yes,表示Percona服务器root超级用户的密码为随机产生,且密码会输出到容器的控制台,可以使用命令docker logs container-name来找到密码。
3)MYSQL_ONETIME_PASSWORD
这是可选的环境变量,如果设置为yes,表示Percona服务器root超级用户的密码是一次性的,会过期。当登陆Percona后,必须修改密码。这个特性必须在5.6及以后版本才支持。
4)MYSQL_DATABASE
这是可选的环境变量,它表示在容器启动时可以创建一个指定名字的数据库。如果后面的user/password都设置了,那么这个user将拥有对这个指定数据库的超级权限(等同于GRANT ALL命令)。
注意:这种方式不应该用于创建root账户。
5)MYSQL_ALLOW_EMPTY_PASSWORD
如果这个值设置为yes,表示Percona服务器root超级用户的密码可以为空。
不推荐使用。
4、Percona容器的安全
在很多场景下,使用MYSQL_ROOT_PASSWORD环境变量来指定root超级用户的密码是不安全的。所以安全的做法应该这样:使用MYSQL_RANDOM_ROOT_PASSWORD随机密码环境变量。如果想让实例更加安全,还可以使用MYSQL_ONETIME_PASSWORD一次性密码环境变量。
5、数据存储
运行在Docker容器的应用程序要存储数据有两种方法:
1)让Docker管理数据库数据的存储
通过把数据库文件写入主机系统磁盘(使用内部的卷管理),实现让Docker管理数据库数据的存储。这种方法,devicemapper、aufs、overlayfs等对性能有很大影响。
2)在托管主机创建数据目录(在容器外部)
在托管主机上也即容器外部创建数据目录,且通过挂载使得此目录对容器可见。这种方法使得数据库文件易于被主机系统的工具或应用访问到。这种方法用于必须确保数据目录存在,且访问权限和其它安全机制都要设置正确。通常可以这样:
- 在主机系统适合的卷上创建数据目录,比如/local/datadir
- 启动容器:
.
docker run --name container-name -v /local/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -d percona/percona-server:tag
-v参数表示从主机系统挂载/local/datadir目录到容器内的/var/lib/mysql目录,它是MySQL写数据文件的位置。
还要注意主机系统的目录是否对容器有写权限,SELinux要启用这个权限,执行:
chcon -Rt svirt_sandbox_file_t /local/datadir
如果启动MySQL容器实例使用已有的数据目录(即数据库已存在),那么在执行docker run命令时,MYSQL_ROOT_PASSWORD变量应该省略。
6、端口转发
Docker允许在容器内映射端口到主机系统的端口,使用-p选项。
docker run --name container-name `-p 6603:3306` -d percona/percona-server mysql -h docker_host_ip -P 6603
这样就可以使用主机的6603端口连接到MySQL容器了。
7、传递参数给MySQL容器
还可以在docker run命令中传递任意参数给MySQL容器。
docker run --name my-container-name -d percona/percona-server --option1=value --option2=value
option1和option2在容器启动时之间传递到Percona容器。比如想让容器使用UTF-8作为字符集和collation的默认设置,可以这样:
docker run --name container-name -d percona/percona-server --character-set-server=utf8 --collation-server=utf8_general_ci
8、使用自定义的MySQL配置文件
MySQL容器的启动配置文件是/var/lib/mysql/my.cnf,如果想自定义这个配置文件,可以修改它。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-deployment 英文原文:Docker: Lightweight Linux Containers for Consistent Development and Deployment 使用Docker容器——轻量灵活的VM同类,来接管“依赖地狱”。学习Docker是如何基于LXC技术,通过把应用包装在容器里来使应用具有移植性和独立性。 想象一下可以轻松地把应用和它的依赖打包,然后在其他的开发、测试和生产环境上平滑的运行。这就是开源Docker项目的目标。尽管它现在还没正式到生产阶段,最新的发布(本篇文章编写时是0.7.x)使得Docker实现这一伟大目标又近了一步。 Ley翻译于 2年前 2人顶 顶翻译的不错哦! Docker容器试图解决“依赖地狱”问题。现代的应用通常从已存在的组件组合而来,并且依赖其他服务和应用。比如,你的Python应用可能使用Postgre所为一个数据存储,用...
- 下一篇
理解Docker容器的进程管理
Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患。另外Docker鼓励“一个容器一个进程(one process per container)”的方式。这种方式非常适合以单进程为主的微服务架构的应用。然而由于一些传统的应用是由若干紧耦合的多个进程构成的,这些进程难以拆分到不同的容器中,所以在单个容器内运行多个进程便成了一种折衷方案;此外在一些场景中,用户期望利用Docker容器来作为轻量级的虚拟化方案,动态的安装配置应用,这也需要在容器中运行多个进程。而在Docker容器中的正确运行多进程应用将给开发者带来更多的挑战。 今天我们会分析Docker中进程管理的一些细节,并介绍一些常见问题的解决方法和注意事项。 容器的PID namespace(名空间) 在Docker中,进程管理的基础就是Linux内核中
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路