Docker(三):使用docker启动mysql & redis

Docker 很便捷,最开始有这种感受是用一行命令去启动了 MySQL服务。想当初刚接触数据库那会,那么费力气的安装MySQL也是服气。(捂脸哭~

但是在启动MySQL容器之前,我们需要做些准备工作,这是因为数据库本身的特殊性,我们需要将容器的数据映射到主机的目录中,这样就不担心手滑将容器删除导致数据丢失了。

准备工作

首先我们准备以下目录,你也可以选择其他目录,到时候修改下命令中的挂载目录位置即可。

1
mkdir -p /opt/docker/mysql/{conf,data}

然后创建MySQL的配置文件

1
vi /opt/docker/mysql/conf/my.conf

添加如下配置

1
2
3
4
5
6
7
8
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

准备好我们便可以创建容器。

创建 MySQL

创建容器(就是这行命令从零启动了MySQL服务)

1
docker run -d -p 3306:3306 --privileged=true -v /opt/docker/mysql/conf/my.cnf:/etc/mysql/my.conf -v /opt/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-dev mysql:5.7

补充说明

  • -p 3306:3306 将容器的 3306 端口映射到主机的 3306 端口,宿主机:容器
  • -v /opt/docker/mysql/conf/my.cnf:/etc/mysql/my.conf 将主机/opt/docker/mysql/conf/my.conf挂载到容器的 /etc/mysql/my.cnf
  • -v /opt/docker/mysql/data:/var/lib/mysql 将主机/opt/docker/mysql/data挂载到容器的 /var/lib/mysql
  • -e MYSQL_ROOT_PASSWORD=123456 初始化 root 用户的密码
  • --name mysql-dev 为容器命名

然后通过docker ps命令就可以查看正在运行的docker服务

1
2
3
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f80f9ed36b71 mysql:5.7 "docker-entrypoint..." 9 days ago Up 26 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-dev

用你喜欢的数据库可视化工具去连接MySQL服务,successful !!!

创建 Redis

如果我们本地没有镜像,在启动Redis服务的时候,会自动尝试pull,所以我们可以通过一行命令就能启动Redis服务。如果通过第二种方式启动的话,需要提前准备Redis的配置文件

首先我们准备以下目录,你也可以选择其他目录,到时候修改下命令中的挂载目录位置即可。

1
mkdir -p /opt/docker/redis/{conf,data}

然后去下载一个对应版本的 redis.conf ,放到下面目录中

1
/opt/docker/redis/conf/redis.conf

然后需要修改以下几点:

  • 注释bind 127.0.0.1
  • 注释掉daemonize yes ,或者设置为:daemonize no
  • 如果要设置密码:requirepass your-password
  • 设置数据持久化:appendonly yes

下面提供了两种方式启动 Redis

1
2
3
4
5
# 启动一个Redis服务
docker run -d -p 6379:6379 --name redis-dev redis:4.0

# 启动redis并挂载外部conf,需自己去官网下载redis.conf
docker run -d -p 6379:6379 -v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /opt/docker/redis/data:/etc/redis/data --name redis-dev redis:4.0 redis-server /etc/redis/redis.conf

然后通过docker ps查看处于活跃状态的docker服务

1
2
3
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
7c5ed64050de redis:4.0 "docker-entrypoint..." 3 minutes ago Up 3 minutes 0.0.0.0:6379->6379/tcp redis-dev
f80f9ed36b71 mysql:5.7 "docker-entrypoint..." 13 days ago Up 24 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-dev

补充说明

一般使用Redis会做高可用,设置密码,挂载外部的data以及conf,做数据持久化,以下是对上述命令做一些解释以及补充,

  • -v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf:挂载配置文件
  • -v /opt/docker/redis/data:/etc/redis/data:映射data目录
  • redis-server /etc/redis/redis.conf:服务使用指定的配置文件
  • --name mysql-dev :为容器命名
  • --privileged=true:赋予容器内的root拥有真正root权限
  • --requirepass "pwd":给Redis设置密码(如果挂载了外部的配置文件并设置过了,就无需再次设置)
  • --appendonly yes:开启数据持久化(如果挂载了外部的配置文件并设置过了,就无需再次设置)
# Docker
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×