欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯!
转载自:http://blog.csdn.net/Mungo/article/details/78521832?locationNum=9&fps=1
本文介绍如何使用docker迅速搭建MySQL的运行环境。
使用docker hub镜像
查找镜像
首先查找Docker Hub上的mysql镜像,有两种方式:
其一,直接登录docker hub网站https://hub.docker.com/搜索,可以知道镜像地址为https://hub.docker.com/_/mysql/。
其二,可以使用docker search mysql命令搜索。
![这里写图片描述]()
然后可以使用docker pull mysql命令下载相应的镜像,这里下载的是docker给出的官方MySQL镜像的最新版本。如果要pull指定版本,在后面加上:和版本号即可,比如:
docker pull mysql:5.6
![这里写图片描述]()
使用镜像
找到需要的镜像后,就可以使用docker的run命令创建一个容器了。
比如,简单一点,使用默认配置的方法:
sudo docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
其中:
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-e 指定环境变量,其中MYSQL_ROOT_PASSWORD=root即初始化root用户的密码为root
-name 即命名容器的名称为mysql
-d: 后台运行容器,并返回容器ID
最后的mysql表明使用最新的mysql镜像,如果要指定版本,和pull命令一样,冒号:加版本号。
上面的命令如果本地不存在mysql镜像的话,也会先pull操作的。
这样就启动了一个运行mysql的docker容器。要连接的话,可以先查下启动容器的ip地址就好。
使用inspect命令,加上容器名称或者id即可:
sudo docker inspect mysql
可以看到我的容器ip地址为:172.17.0.2。
这时就可以使用mysql的客户端连接工具连接了。
这样,一个基本的mysql服务就搭建好了。省去了安装mysql的麻烦,基本上分分钟就可以完成。
sudo docker ps
可以看看容器的启动情况:
![这里写图片描述]()
环境变量(Environment Variables)
除了上面的MYSQL_ROOT_PASSWORD一个强制填写的环境变量外,mysql容器还可以指定其他的可选环境变量。
- MYSQL_USER, MYSQL_PASSWORD:创建一个新用户并设置该用户的密码。需要注意的是,不要使用此机制来创建根超级用户,该用户默认使用由MYSQL_ROOT_PASSWORD变量指定的密码创建。
- MYSQL_DATABASE:指定在容器启动时要创建的数据库的名称。如果提供了用户/密码,那么该用户将被授予对该数据库的超级用户访问(对应于GRANT ALL)。
- MYSQL_ALLOW_EMPTY_PASSWORD:设置为yes以允许为root用户使用空密码启动容器。不建议设置为yes。
- MYSQL_RANDOM_ROOT_PASSWORD:设置为yes时将为root用户生成随机初始密码(使用pwgen)。生成的root密码将被打印到标准输出(如:GENERATED ROOT PASSWORD:…..)
- MYSQL_ONETIME_PASSWORD:一旦init完成,将root用户(不是在MYSQL_USER!中指定的用户)设置为过期,强制在第一次登录时更改密码。需要注意的是:该功能仅在MySQL 5.6+上受支持。在MySQL 5.5上使用这个选项会在初始化时引发一个适当的错误。
以上参数解释,具体可以参见docker hub上mysql镜像详情。
配置文件
如果不想使用镜像默认的mysql配置文件,可以通过run命令的-v参数,指定文件挂载。这样也可以自己定义数据文件的存放位置等。
比如:
- -v $PWD/conf/my.cnf:/etc/mysql/my.cnf:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
- -v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
- -v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql,这个文件默认情况下为mysql的数据文件存放位置
具体仍可以参见docker hub上mysql镜像详情的最新更新。
通过 Dockerfile构建
除了使用官方提供的镜像,docker镜像都可以自己通过Dockerfile构建。
至于构建脚本,因目前水平有限,也写不出比官方更好的方式,这里给出docker hub上5.7版本的Dockerfile。可以自己通过docker build构建操作。完成后,使用的方法,和上面提到的是一样的。
源码位置:https://github.com/docker-library/mysql/blob/883703dfb30d9c197e0059a669c4bb64d55f6e0d/5.7/Dockerfile
FROM debian:jessie
Docker编排方式
简介
Docker在1.12版的引擎中内置编排能力,也就是 Swarm Mode,在容器之上引入了服务(service)的概念,推出了应用栈(stack)来支持多服务应用的部署管理。
在2017年1月发布的 Docker 1.13版本中,Swarm mode迅速成熟,相应的工具支持也进一步完善。 Docker Compose v3 规范,已经全面支持 Swarm mode 概念。从 1.13 开始,Docker 命令行工具支持直接使用 v3 版本的 docker-compose.yml 文件来进行应用栈(stack)部署管理,这大大简化了容器编排使用的复杂性。
相关命令
docker stack deploy
or
docker-compose
yaml文件
示例文件mysql.yml,这里定义了一个mysql数据库,默认root密码为123456,服务异常始终自动重启。同时,定义了一个web管理数据库工具,映射到主机8080端口。
version: '3.1'
services:
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456 adminer: image: adminer restart: always ports: - 8080:8080
启动
docker stack deploy -c mysql.yml mysql
or
docker-compose -f mysql.yml up
![这里写图片描述]()
查看状态
sudo docker stack services mysql
这是通过浏览器访问,http://127.0.0.1:8080/可以打开管理界面,输入用户名root,密码123456,就可以进入管理控制台了。
![这里写图片描述]()
具体仍可以参见docker hub上mysql镜像详情的最新更新。