当前位置: > Linux服务器 > Docker >

使用 mysql docker 镜像

时间:2017-02-18 02:30来源:linux.it.net.cn 作者:IT
使用 mysql docker 镜像

本文按 MySQL 官方指南做了简化,按应用场景讲述了下载,启动,客户端与服务器通讯,发布主机服务等。类似 Redis Docker 也就会用了。

准备

假定你对 mysql 有一定了解
完成了 centos 7 的 docker 安装
首先在 dev.aliyun.com 上找到 mysql 官方镜像,然后查看详情,就有英文使用手册1。

1、下载 mysql 镜像

命令:dockor pull mysql:tag

案例:

sudo dockor pull mysql:5.7
sudo dockor images


2、启动 mysql server 和 client

启动 mysql 服务器,命令:
sudo docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

案例:

sudo docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
sudo docker ps

启动 mysql 客户端,命令:

docker run -it --link mysql1:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

不得不惊讶于在不知道容器地址等信息的条件下,客户机如何与服务器通讯的。以下是一些 docker run 的知识2。

命令格式:
sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

一些 OPTIONS:

-d 容器在后台运行
-it 容器在前台,且使用控制台的 stdin 和 stdout 作为容器的 stdin 和 stdout
–rm 容器在前台,且命令进程退出后,自动清理容器
–name container-name 定义运行容器的名字
-e ENV-NAME=value 定义容器环境变量,会覆盖当前容器的设定
–link container-name:alias 连接容器环境设定
3、容器之间的通讯

--link Container-name:alias 会导致服务容器暴露的环境信息导入当前容器,例如:

sudo docker run -it --rm --link mysql1:mysql_alias mysql /bin/bash -c export
输出:
declare -x GOSU_VERSION="1.7"
declare -x HOME="/root"
declare -x HOSTNAME="e407cd8771cc"
declare -x MYSQL_ALIAS_ENV_GOSU_VERSION="1.7"
declare -x MYSQL_ALIAS_ENV_MYSQL_MAJOR="5.7"
declare -x MYSQL_ALIAS_ENV_MYSQL_ROOT_PASSWORD="root"
declare -x MYSQL_ALIAS_ENV_MYSQL_VERSION="5.7.16-1debian8"
declare -x MYSQL_ALIAS_NAME="/silly_kirch/mysql_alias"
declare -x MYSQL_ALIAS_PORT="tcp://172.17.0.2:3306"
declare -x MYSQL_ALIAS_PORT_3306_TCP="tcp://172.17.0.2:3306"
declare -x MYSQL_ALIAS_PORT_3306_TCP_ADDR="172.17.0.2"
declare -x MYSQL_ALIAS_PORT_3306_TCP_PORT="3306"
declare -x MYSQL_ALIAS_PORT_3306_TCP_PROTO="tcp"
declare -x MYSQL_MAJOR="5.7"
declare -x MYSQL_VERSION="5.7.16-1debian8"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare -x PWD="/"
declare -x SHLVL="1"
declare -x TERM="xterm"


其实,这时你检查主机的网络设置,多了一个桥接(docker0),它的IP是 127.17.0.1。
主机,与容器在一个桥接的网段,它们之家是可以直接通讯的。




4、其他应用场景

相关 docker run 的 OPTIONS:

-p [host-port]:[container-port] 发布容器端口,暴露在主机端口。常用格式:主机端口:容器端口
-v [host-dir]:[container-dir]:[rw|ro] 将主机文件目录挂载入容器目录,实现文件共享。
4.1 容器服务成为主机服务

通过容器端口发布,能访问主机的端口机器都可以获得容器服务,例如:

sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
1
1
这时,主机客户端使用主机 IP 地址和端口也能访问 容器 mysql2 中的服务。

4.2 直接进入容器(后台)执行操作

有时,我们需要管理后台容器,docker exec container-name 最方便

sudo docker exec -it mysql1 /bin/bash
mysql -uroot -p


熟悉的客户端就出来了。

4.3 指定 my.ini 和 数据存储

我们需要做集群、修改字符集支持,就需要指定 my.ini 配置文件。
当然,你可以直接用 docker exec 进入,修改 my.ini 直接发布新镜像。

mysql 官方镜像早考虑到你的需要,仅需在 run 命令中加入
-v /my/custom:/etc/mysql/conf.d 其中,/etc/mysql/conf.d 是挂载点,
你可以用 /my/custom 下的 my.ini 配置容器中 mysql。

同样,使用 -v /my/own/datadir:/var/lib/mysql 挂载本地存储。

小结

mysql 容器,简化了 mysql 的安装与部署。特别合适想了解读写分离等技术的人群。

如果你完成了 mysql 配置,可尝试 Redis 配置。。。

【参考】

官方指南。 /mysql/”>https://hub.docker.com//mysql/ ↩
docker run 命令。 http://www.open-open.com/lib/view/open1422492851548.html 






(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容