谷粒商城学习-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 服务器。

相关推荐
微信-since811924 分钟前
[ruby on rails] 安装docker
后端·docker·ruby on rails
PandaCave16 分钟前
vue工程运行、构建、引用环境参数学习记录
javascript·vue.js·学习
yuwinter21 分钟前
鸿蒙HarmonyOS学习笔记(2)
笔记·学习·harmonyos
JH307328 分钟前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
red_redemption43 分钟前
自由学习记录(23)
学习·unity·lua·ab包
幽兰的天空1 小时前
默语博主的推荐:探索技术世界的旅程
学习·程序人生·生活·美食·交友·美女·帅哥
吴半杯2 小时前
gateway漏洞(CVE-2022-22947)
docker·kubernetes·gateway
今天我刷leetcode了吗2 小时前
docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker
tcp/ip·docker·电脑
沐泽Mu2 小时前
嵌入式学习-C嘎嘎-Day05
开发语言·c++·学习
你可以叫我仔哥呀2 小时前
ElasticSearch学习笔记三:基础操作(一)
笔记·学习·elasticsearch