docker安装mysql

docker 安装 mysql

可以在 docker hub搜索可用的 mysql 版本:https://hub.docker.com/_/mysql

假设我们选择8.1.0版本,就可以使用如下命令基于mysql:8.1.0来启动容器:

docker run --name mysql8.1 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=password \
-d mysql:8.1.0

参数解析:

  • --name mysql8.1指定启动的容器名称,必须指定
  • -p 3306:3306将容器的 3306 端口暴露给主机的 3306 端口
  • -e用来指定环境变量
  • -d表示在后台启动容器,并返回容器ID
  • mysql:8.1.0是我们指定的镜像

docker run命令的详细介绍可以使用docker run --help命令查看。

如果镜像在本地不存在,会先从 docker hub拉取镜像到本地,然后基于镜像启动容器。

然后就可以使用docker images查看拉取的镜像:

最后使用docker ps查看已启动的容器:

如果我们想要使用命令行连接到启动的mysql,一种方式是使用客户端(比如DataGrip)来连接,另一种方式是使用命令行来连接。首先进入到容器中:

docker exec -it mysql8.1 bash

然后使用如下命令登录mysql:

mysql -u root -p

然后根据提示输入密码即可。

如果要退出 mysql 使用 exit 即可,退出容器的话也是exit

mysql 启动的时候使用-d参数指定了在后台启动,如果要看日志的话执行如下命令:

docker logs mysql8.1

最后不再使用的时候可以使用docker stop [container-id | container-name]停止容器:

docker stop mysql8.1

删除容器的话可以使用docker rm [container-id | container-name]

docker rm mysql8.1

如果要永久删除镜像的话可以使用docker rmi [image:tag | image-id]

docker rmi mysql:8.1.0

使用自定义配置启动mysql

MySQL的默认配置文件是/etc/mysql/my.cnf文件,如果想要自定义配置,可以参考:https://dev.mysql.com/doc/refman/8.1/en/server-system-variables.html。当然可以在容器启动的时候指定新的cnf文件来覆盖默认配置文件。

~/env路径下创建配置文件mysql.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.1/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.1/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

使用配置文件启动:

docker run --name mysql8.1 \
-p 3306:3306 \
-v ~/env:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=password \
-d mysql:8.1.0

其中-v ~/env/mysql.cnf:/etc/mysql/conf.d/mysql.cnf指定将主机的配置文件挂载到容器的/etc/mysql/conf.d路径下,这样容器启动的时候将会组合/etc/mysql/my.cnf/etc/mysql/conf.d/mysql.cnf两个配置文件。

如果只有少数几个配置项需要覆盖,也可以在启动容器的命令中以--key=value的形式指定,这样就不用使用cnf文件了:

docker run --name mysql8.1 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=password \
-d mysql:8.1.0 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

配置 mysql 的数据存储位置

在 docker 中运行的 mysql 的数据存放在哪里呢?在容器中存放在/var/lib/mysql路径下,对应到主机上在什么路径下呢?

默认情况下,Docker将数据库文件写入主机上的磁盘来管理数据库数据,这样带来的缺点是:在主机系统上运行的应用程序很难找到这些文件。

我们可以在主机上创建一个数据目录,并将其挂载到容器内部的/var/lib/mysql路径。

首先在主机上创建一个数据目录:

cd home
mkdir /mysql8/data

然后在容器启动的时候进行挂载:

docker run --name mysql8.1 \
-p 3306:3306 \
-v /home/mysql8/data:/var/lib/mysql \
-v /home/mysql8/config:/etc/mysql/conf.d  \
-v /home/mysql8/logs:/logs \
-e MYSQL_ROOT_PASSWORD=password \
-d mysql:8.1.0

参考资料

  • https://hub.docker.com/_/mysql
  • https://www.runoob.com/docker/docker-install-mysql.html
  • https://dev.mysql.com/doc/mysql-installer/en/

你可能感兴趣的:(docker,mysql,容器)