【更新】Docker新手入门教程2:在Windows系统通过compose创建多个mysql镜像并配置应用

文章目录


前言

在window下通过Docker创建mysql容器可方便项目调试,同时便于项目快速部署


一、运行Docker init生成docker配置文件

创建一个新的项目文件夹,并在CMD中打开执行docker init指令;

在弹出的第一个对话框中选择other;

Docker 配置文件直接创建完成

可以查看在项目文件夹下创建了4个文件

  • .Dockerignore文件用于Docker配置或将项目文件copy到镜像时忽略的文件;
  • Dockerfile文件用于保存创建Docker镜像时的配置
  • compose.yaml文件用于创建Docker容器时需要的配置文件,如通过镜像创建多容器,配置容器中的mysql配置
  • README.Docker.md文件用于保存创建Docker项目时的帮助信息

二、修改创建镜像的配置文件

1、添加镜像挂载点

````在这里插入代码片`

使用最新版本的 MySQL 官方镜像作为基础镜像

FROM mysql:latest

设置环境变量,指定默认数据库名称

ENV MYSQL_DATABASE=my_db

挂载数据卷,以便持久化存储 MySQL 数据库文件

VOLUME [ "/var/lib/mysql" ]
VOLUME [ "/var/log/" ]
VOLUME [ "/etc/mysql/conf.d" ]

暴露 MySQL 默认端口

EXPOSE 3306

设置容器启动时运行的命令

CMD [ "mysqld" ]

复制代码
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7ec51551c30b49419dffd91d794cd0cb.png)

## 三、【拉取镜像】

> 在创建Docker镜像前如果还没有预下载镜像或直接创建镜像失败时可先从网上将镜像先拉取到本地再通过拉取的镜像创建自定义镜像更为方便  
>
> 在网络通畅的情况下可以方便从官网检查可拉取的目标镜像可用版本号  
>
> 如果无法拉取镜像则后面也无法直接创建自定义镜像,请查找国内相关代理,并配置镜像源

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e1ccbdef43554892a5eacc617f448848.png)

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/140df3f498c14771bdc96aad133a860f.png)

## 四、生成Docker 镜像

通过Docker build 创建Docker镜像
> * 查看Docker build 指令参数及可选项: [Docker build](https://docs.docker.com/reference/cli/docker/build-legacy/)
> * 也可以通过Docker \[指令\] --help在命令行中查看指令参数及说明

通过Docker build 创建镜像

    	docker build -t image_myfirstsql .

#### 查看生成的镜像

通过指令Docker image ls来查看docker中现有的镜像,如果包含刚刚创建的镜像名称,则镜像创建成功

![查看镜像](https://i-blog.csdnimg.cn/direct/5d79357282e84d34bb7392dbb426686c.png)  

也可以通过Docker desktop来查看镜像列表

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/756f70fe5e37414e825763e769883f9f.png)

## 五、修改Compose配置文件

* 通过Compose文件可以创建多个容器,并分别配置容器的的环境及状态
* 在容器里可以配置mysql相关设置,如账户及密码、容器以怎么状态运行、主机挂载卷

    services:
      my_local_sql1:
        image: image_myfirstsql # 使用的 Docker 镜像
        container_name: my_local_sql1 # 容器名称
        restart: always # 容器总是重启
        user: root # 以 root 用户运行
        environment:
          MYSQL_ROOT_PASSWORD: 123 # MySQL root 用户的密码
          MYSQL_DATABASE: my_db # 初始化数据库的名称
          MYSQL_USER: my_user # MySQL 用户名
          MYSQL_PASSWORD: 123 # MySQL 用户的密码
          MYSQL_TZ: Asia/Shanghai # 设置时区
          TZ: Asia/Shanghai # 设置时区
        expose:
          - 3306 # 暴露的端口
        ports:
          - 3138:3306 # 映射主机的 3138 端口到容器的 3306 端口
        volumes:
          - "C:\\Users\\reedi\\Desktop\\MyFirstDocker\\mysql1\\volume:/var/lib/mysql" # 挂载主机目录到容器
          - "C:\\Users\\reedi\\Desktop\\MyFirstDocker\\mysql1\\log:/var/log" # 挂载主机目录到容器
          - "C:\\Users\\reedi\\Desktop\\MyFirstDocker\\mysql_confg\\config:/etc/mysql/conf.d/" # 挂载主机目录到容器

      my_local_sql2:
        image: image_myfirstsql # 使用的 Docker 镜像
        container_name: my_local_sql2 # 容器名称
        restart: always # 容器总是重启
        user: root # 以 root 用户运行
        environment:
          MYSQL_ROOT_PASSWORD: 123 # MySQL root 用户的密码
          MYSQL_DATABASE: my_db # 初始化数据库的名称
          MYSQL_USER: my_user # MySQL 用户名
          MYSQL_PASSWORD: 123 # MySQL 用户的密码
          TZ: Asia/Shanghai # 设置时区
        expose:
          - 3306 # 暴露的端口
        ports:
          - 3139:3306 # 映射主机的 3139 端口到容器的 3306 端口
        volumes:
          - "C:\\Users\\reedi\\Desktop\\MyFirstDocker\\mysql2\\volume:/var/lib/mysql" # 挂载主机目录到容器
          - "C:\\Users\\reedi\\Desktop\\MyFirstDocker\\mysql2\\log:/var/log" # 挂载主机目录到容器
          - "C:\\Users\\reedi\\Desktop\\MyFirstDocker\\mysql_confg\\config:/etc/mysql/conf.d/" # 挂载主机目录到容器

* 需要修改变量image:\[你创建的镜像\],Ports:\[你设置的port:容器内port端口\]
* 通过将mysql/conf.d绑定到主机上,即可达到在主机上修改mysql的配置的目的
* 修改mysql配置后需要重启mysql才能启作用

## 3、配置Mysql

    [mysqld]
    log_timestamps=SYSTEM  # 设置日志时间戳为系统时间
    character-set-server=utf8mb4  # 设置服务器字符集为utf8mb4
    collation-server=utf8mb4_unicode_ci  # 设置服务器排序规则为utf8mb4_unicode_ci
    log_error = /var/log/mysql/error.log  # 错误日志文件路径
    general_log = 1  # 启用通用查询日志
    general_log_file = /var/log/mysql/general.log  # 通用查询日志文件路径
    slow_query_log = 1  # 启用慢查询日志
    slow_query_log_file = /var/log/mysql/slow.log  # 慢查询日志文件路径

    [client]
    default-character-set=utf8mb4  # 设置客户端默认字符集为utf8mb4

    [mysql]
    default-character-set=utf8mb4  # 设置MySQL命令行工具默认字符集为utf8mb4

## 六、生成Docker容器

* 通过Docker-compose up -d来生成容器并生成
* 通过Docker container ls来查看创建的容器

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4f908464caae447791d089a6c518b23e.png)  

也可以通过Docekr desktop查看容器

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/696688f0abc24c748864805ca6efbaed.png)

## 七、检查容器创建状态

通过vs中的数据库插件检查数据库状态  
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/174773bcfe99406385ff35670f9e3568.png)

* 检查mysql连接配置,确信连接正常
* 如下图确认连接  
  ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ab641a81501443998fdc973524718ba5.png)  
  连接完成后,确信数据库创建成功,可确认配置的my_db库创建成功  
  ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1f3de67fee334740a8ca933891b59093.png)

*** ** * ** ***

## 总结

通过docker 创建mysql容器可以方便进行调试,便于项目快速开发
> 可通过git 拉取代码库:https://github.com/Pitt-ding/docker_sql.git
相关推荐
古木20193 分钟前
Node.JS 版本管理工具 Fnm 安装及配置(Windows)
windows·node.js
享受 生活3 分钟前
【docker】docker desktop 在windows上支持 host模式
运维·docker·容器
m0_748230447 分钟前
【MySQL】数据库开发技术:内外连接与表的索引穿透深度解析
android·mysql·数据库开发
观测云31 分钟前
Docker Container 可观测性最佳实践
运维·docker·容器
m0_748251521 小时前
Linux(CentOS)安装 MySQL
linux·mysql·centos
木卫二号Coding1 小时前
docker-开源nocodb,使用已有数据库
数据库·docker·开源
dntktop1 小时前
维克日记:私密写作新选择,轻松记录生活点滴
windows
匹马夕阳3 小时前
容器化平台Docker初识
运维·docker·容器
无名之逆4 小时前
lombok-macros
开发语言·windows·后端·算法·面试·rust·大学期末
web135085886355 小时前
9. 大数据集群(PySpark)+Hive+MySQL+PyEcharts+Flask:信用贷款风险分析与预测
大数据·hive·mysql