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

文章目录

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

一,拉取MySQL镜像

1,搜索MySQL的Docker镜像

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

bash 复制代码
docker search mysql

当然去Docker Hub搜索能看到更详细的信息。

2,拉取MySQL镜像

bash 复制代码
docker pull mysql:5.7

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

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

3,查看已经拉取的镜像

bash 复制代码
docker images

二,创建、启动MySQL容器

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

bash 复制代码
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窗口的操作

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

bash 复制代码
docker ps

可以看到一个名为mysql的容器正在运行。

3,验证容器是否可用

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

bash 复制代码
docker exec -it mysql mysql -uroot -proot

如下,可以连接到mysql的命令行工具,执行查询数据库的命令。

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

4,修改MySQL配置文件

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

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

bash 复制代码
vi /mydata/mysql/conf/my.cnf

bash 复制代码
[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。

bash 复制代码
[mysqld]
skip-name-resolve

重启mysql容器

bash 复制代码
docker restart mysql

三,目录挂载和端口映射

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

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

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

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

1,目录挂载 (Volume Mounting)

原理

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

作用

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

示例

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

sh 复制代码
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 端口访问它。你可以使用以下命令:

sh 复制代码
docker run -d \
    --name web-server \
    -p 8080:80 \
    nginx:latest

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

相关推荐
趴着喝可乐30 分钟前
CentOS7安装部署双版本MySQL
mysql·centos
猫吻鱼36 分钟前
【MySQL05】【 undo 日志】
mysql
林鸿群1 小时前
Docker运行MSSQL2022
运维·docker·容器
A-刘晨阳1 小时前
ELFK 8.12.2 部署 -- docker部署方式⚽
linux·运维·elk·docker·容器
sealaugh321 小时前
spring boot(学习笔记第十二课)
spring boot·笔记·学习
会翻身的嵌入式咸鱼2 小时前
蓝桥杯开发板STM32G431RBT6高阶HAL库学习FreeRtos——完成第一个小项目点灯
stm32·学习·蓝桥杯
源代码:趴菜2 小时前
MySQL表操作
数据库·mysql
清华kenny2 小时前
docker部署redis/mongodb/
redis·mongodb·docker
mosi3572 小时前
使用C#进行MySQL删改查操作
mysql·c#
Alice_JC2 小时前
《昇思25天学习打卡营第11天|计算机视觉-ResNet50迁移学习》
深度学习·学习·计算机视觉·迁移学习