文章目录
- 一,拉取MySQL镜像
- 二,创建、启动MySQL容器
-
- [1,使用docker run创建启动容器](#1,使用docker run创建启动容器)
- [2,使用docker ps查看运行状态的容器](#2,使用docker ps查看运行状态的容器)
- 3,验证容器是否可用
-
- [3.1 使用docker命令进入mysql命令行客户端](#3.1 使用docker命令进入mysql命令行客户端)
- [3.2 使用可视化的连接工具Dbeaver](#3.2 使用可视化的连接工具Dbeaver)
- 4,修改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)
原理
目录挂载允许宿主机文件系统中的目录被"挂载"到容器内。这意味着容器可以读写宿主机上的文件,反之亦然。挂载的目录在容器内部表现为普通的本地文件系统路径,但实际上它指向的是宿主机上的实际目录。
作用
- 数据持久化:即使容器被删除,挂载的数据仍然保留在宿主机上。
- 数据共享:多个容器可以挂载同一个目录,从而共享数据。
- 配置管理:可以将敏感的配置文件从宿主机挂载到容器,避免硬编码在镜像中。
示例
假设你有一个 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 在容器启动时创建这种映射关系。
作用
- 服务暴露:使容器内的服务可从外部网络访问。
- 端口重定向:可以将容器的多个端口映射到宿主机的不同端口,解决端口冲突。
- 网络隔离:通过选择性地暴露端口,增加网络安全性。
示例
假设你运行了一个 web 服务器容器,它监听在容器内部的 80 端口,但你想通过宿主机的 8080 端口访问它。你可以使用以下命令:
sh
docker run -d \
--name web-server \
-p 8080:80 \
nginx:latest
在这个例子中,-p 8080:80
表示宿主机上的 8080 端口被映射到容器内的 80 端口。因此,任何对宿主机 8080 端口的请求都会被转发到容器内的 web 服务器。