docker部署容器化mysql5.7

部署MySQL

本教程将指导您如何在Docker环境中部署MySQL数据库,并展示如何通过外部MySQL客户端与之交互。

步骤 1: 准备环境

首先,我们需要在本地环境中创建必要的文件夹结构来存储MySQL的配置、日志和数据。

# 在终端创建mysql文件夹及其子文件夹
mkdir -p mysql/{conf,logs,data}

# 创建配置文件 my.cnf,内容在下文中
cd mysql/conf
vim my.cnf
步骤 2: 获取MySQL镜像

使用Docker搜索并拉取MySQL镜像:

# 搜索mysql镜像
docker search mysql

# 拉取mysql 5.7版本的镜像
docker pull mysql:5.7
步骤 3: 部署MySQL容器

运行以下命令来创建并启动MySQL容器,同时设置端口映射和目录映射:

# 创建并启动mysql容器
docker run -id \
-p 3306:3306 \
--name=mysql57 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD='your_password' \
mysql:5.7
详解端口和目录映射:
  • $PWD:当前工作目录,此变量会解析为所在目录的绝对路径。
  • -p 3306:3306:将容器的3306端口映射到宿主机的3306端口。
  • -v 参数:用于目录映射,确保容器内部数据的持久化。
    • $PWD/conf:/etc/mysql/conf.d:映射 conf 目录。
    • $PWD/logs:/logs:映射 logs 目录。
    • $PWD/data:/var/lib/mysql:映射 data 目录。
  • -e MYSQL_ROOT_PASSWORD:设置MySQL的root用户密码。
步骤 4: 访问MySQL容器

使用Docker命令进入容器内部,并通过MySQL命令行工具进行操作:

# 登录MySQL容器
docker exec -it mysql57 bash

# 连接MySQL数据库
mysql -uroot -p'your_password'
外部访问容器内的MySQL

由于容器内的网络服务默认与外部环境隔离,我们通过端口映射来实现外部访问。

  • 宿主机和容器间的通信通过映射端口实现。
  • 访问宿主机的3306端口即相当于访问容器内部的MySQL服务。
配置文件 my.cnf

conf 文件夹中创建 my.cnf 配置文件,内容如下:

[mysqld]

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'



# skip-grant-tables

event_scheduler = 1

bind-address=0.0.0.0

port=3306

user=mysql

basedir=/usr/local/mysql

datadir=/var/lib/mysql

socket=/tmp/mysql.sock

character_set_server=utf8mb4

collation-server=utf8mb4_unicode_ci

explicit_defaults_for_timestamp=true

lower_case_table_names=1

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]

log-error=/data/mysql/mysql.err

pid-file=/data/mysql/mysql.pid

#

# include all files from the config directory

#

!includedir /etc/my.cnf.d

确保配置文件中的路径和设置与您的环境相匹配。
有任何问题欢迎私信我或者加我的联系方式,我会很乐于交流!

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