docker-compose+mysql | 构建数据库服务

构建镜像

1. blog_db

Dockerfile文件编写

# 使用官方 MySQL 镜像作为基础镜像
FROM mysql:8.0

最后使用buildx命令构建镜像并上传至仓库

docker buildx build -t chenxuefan/blog_db:v1 --platform linux/amd64,linux/arm64 . --push

项目文件

通过配置项目文件与容器中的路径进行映射,可以实时备份容器中的数据,以防项目迁移或容器损坏造成数据丢失。要准备下面几项数据库映射文件,都需要从实际的mysql应用中获取,这里可以通过创建一个测试容器,然后从容器中复制相关文件到本地,进行后续的映射。

image-20230606204311796

1. 默认启动脚本

blog_db/init-scripts/init-databases.sql

CREATE DATABASE IF NOT EXISTS blog_db;
CREATE DATABASE IF NOT EXISTS blog_db_bak;

2. config

数据库配置文件,如下操作:

  1. 启动容器 - docker run -itd --name chenxuefan/blog_db:v1
  2. 复制文件 - docker cp blog_db:/etc/mysql ./blog_db
  3. 更名mysqlconfig

3. data

数据库数据文件,如下操作:

  1. 复制文件 - docker cp blog_db:/var/lib/mysql ./blog_db
  2. 更名mysqldata

4. log

数据库日志文件,如下操作:

  1. 复制文件 - docker cp blog_db:/var/log ./blog_db

编写 Docker Compose 模板文件

version: "2.4"

services:

  blog_db:
    image: chenxuefan/blog_db:v1 #
    container_name: blog_db
    restart: 'always'
    environment:
      MYSQL_ROOT_PASSWORD: 1236
      LANG: C.UTF-8
    volumes:
      - ./blog_db/init-scripts:/docker-entrypoint-initdb.d
      - ./blog_db/config:/etc/mysql
      - ./blog_db/data:/var/lib/mysql
      - ./blog_db/log:/var/log

    ports:
      - "6606:3306"
    command: --lower_case_table_names=1 --init-file /docker-entrypoint-initdb.d/init-databases.sql
    networks:
      - blog

  adminer:
    image: adminer
    container_name: blog_adminer
    restart: always
    ports:
      - 8080:8080
    networks:
      - blog


networks:
  blog:
    driver: bridge
  • --lower_case_table_names=1指定表名的大小写规则。设置为1时,表示将表名转换为小写存储和比较。

    以下是一些使用--lower_case_table_names参数的示例:

    • --lower_case_table_names=0: 表名区分大小写,例如"Table1"和"table1"被视为不同的表。
    • --lower_case_table_names=1: 表名转换为小写,例如"Table1"和"table1"被视为相同的表。
    • --lower_case_table_names=2: 表名转换为小写,但在文件系统中保留原始的大小写形式。这个选项在跨平台迁移或与其他大小写敏感的系统进行兼容时可能会有用。
  • --init-file /docker-entrypoint-initdb.d/init-databases.sql指定一个SQL脚本文件,用于在MySQL服务器启动时执行初始化操作。该脚本文件的路径是/docker-entrypoint-initdb.d/init-databases.sql

这些参数通常用于在启动MySQL容器时自定义配置和初始化数据库。

还设计了一个adminer服务,用于提供可视化界面进行浏览数据库信息,https://localhost:8080 ,如下:

image-20230606205234090

后记

btw,明天就是一年一度的高考了呀,窗外的深圳下起了雨,一下子又想起了我当年高考前一天的样子,也是下起瓢泼大雨,印象深刻那天走过学校大门、晚上从科学楼自习完走回宿舍,感受到脚下雨水冲刷过脚踝的清凉,不过很奇迹的是,隔天一直到高考结束,两天都是艳阳高照,太阳公公也好像在为我们加油,所以高考于我,记忆中都是有一部分有关下雨的情节。

然后高考也结束了这么多年,会很怀念曾经很专注的那些时光,这些都是后来的自己很少能够找回来的一种状态,后来学了编程,也由衷感谢后来一步步创造了很多东西的自己。似乎在编程走进自己生命中之后的日子里,很多时候也能发现自己很专注于眼前的代码上面,忘记了温饱、身体的疲惫,回过头来,已经肚子很饿、神情呆滞、脑子昏沉、腰颈酸疲、还会偶有心脏刺痛。不过每当这些时刻,我都会特别陶醉。

所以于我而言,高考更多为后来的自己赋予了精神层面的启示,鼓励自己后来成就或创造了很多东西,启示自己还可以更专注、更强大、做得更好,启示自己其实可以做得很好,因为在那个时候你也做得很好了不是吗。


1326 字