Docker安装Mysql

910 阅读3分钟

前言

前面文章已将Docker和docker-compose安装完毕,这里算是正式使用,先从安装Mysql说起。

常规梳理

关于镜像

这里选择mysql:5.7.28

关于环境变量

  • MYSQL_ROOT_PASSWORD:数据库root密码
  • MYSQL_DATABASE:默认创建的数据库
  • MYSQL_USER:默认创建的用户名,可访问上述创建的数据库
  • MYSQL_PASSWORD:默认创建用户的密码

这是经验所得,更详细的说明可去dockerhub搜相关镜像了解。

关于挂载目录及文件

  • /var/lib/mysql:mysql数据目录
  • /etc/my.cnf:mysql配置文件
  • /docker-entrypoint-initdb.d/ :初始化后,默认执行的sql脚本目录,即存放有sql脚本,会自动执行。用于初始化数据库的。

关于服务端口

  • 3306

定义文件样例

version: '2'
services:
  mysql:
    environment:
      MYSQL_ROOT_PASSWORD: "M78@AGi86T"
      MYSQL_DATABASE: "app"
      MYSQL_USER: "u_app"
      MYSQL_PASSWORD: "8Eli@gr#668"
    image: "mysql:5.7.28"
    restart: always
    volumes:
      - "/etc/localtime:/etc/localtime:ro"       # 与宿主时钟同步
      - "/docker-workspace/mysql/db:/var/lib/mysql"
      - "/docker-workspace/mysql/conf/my.cnf:/etc/my.cnf"
      - "/docker-workspace/mysql/init:/docker-entrypoint-initdb.d/"
    ports:
      - "3306:3306"
  • services:服务定义,每个key对应一个服务
  • environment:环境变量定义
  • image:镜像
  • restart:重启策略
    • no,默认策略,在容器退出时不重启容器
    • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
    • on-failure:3,在容器非正常退出时重启容器,最多重启3次
    • always,在容器退出时总是重启容器
    • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
  • volumes:挂载目录及文件,左边为宿主,右边为容器
  • ports:端口映射,左边宿主,右边容器

开始安装

初始化目录

mkdir -p /docker-workspace/mysql/db
mkdir -p /docker-workspace/mysql/conf
mkdir -p /docker-workspace/mysql/init

添加配置文件

cat <<EOF > /docker-workspace/mysql/conf/my.cnf
[mysqld]
user=mysql
wait_timeout=2880000
interactive_timeout = 2880000
max_allowed_packet = 256M
default-storage-engine=INNODB
character-set-server=utf8mb4
default-time_zone = '+8:00'
lower_case_table_names=1
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

EOF

添加定义文件

cat <<EOF > /docker-workspace/mysql/docker-compose.yml
version: '2'
services:
  mysql:
    environment:
      MYSQL_ROOT_PASSWORD: "8Eli#gr#AUk"
      MYSQL_DATABASE: "app"
      MYSQL_USER: "u_app"
      MYSQL_PASSWORD: "8Eli@gr#668"
    image: "mysql:5.7.28"
    restart: always
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/docker-workspace/mysql/db:/var/lib/mysql"
      - "/docker-workspace/mysql/conf/my.cnf:/etc/my.cnf"
      - "/docker-workspace/mysql/init:/docker-entrypoint-initdb.d/"
    ports:
      - "3306:3306"
EOF

运行实例

  • 后台运行实例

    docker-compose -f /docker-workspace/mysql/docker-compose.yml up -d
    

    下面命令可暂时跳过,直接跳到连接验证

  • 停止运行中的实例

    docker-compose -f /docker-workspace/mysql/docker-compose.yml stop
    
  • 开启运行中的实例

    docker-compose -f /docker-workspace/mysql/docker-compose.yml start
    
  • 重启运行中的实例

    docker-compose -f /docker-workspace/mysql/docker-compose.yml restart
    
  • 移出实例

    docker-compose -f /docker-workspace/mysql/docker-compose.yml down
    
  • 非后台运行实例

    docker-compose -f /docker-workspace/mysql/docker-compose.yml up
    

    最常用的是 docker-compose -f docker-compose.yml up -ddocker-compose -f docker-compose.yml down

  • 其他命令查看

    docker-compose -h
    

连接验证

使用Navicat等数据库连接工具验证。

数据库常规维护

传统的安装在宿主机上数据库,可直接登录主机维护。而使用docker后,会略微有些区别,会多加一步,进入容器。

如果仅启动了一个mysql实例,则可以使用如下命令进入容器。

docker exec -it $(docker ps -a | grep mysql | awk '{print $1}') bash

其实就是:

docker exec -it containerid bash

查看容器id命令

docker ps -a