文章目录
- 1、拉取镜像
- 2、运行容器
- 3、进入容器
- 方式一
- 方式二
- 方式三
- 容器进入后连接mysql和在宿主机连接mysql的区别
- 持久化数据
- 持久化数据最佳实践
1、拉取镜像
docker pull mysql
2、运行容器
docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 3307:3306
:将主机的3307端口映射到容器的3306端口,因为我主机还有一个 mysql 使用了 3306。
-d
:后台运行
--name mysql-container
:给容器起一个名字叫 mysql-container
-e MYSQL_ROOT_PASSWORD=123456
: 设置 MySQL 的 root 用户密码
mysql:latest
: 使用 MySQL 镜像,并指定使用最新版本。你也可以指定特定版本号,例如 mysql:8.0。
执行后会生成一串 hash,也就是这个容器的 id,然后我们使用 docker ps
查看所有容器的运行状况
3、进入容器
方式一
docker exec -it mysql-container /bin/bash
mysql -u root -p
-it 是 Docker 命令中用于设置交互式终端的参数。具体含义如下:
-i: 表示保持标准输入打开,即允许你通过键盘输入。
-t: 表示分配一个伪终端(pseudo-TTY),即为容器分配一个伪终端设备。
方式二
你也可以直接运行命令
docker exec -it mysql-container mysql -uroot -p
退出一般使用 exit 或者 quit
方式三
直接在客户端远程连接,这里注意要指定端口号为 3307
mysql -h 127.0.0.1 -P 3307 -u root -p
直接用一些客户端工具,注意这里的端口号填写刚刚设置的端口号
容器进入后连接mysql和在宿主机连接mysql的区别
可以看到,方式一和方式二是进入容器后才连接的mysql,方式三是在宿主机连接的 mysql,那么有什么不同吗?
容器环境隔离:
进入容器并在容器内运行 MySQL 客户端命令可以让你直接与容器内的 MySQL 服务进行交互。这有助于在容器环境中调试和执行数据库相关操作。
数据卷挂载:
如果容器内使用了数据卷挂载(Volume Mounting),即容器内的 MySQL 数据存储在宿主机上的某个目录,你可能需要进入容器来查看或操作这些数据。
容器内环境:
有时容器内可能配置有一些特定的环境或工具,进入容器可以方便你直接使用这些环境。
执行其他容器内操作:
进入容器还允许你执行其他容器内的操作,例如查看容器内部的文件结构、执行脚本等。
然而,在一些简单的情况下,直接在宿主机上使用 MySQL 客户端连接容器内的 MySQL 服务也是可行的。这通常适用于只需要执行一些简单的查询或操作而不涉及到容器内部的详细环境时。
持久化数据
我们修改一下运行容器的命令,添加 -v 参数
docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -v /Users/zhangyu/web/web-all/mysql-all/docker-sourcedata:/var/lib/mysql mysql
-v /Users/zhangyu/web/web-all/mysql-all/docker-sourcedata:/var/lib/mysql
:使用数据卷将 MySQL 数据目录 (/var/lib/mysql) 映射到宿主机的一个路径 (/Users/zhangyu/web/web-all/mysql-all/docker-sourcedata)。这样做可以使 MySQL 数据持久化,即使容器停止和删除后,数据仍然保存在宿主机上。
可以看到我运行完之后,立马就有初始化的数据了,而且我删除这个容器后数据依然存在宿主机目录
但是这样做,如果我已经启动了一个容器,数据库也使用了,那么我必须删除掉这个容器才能重新启动和这个一样的,因为在 Docker 中,一旦容器启动,通常来说,其文件系统和数据是在容器内部的。有一个比较好的实践是这样的
持久化数据最佳实践
1、创建一个数据卷容器:
docker run --name mysql-data-container -v /path/to/mysql/data:/var/lib/mysql busybox
这个命令创建了一个名为 mysql-data-container 的容器,并将宿主机上的 /path/to/mysql/data 目录挂载到容器内的 /var/lib/mysql。这样,mysql-data-container 将成为一个专门用于持久化 MySQL 数据的数据卷容器。
2、创建一个 MySQL 容器并挂载数据卷:
docker run --name mysql-container --volumes-from mysql-data-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:latest
这个命令启动了一个名为 mysql-container 的 MySQL 容器,并使用了 --volumes-from 参数,将 mysql-data-container 的数据卷挂载到了 MySQL 容器中。
–volumes-from:用于将容器的卷挂载到另一个容器的参数。
语法:docker run --volumes-from <source_container> ...
这种方法允许你在容器已经启动的情况下为其添加数据卷。请注意,在 Docker 中,一旦容器启动后,其文件系统通常是不可更改的,因此通过这种方式挂载数据卷是一种常见的实践。