日常运维中肯定有很多需要数据库的,一般测试环境不管是源码安装还是rpm安装mysql都比较消耗时间,此时使用docker安装mysql就是一个便捷高效的方式。本文基于在CentOS7已经安装好了docker应用前提下。
一、MySQL镜像选型
- 直接检索MySQL镜像
# docker search mysql
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/mysql MySQL is a widely used, open-source relati... 10671 [OK]
docker.io docker.io/mariadb MariaDB Server is a high performing open s... 4008 [OK]
docker.io docker.io/mysql/mysql-server Optimized MySQL Server Docker images. Crea... 779 [OK]
docker.io docker.io/percona Percona Server is a fork of the MySQL rela... 528 [OK]
docker.io docker.io/centos/mysql-57-centos7 MySQL 5.7 SQL database server 87
docker.io docker.io/mysql/mysql-cluster Experimental MySQL Cluster Docker images. ... 80
docker.io docker.io/centurylink/mysql Image containing mysql. Optimized to be li... 59 [OK]
docker.io docker.io/bitnami/mysql Bitnami MySQL Docker Image 50 [OK]
docker.io docker.io/databack/mysql-backup Back up mysql databases to... anywhere! 42
......
- 查看镜像支持的版本
从上面一看,官方版本镜像肯定是最新的,不好看官方支持哪些版本镜像,可以通过如下方式查看支持哪些 tag 参数,也就是版本号了。
#!/bin/bash
function usage() {
cat << HELP
dockertags -- list all tags for a Docker image on a remote registry.
EXAMPLE:
- list all tags for ubuntu:
dockertags ubuntu
- list all php tags containing apache:
dockertags php apache
HELP
}
if [ $# -lt 1 ]; then
usage
exit
fi
image="$1"
tags=`wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'`
if [ -n "$2" ]; then
tags=` echo "${tags}" | grep "$2" `
fi
echo "${tags}"
- 下载具体镜像具体版本
# docker pull mysql:5.7
二、Docker容器启动
# 精简方式
# docker run --name mysql -p 3306:3306 -d mysql:5.7
# 映射目录方式启动,主要是为了方便查看mysql日志以及把数据存在宿主机上防止容器问题丢失
# 可以先在宿主机上创建配置文件,配置文件上数据目录最好依旧放在 /var/lib/mysql,因为其他目录可能容器不存在该目录
# cat /etc/my.cnf
[mysqld]
user = mysql
port = 3306
socket = /var/sock/mysqld
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
pid-file = /var/lib/mysql/mysql.pid
character-set-server = utf8mb4
[mysql]
default-character-set = utf8mb4
[client]
port = 3306
socket = /var/sock/mysqld
# 启动,宿主需要先创建对应映射目录
# mkdir -p /data/mysql/{data,log} && chmod 777 /data/mysql/log
# docker run --name mysql -p 3306:3306 -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/var/log/mysql -v /etc/my.cnf:/etc/my.cnf -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=zengame123456 -d mysql:5.7
- 命令参数说明
-p 3306:3306: # 容器的3306端口映射到主机的3306端口
-v /etc/my.cnf:/etc/my.cnf: # 将主机/etc/my.cnf挂载到容器的/etc/my.cnf
-v /data/mysql/log:/var/log/mysql: # 将主机/data/mysql/log目录挂载到容器的/var/log/mysql
-v /data/mysql/data:/var/lib/mysql: # 将主机/data/mysql/data目录挂载到容器的数据目录/var/lib/mysql
-v /etc/localtime:/etc/localtime:ro # 设置容器的时间与宿主机同步
--lower_case_table_names=1 # 设置表名参数名等忽略大小写
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
三、docker 容器设置开机自启
- 在使用docker run时,添加下面参数
--restart=always
- 在运行docker的时候添加
docker update --restart=always beb023d5cbd6 # beb023d5cbd6 是容器ID
Reference: