docker-compose启动mysql

前言

1)本文分三个部分:

  • 启动一个测试/开发级别的数据库。
  • 启动一个生产级别的数据库
  • 开发环境的一个自动化方案。让开发人员在宿主机上随时快速启动一个mysql数据库。

2)其他相关文档

1. 测试/开发使用

优点:

  • 简单
    你不需要关于mysql的知识即可在一个服务器上启动很多mysql数据库。
    简单使用中你也不需要更多关于容器的知识。
  • 高效
    即刻让一个数据库拔地而起。
  • 干净
    当你不用了,停止容器后不会有任何系统垃圾。

1.1 环境准备

已安装docker和docker-compose

1.2 docker-compose文件

创建mysql目录,目录下新建 docker-compose.yml 文件,内容如下:

version: '3'
services:
  db:
    image: 'docker.io/mysql:latest' #使用的镜像
    restart: always
    container_name: mysql  #容器名
    volumes:
      - ./data:/var/lib/mysql  #挂载目录,持久化存储
    ports:
      - '3306:3306'
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: "liubei@2021"   #设置root用户的密码

1.3 启动mysql

在刚才创建的mysql 目录下执行命令

# docker-compose up -d 

启动之后,数据库就可以正常使用了。

1.4 其他操作

  • 查看服务状态
# docker-compose ps
  Name                Command             State                 Ports
------------------------------------------------------------------------------------
mysql   docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
  • 停止服务
# docker-compose stop
Stopping mysql ... done
# docker-compose ps
  Name                Command             State    Ports
--------------------------------------------------------
mysql   docker-entrypoint.sh mysqld   Exit 0
  • 重启容器
# docker-compose restart
  • 关闭容器容器
# docker-compose down
Stopping mysql ... done
Removing mysql ... done
Removing network mysql_default
# docker-compose ps
Name   Command   State   Ports
------------------------------

说明:可以看到,stop的时候,容器是Exit状态。而down之后容器被彻底删除了,但是不用担心,我们已经对数据做了持久话存储,up之后数据还在。

2 生产级使用

说明:
此处只讨论mysql的创建,不介绍高可用或主从架构。
如果要做主从的话只需要放一个脚本或sql在 2.4中的 init目录下。

思路简述:
创建mysql目录,下边创建如下文件和目录

  • docker-compose.yml
    生命周期和编排文件
  • my.cnf
    mysql配置文件,挂载出来便于修改,同时也是对配置的持久化存储。
  • data目录
    将msyql的数据持久化存储以避免执行 down 后数据丢失。
  • init目录
    用来放 mysql的初始化脚本,如果data目录中有文件,则再会执行初始化。

2.1 docker-compose 文件

version: '3'
services:
  db:
    image: 'docker.io/mysql:latest'
    restart: always
    container_name: mysql
    volumes:
      - ./data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
      - ./init:/docker-entrypoint-initdb.d/
    ports:
      - '3306:3306'  #“宿主机端口号:容器内端口号”
    environment:
      MYSQL_ROOT_PASSWORD: "liubei@2021"
      MYSQL_USER: 'liubei'  # 创建普通用户
      MYSQL_PASSWORD: 'liubei@2021'     #普通用户密码
      MYSQL_DATABASE:  'liubeidb'  #创建一个库

2.2 my.cnf

说明:msyql的配置文件,下边只是一个示例,你可以根据需要更改

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/

2.3 data目录

可以不提前创建,容器启动的时候会自动创建并挂载。

2.4 init目录和初始化脚本

将启动脚本写放到init目录,给执行权限即可,可以是shell,可以是sql。如果你不需要就不放任何文件。数据库没有初始化时候会执行该脚本。

2.5 容器启动和操作

同上文 1.3 和 1.4,不赘述。

3 自动创建脚本

  • 说明:
    1)在宿主机中执行如下脚本,自动启动一个容器供开发测试使用。
    2)执行过程中需要一些交互式输入:安装位置、root密码、使用端口、库名。

  • 实际应用
    我将这个脚本放在ftp服务器上,开发人员需要启动mysql的时候执行

# wget  ftp://10.252.xxx.xxx/script/x'x'x'x.sh -O xxx.sh && bash xxx.sh

即可直接启动一个开发/测试级的 msyql数据库

#!/bin/bash
########## 定义变量 ##########
read -p "输入安装的位置(回车默认/usr/local/mysql ) " home_dir
if [ -z "${home_dir}" ];then
        home_dir=/usr/local/mysql
fi

read -p "输入密码(回车默认liubei@2021):" mysql_passwd
if [ -z "${mysql_passwd}" ];then
        mysql_passwd="liubei@2021"
fi

read -p "输入端口(默认3306):" mysql_port
if [ -z "${mysql_port}" ];then
        mysql_port=3306
fi

read -p "新建库(默认liubeidb):" mysql_db
if [ -z "${mysql_db}" ];then
        mysql_db=liubeidb
fi
############## yml文件 ##################
mkdir ${home_dir} -p
cat > ${home_dir}/docker-compose.yml << EOF
version: "3.1"
services:
  mysql:
    image: docker.io/mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${mysql_passwd}
      MYSQL_DATABASE: ${mysql_db}
      TZ: Asia/Shanghai
    restart: always
    ports:
      - ${mysql_port}:3306
    volumes:
      - ./data:/var/lib/mysql

EOF

cd ${home_dir}
docker-compose up -d
docker ps

在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Docker Compose可以轻松地启动和停止多个容器,并且可以通过一个简单的配置文件来定义容器之间的关系和依赖关系。在引用中提到的docker-compose启动mysql,是指使用Docker Compose来启动一个MySQL数据库容器。通过配置docker-compose.yml文件,可以指定MySQL容器的镜像、端口、数据卷等信息。启动后,可以使用docker-compose ps命令查看容器状态,使用docker-compose stop命令停止容器,使用docker-compose restart命令重启容器,使用docker-compose down命令关闭容器并删除相关资源。除了使用Docker Compose,还可以使用其他方式来启动MySQL容器,如使用Helm启动MySQL高可用集群、使用Docker Compose启动单节点MySQL等。同时,Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Docker Compose可以轻松地启动和停止多个容器,并且可以通过一个简单的配置文件来定义容器之间的关系和依赖关系。在引用中提到的docker-compose启动mysql,是指使用Docker Compose来启动一个MySQL数据库容器。通过配置docker-compose.yml文件,可以指定MySQL容器的镜像、端口、数据卷等信息。启动后,可以使用docker-compose ps命令查看容器状态,使用docker-compose stop命令停止容器,使用docker-compose restart命令重启容器,使用docker-compose down命令关闭容器并删除相关资源。除了使用Docker Compose,还可以使用其他方式来启动MySQL容器,如使用Helm启动MySQL高可用集群、使用Docker Compose启动单节点MySQL等。同时,还可以使用web管理工具如phpMyAdmin来管理MySQL数据库。在测试和开发环境中,使用Docker Compose启动MySQL容器可以方便地进行开发和测试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄德公笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值