谷粒商城学习-10-docker安装mysql

news/2024/7/8 9:10:02 标签: 学习, docker, mysql, 谷粒商城

文章目录

  • 一,拉取MySQL镜像
    • 1,搜索MySQL的Docker镜像
    • 2,拉取MySQL镜像
    • 3,查看已经拉取的镜像
  • 二,创建、启动MySQL容器
    • 1,使用docker run创建启动容器
    • 2,使用docker ps查看运行状态的容器
    • 3,验证容器是否可用
      • 3.1 使用docker命令进入mysql命令行客户端
      • 3.2 使用可视化的连接工具Dbeaver
    • 4,修改MySQL配置文件
  • 三,目录挂载和端口映射
    • 1,目录挂载 (Volume Mounting)
      • 原理
      • 作用
      • 示例
    • 2,端口映射 (Port Mapping)
      • 原理
      • 作用
      • 示例

本节主要是讲解如何用Docker安装MySQL,解释容器的基本知识,包括下载镜像、创建容器、启动容器、端口映射、目录挂载、进入容器等等。

一,拉取MySQL镜像

1,搜索MySQL的Docker镜像

下载镜像前可以先查询镜像仓库有哪些镜像,执行如下命令查询MySQL镜像。

docker search mysql

在这里插入图片描述
当然去Docker Hub搜索能看到更详细的信息。

2,拉取MySQL镜像

docker pull mysql:5.7

如上命令表示把标签为5.7的MySQL镜像拉取到本地。

  • docker pull 表示从镜像仓库拉取镜像
  • mysql:5.7 表示标签为5.7的mysql镜像,不同机构组织个人都可能上传mysql镜像,Docker Hub通过标签进行区分,如果不加标签,默认下载最新版本

3,查看已经拉取的镜像

docker images

在这里插入图片描述

二,创建、启动MySQL容器

docker_run_36">1,使用docker run创建启动容器

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

参数说明:

  • -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
  • -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
  • -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
  • -v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
  • -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
  • –name 给容器取的名称,便于区分容器
  • -d 表示以守护进程(daemon)模式运行容器,不影响当前shell窗口的操作

docker_ps_55">2,使用docker ps查看运行状态的容器

docker ps

可以看到一个名为mysql的容器正在运行。
在这里插入图片描述

3,验证容器是否可用

dockermysql_66">3.1 使用docker命令进入mysql命令行客户端

docker exec -it mysql mysql -uroot -proot

如下,可以连接到mysql的命令行工具,执行查询数据库的命令。
在这里插入图片描述

3.2 使用可视化的连接工具Dbeaver

在这里插入图片描述

4,修改MySQL配置文件

创建MySQL容器时,使用的是MySQL的默认配置,可以按需做一些更改,这里主要是改默认的字符配置信息。

创建一个my.cnf的mysql配置文件,因为已经把宿主机的目录和容器的目录做了映射,所以可以直接在宿主机修改配置文件,MySQL容器重启时会读这个目录下的配置。

vi /mydata/mysql/conf/my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

注意:解决MySQL连接慢的问题,可以在配置文件中加入如下,并重启 mysql

[mysqld]
skip-name-resolve

重启mysql容器

docker restart mysql

三,目录挂载和端口映射

在上一步创建Docker容器的命令中使用两个常用的参数:

  • -v 目录挂载
  • -p 端口映射

下面详细介绍下这两个参数,在我们创建Docker容器中常常使用这两个参数。

Docker 容器的目录挂载和端口映射是两种非常重要的特性,它们允许容器与宿主机之间进行数据和网络的交互。下面是这两种特性的原理和作用的详细解释,以及具体的示例。

1,目录挂载 (Volume Mounting)

原理

目录挂载允许宿主机文件系统中的目录被“挂载”到容器内。这意味着容器可以读写宿主机上的文件,反之亦然。挂载的目录在容器内部表现为普通的本地文件系统路径,但实际上它指向的是宿主机上的实际目录。

作用

  1. 数据持久化:即使容器被删除,挂载的数据仍然保留在宿主机上。
  2. 数据共享:多个容器可以挂载同一个目录,从而共享数据。
  3. 配置管理:可以将敏感的配置文件从宿主机挂载到容器,避免硬编码在镜像中。

示例

假设你有一个 MySQL 数据库容器,你希望数据存储在宿主机上以确保数据持久化。你可以使用如下命令:

docker run -d \
    --name mysql-container \
    -v /path/to/local/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=my-secret-pw \
    mysql:latest

在这个例子中,-v /path/to/local/data:/var/lib/mysql 表示宿主机上的 /path/to/local/data 目录被挂载到了容器内的 /var/lib/mysql 目录。这样,所有容器内的数据库文件都将保存在宿主机的指定目录中。

2,端口映射 (Port Mapping)

原理

端口映射允许容器内的网络端口与宿主机上的端口进行关联。这意味着外部网络可以通过宿主机的特定端口访问容器内的服务。Docker 在容器启动时创建这种映射关系。

作用

  1. 服务暴露:使容器内的服务可从外部网络访问。
  2. 端口重定向:可以将容器的多个端口映射到宿主机的不同端口,解决端口冲突。
  3. 网络隔离:通过选择性地暴露端口,增加网络安全性。

示例

假设你运行了一个 web 服务器容器,它监听在容器内部的 80 端口,但你想通过宿主机的 8080 端口访问它。你可以使用以下命令:

docker run -d \
    --name web-server \
    -p 8080:80 \
    nginx:latest

在这个例子中,-p 8080:80 表示宿主机上的 8080 端口被映射到容器内的 80 端口。因此,任何对宿主机 8080 端口的请求都会被转发到容器内的 web 服务器。


http://www.niftyadmin.cn/n/5536932.html

相关文章

勒索病毒入门级理解

勒索病毒是泛指一切通过锁定被感染者计算机系统或文件并施以敲诈勒索的新型计算机病毒。其特点和相关信息可以归纳如下: 一、定义与特征 定义:勒索病毒是一种恶意软件,它通过加密用户的文件或阻止用户访问计算机操作系统,以此要…

基于FreeRTOS+STM32CubeMX+LCD1602+AD5621(SPI接口)的DAC控制输出Proteus仿真

一、仿真原理图: 二、运行效果: 三、STM32CubeMX配置: 1)、GPIO配置: 2)、freertos配置: 四、软件部分: 1)、main主函数: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file …

如何选择视频号矩阵系统源码:关键要素与决策指南

在短视频和直播内容迅速崛起的今天,视频号矩阵系统源码成为了企业和个人创作者高效管理视频内容的重要工具。选择合适的视频号矩阵系统源码,可以极大提升内容发布的效率和质量,同时优化用户体验。本文将提供一套选择视频号矩阵系统源码的指南…

N-gram的pytorch代码实现

代码实现 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import matplotlib.pyplot as plt import matplotlib.ticker as tickerdef tri_gramizer(test_sentence):# 将单词序列转化为数据元组列表,# 其中的每个…

Oracle中http的post的用法和例子

在Oracle数据库中,直接执行HTTP POST请求并不是数据库核心功能的一部分。但是,你可以通过Oracle的PL/SQL程序结合一些额外的工具或库来实现这一功能。 以下是一个使用Oracle UTL_HTTP包(Oracle提供的用于HTTP通信的PL/SQL包)来发…

【Ubuntu】详细说说Parallels DeskTop安装和使用Ubuntu系统

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境二、Ubuntu系统的使用2.1 系统的下载2.2 系统的安装2.3 安装桌面版(可选)2.3.1 安装/更新apt2.3.2 安装桌面版2.3…

Qt的64位程序与32位程序的通信

目的 最近工作遇上了64位程序调用32位程序的问题,为什么调用32位程序,因为,客户方只提供了32位的程序,没有办法,只能这样,32位程序,当前也是很通用的程序,只能想办法解决64位程序调用32位的程序。 正式说法是这样: 在64位程序中调用32位的库是不被支持的,因为32位和…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日聚会(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…