Docker配置mysql

Doceker下载文件夹

下载下的文件夹和各个文件夹存放文件种类:目录说明
目录默认路径:var/lib/docker/

Docker命令

(实例:Mysql使用)

镜像拉取

  1. 官网(dockerHub)查询,tags显示历史版本选择
  2. 切换su模式拉取
  3. 查看镜像
  4. 删除镜像
#拉取
sudo docker pull mysql:8.0
#查看
docker images
# 删除
docker rmi -f mysql:8.0

在这里插入图片描述

容器运行启动测试

#
docker run -p 3306:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
# 查看进程
docker ps -a
# 停止容器,删除进程
docker stop id
docker rm -f id

容器启动成功则显示容器唯一id

  • -p 3306:3306:指定端口映射,主机端口:容器映射端口
  • –name mysql8.0:指定容器的名称为 “mysql8.0”。同意命令不同端口,不同名称可启动多个容器。
  • -e MYSQL_ROOT_PASSWORD=root:设置一个名为 MYSQL_ROOT_PASSWORD 的环境变量,并将其值设置为 “root”。这将为 MySQL 的 root 用户设置密码为 “root”。可以根据需要更改密码。
  • -d :后台运行
  • mysql:8.0 :放最后,镜像名若没有会从dockerHub拉取

启动容器交互界面

  • 相当windows的cmd,打开容器bash或者shell
# mysql容器交互启动
docker exec -it mysql8.0 bash
# 登录mysql
mysql -uroot -proot

容器退出

关闭容器并退出
exit
直接退出不停止容器:
Ctrl + P + Q

改动及配置(my.cnf)

对于MySQL容器的一些配置问题

  • run命令中给到了容器一些简单的配置,而mysql的配置显然没那么简单还需要修改。对于初始首先尝试的是对容器的停止和删除的尝试,再重新设置启动,但容器的删除会导致数据的丢失,所以需要进行一些重要文件的备份,也就是卷的挂载,将容器内部的一些重要文件夹对应linux创建挂载文件保存文件,同时也可在为文件下设置一些配置文件,例如docker-compose.yml文件配置启动设置,再使用Docker Compose 启动容器,相对重复创建Mysql容器来说相对简单明了,命令可在docker-compose.yml文件夹下使用docker-compose up -d进行启动。
docker run -p 3306:3306 --name mysql8.0 --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

–restart=always 总是跟随docker启动
–privileged=true 获取宿主机root权限
-v /usr/local/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器
-v /usr/local/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器
-v /usr/local/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
-v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。

配置参考配置非常详细,目录划分也比较清晰:原文链接:https://blog.csdn.net/hh303392049/article/details/131752617

创建编辑/usr/local/mysql/conf下my.cnf文件

vi /usr/local/mysql/conf/my.cnf
#于MySQL客户端的默认字符集
[client]
default-character-set=utf8
#MySQL命令行客户端的默认字符集
[mysql]
default-character-set=utf8mb4
[mysqld]
#设置为 '+8:00' 表示服务器时区为东八区
default-time_zone = '+8:00'
#语句设置连接的排序规则为 utf8_unicode_ci;语句设置连接的字符集为 utf8
init_connect='SET collation_connection=utf8_unicode_ci'
init_connect='SET NAMES utf8'
#MySQL服务器使用的默认字符集设置为 utf8;服务器使用的默认排序规则设置为 utf8_unicode_ci。
character-set-server=utf8
collation-server=utf8_unicode_ci
#客户端和服务器之间的字符集设置不一致时,MySQL服务器将不会与客户端进行字符集握手协商
skip-character-set-client-handshake

在这里插入图片描述

错误点申明:

为了保证数据持久化,我们通常挂载/usr/local/mysql/data作为Mysql的数据存放地址,这在数据库删除后文件依旧存在,那么在运行5.7和8.0两个不同版本的mysql时会有些问题,因为两个版本数据存储格式有所不同,导致启动时若原来版本的数据还存在,格式又不一致,会引起闪退或者无法启动的问题,此时可查看logs验证,若出现类似:

InnoDB: Assertion failure in thread 140336087447360 in file ut0ut.cc line 921

错误信息,可先删除开始版本的/usr/local/mysql/data下的数据,再重启运行。

Docker Compose使用尝试

  • 对于上面提到的yml文件直接配置,并直接使用docker compose启动方法尝试,试想一个配置文件随意放个文件夹然后改下原有配置,一行代码启动,然后bash界面直接上手使用也是相当高效的。
  1. 安装docker docker compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

下载并保存到 /usr/local/bin/docker-compose

  1. 授权Docker compose 执行权限
sudo chmod +x /usr/local/bin/docker-compose
  1. 确保 /usr/local/bin 路径已添加到系统的 PATH 环境变量中。这样系统就能够找到并执行 docker-compose 命令。如果未添加,可以编辑 .bashrc 或 .bash_profile 文件,并在其中添加以下行:
export PATH="/usr/local/bin:$PATH"

保存文件后,运行以下命令使更改生效:

source ~/.bashrc
source ~/.bash_profile
  1. 查看版本号
    docker-compose --version
  • docek-compose.yml文件模板
version: '2'
services:
  mysql:
    image: mysql:8.0
    ports:
      - 3307:3306
    restart: always
    privileged: true
    volumes:
      - /usr/local/mysql/log:/var/log/mysql
      - /usr/local/mysql/data:/var/lib/mysql
      - /usr/local/mysql/conf:/etc/mysql/conf.d
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MYSQL_ROOT_PASSWORD=root
    container_name: mysql8.0

在这里插入图片描述

在这里插入图片描述

  • 成功还是挺好用的
    在这里插入图片描述
  • 查看一下配置文件中设置的挂载目录是否存在
    在这里插入图片描述
完整步骤
#创建一个文件夹
mkdir dockerCompose
#修改复制yml配置内容
vi docker-compose.yml
#该文件夹下启动
docker-compose up -d
#交互启动
docker exec -it mysql801 bash
#配置时钟
vi /usr/local/mysql/conf/my.cnf

(redis实例配置)

1.拉取镜像:redis
2.检验镜像
3. 修改redis.conf文件(不创建的化在挂载时对应文件找不到默认会创建名为redis.conf文件夹,而不是文件)
4. 修改.conf文件:参照Redis官网Configuration文档
5. 设置挂载目录启动redis
6. 查看容器运行状态
7. 检验挂载目录和交互连接redis数据库

docker pull redis:7.2.1
docker images
#
mkdir -p /usr/local/redis/conf
touch /usr/local/redis/conf/redis.conf
#
vi /usr/local/redis/conf/redis.conf
#
docker run -p 6379:6379 --name redis721 --privileged=true \
-v /usr/local/redis/data:/data \
-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf  \
-d redis:7.2.1 redis-server /etc/redis/redis.conf
#
docker exec -it  redis721 redis-cli
auth redis


  • redis.conf

设置AOF持久化文件默认存放路径

设置AOF持久化开启

requirepass redis

bind 0.0.0.0

protected-mode no

appendonly yes

port 6379

dir /data/

appendonly yes

问题请教(可留言感谢)

问题描述:主机无法连接docker创建的redis容器。。。
具体:
首先要说明的是在vagrant构建的虚拟机下使用的docker交互连接redis虚拟机完全没有问题。配置文件挂载,数据文件夹挂载都没有问题,ps进程也都没有问题,但所有都弄好后想要在主机可视化界面连接虚假机下配置好的redis就出现了问题,无法连接到服务器。

  • 排查1(容器启动问题,是否没有成功启动,或者)

最开始的想法,所以重启了好几次,进去容器连接测试了几遍没问题

  • 排查2:防火墙问题

关闭了主机防火墙,主机连接虚拟机出栈设置排查也没毛病,虚拟机先看端口6379没毛病

  • 排查3:虚拟机ip

网上常见解决描述,都尝试了一下,一种直接注解掉bind,第二种就是设置成bind 0.0.0.0,第三种就是设置bind 127.0.0.1 容器ip都尝试没用

  • 排查4:启动时以redis.conf为后缀条件启动,文件是否有问题

官网下载了官方配置同步了配置文件,虚拟机和容器同步没问题,设置一些参数也没问题,但还是没用,后来还是改回上文的一些基本配置感觉开始也够用,没办法改起来也方便。

大部分是可参考和用的,最后redis连接问题希望有遇到相同的能帮下的评论留言,感谢!!比心!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值