作者:PHPYeQ | 来源:互联网 | 2023-09-23 17:00
文章目录
- 目标
- 使用mysql镜像文件
- 测试
- 将mysql镜像提交到仓库
- 其他命令
- 特别注意
目标
-
了解使用mysql镜像
参考:[如何通过Docker快速搭建测试环境?](https://www.cnblogs.com/hg-super-man/p/10908216.html)
Docker 安装 MySQL
如何修改 docker 容器中 mysql 的端口号
更改docker下的mysql容器的配置文件
linux下使用docker创建并进入mysql的容器
在Docker中安装JDK
使用mysql镜像文件
$ docker pull mysql:5.7
$ $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 413be204e9c3 6 days ago 456MB
$ docker run -itd --name mysql-server1 -p 3307:3307 -e MYSQL_ROOT_PASSWORD=111 mysql:5.7-p 3307:3307 :映射容器服务的 3307 端口到宿主机的 3307 端口,外部主机可以直接通过 宿主机ip:3307 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=111:设置 MySQL 服务 root 用户的密码。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15c50777c383 mysql:5.7 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp mysql-server1
mysql 配置文件;
数据存储目录,以便挂载(PS: 若不挂载到宿主机,容器万一被删除掉了,数据都会丢失)
mysql 的日志logs
$ mkdir -p /usr/local/docker/mysql/config
$ docker cp mysql-server1:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config
$ mkdir -p /usr/local/docker/mysql/data
$ docker cp mysql-server1:/var/lib/mysql/ /usr/local/docker/mysql/data
$ mkdir -p /usr/local/docker/mysql/logs
$ docker cp mysql-server1:/logs /usr/local/docker/mysql/logs
$ docker rm -f mysql-server1
$ vi /usr/local/docker/mysql/config/mysqld.cnf
[mysqld]
port=3307
$ docker run -itd --name mysql-server1 -p 3307:3307 -v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /usr/local/docker/mysql/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111 mysql:5.7其他不变,额外添加了两个挂载子命令:-v/usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/docker/mysql/config/mysqld.cnf 文件上;-v/usr/local/docker/mysql/data:/var/lib/mysql: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/docker/mysql/data 目录下;-d: 后台运行容器
-p 将容器的端口映射到本机的端口
-v 将主机目录挂载到容器的目录
-e 设置参数
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15c50777c383 mysql:5.7 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp mysql-server1
$ docker exec -it mysql-server1 bash
或者
docker exec -it 容器ID /bin/bash
$ vim /etc/mysql/mysql.conf.d/mysqld.cnf
$ docker restart mysql-server1
或者 docker restart 容器id
$ docker exec -it mysql-server1 bash
$ mysql -uroot -p
剩下的操作,就是mysql 提供的语法了
ctrl+p+q例子 : root@15c50777c383:/
测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jlYn8dY-1586687431401)(index_files/1586661841314_4.png)]
将mysql镜像提交到仓库
由于私人仓库还没有建立,先提交至docker hub
$ docker tag mysql:5.7 1164014750/mysql:5.7
$ docker push 1164014750/mysql:5.7
https://hub.docker.com/repository/docker/1164014750/mysql
docker push 1164014750/mysql:5.7
其他命令
$ docker exec -it mysql-server1(容器id或者容器名称) bash
$ docker logs 容器id或者容器名称如果/my/custom/config-file.cnf是自定义配置文件的路径和名称,则可以mysql像这样启动容器(请注意,此命令仅使用自定义配置文件的目录路径):$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7可以将许多配置选项作为标志传递给mysqld。这将使您可以灵活地自定义容器而无需cnf文件。例如,如果您想更改所有表的默认编码和排序规则以使用UTF-8(utf8mb4),请运行以下命令:$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
$ docker run -it --rm mysql:tag --verbose --help
特别注意
参考:Docker官方映像(https://hub.docker.com/_/mysql?tab=description)
1.在主机系统上的适当卷上创建数据目录,例如/my/own/datadir
2.mysql像这样启动您的容器:
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag-v /my/own/datadir:/var/lib/mysql命令的一部分/my/own/datadir从底层主机系统/var/lib/mysql在容器内部安装目录,默认情况下,MySQL将在该目录中写入其数据文件。
大多数普通工具都可以使用,尽管在某些情况下它们的使用可能会有些麻烦,以确保它们可以访问mysqld服务器。确保这一点的一种简单方法是docker exec在同一容器中使用和运行该工具,类似于以下内容:$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
用于还原数据。您可以使用docker exec带-i标志的命令&#xff0c;类似于以下内容&#xff1a;$ docker exec -i some-mysql sh -c &#39;exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"&#39; < /some/path/on/your/host/all-databases.sql