在使用、学习MySQL的时候我们需要下载不同的版本的MySQL ,之前我们可以使用sandbox 快速搭建单节点或者一主多从的数据库。现在可以尝试使用 docker 利用已经存在的镜像迅速搭建一个单实例的数据库。
docker仓库拉取 mysql 8.0.22
选择 star最多的MySQL 镜像,当然也可以使用mariadb 或者percona-server的。
➜ ~ docker pull mysql:8.0.22
8.0.22: Pulling from library/mysql
bb79b6b2107f: Already exists
49e22f6fb9f7: Already exists
842b1255668c: Already exists
9f48d1f43000: Already exists
c693f0615bce: Already exists
8a621b9dbed2: Already exists
0807d32aef13: Already exists
a56aca0feb17: Already exists
de9d45fd0f07: Already exists
1d68a49161cc: Already exists
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d
Status: Downloaded newer image for mysql:8.0.22
我之前已经下载过 MySQL 8.0.22 的镜像文件,提示已经存在。
sudo docker run --restart=always --name=my8022 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.22 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
options说明:
–restart=always:重启策略
-d: 后台运行容器,并返回容器ID
-p: 端口映射,格式为:主机(宿主)端口:容器端口
–name: 为容器指定一个名称
-e MYSQL_ROOT_PASSWORD:设置数据库密码
–character-set-server:设置编码
–collation-server:设置校验字符集
docker run --name my8022
-p 3306:3306
-e MYSQL_ROOT_PASSWORD='xxxxxxyyy'
-d mysql:8.0.22
--innodb_buffer_pool_size=1G
--innodb_flush_method=O_DIRECT
-e 是传递环境变量
--innodb_buffer_pool_size
则是MySQL的系统参数。其实推荐将参数写到myf文件里面。
这个比较简单,指定不同的container name 就可以了。如果在同一台宿主机上 ,需要绑定不同的端口映射。
docker run --name mysql-latest
-p 3306:3306
-e MYSQL_ROOT_PASSWORD='123456'
-d mysql:latest
docker run --name my my8020
-p 3307:3306
-e MYSQL_ROOT_PASSWORD='123456'
-d mysql:8.0.20
通过容器卷的方式挂载到宿主机的指定目录。
docker run --restart=always --name=my8022 -p 3306:3306
--mount type=bind,src=/data/my3306/myf,dst=/etc/myf
--mount type=bind,src=/data/my3306/data,dst=/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.22 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
关于容器卷这里简单说一下 ,通常持久化数据有两种方式。
volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中。
-v/--volume,由(:)分隔的三个字段组成,卷名:容器路径:选项列表。选项列表可以ro/rw。
bind mounts:可以存储在宿主机系统的任意位置,这种方式比较常用。但是,bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。
--mount,由多个键值对组成,由,分隔,每个由一个>元组组成。type,值可以为 bind,volume,tmpfs。source,对于命名卷,是卷名。对于匿名卷,这个字段被省略。可能被指定为 source 或 src。destination,文件或目录将被挂载到容器中的路径。可以指定为 destination,dst 或 target。volume-opt 可以多次指定。
exec -ti a3b538b3404 /bin/bash
搜索镜像:docker search [OPTIONS] TERM
上传镜像:docker push [OPTIONS] NAME[:TAG]
下载镜像:docker pull [OPTIONS] NAME[:TAG]
提交镜像:docker commit [OPTIONS] CONTAINER NAME[:TAG]
构建镜像:docker build [OPTIONS] PATH
删除镜像:docker rmi [OPTIONS] IMAGE []
增加镜像标签:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
查看所有镜像:docker images [OPTIONS] [REPOSITORY[:TAG]]
启动/重启容器:docker start/restart CONTAINER
停止/强停容器:docker stop/ kill CONTAINER
删除容器:docker rm [OPTIONS] CONTAINER []
重命名容器:docker rename CONTAINER CONTAINER_NEW
进入容器:docker attach CONTAINER
执行容器命令:docker exec CONTAINER COMMAND
查看容器日志:docker logs [OPTIONS] CONTAINER
查看容器列表:docker ps [OPTIONS]
查看正在运行的容器:docker CONTAINER ls
CONTAINER 可以是 CONTAINER_ID 或者是 容器的名称。
一文了解Docker
show status和set gtid_mode 导致线程死锁案例
哪些因素会导致慢查询?
-The End-
本公众号长期关注于数据库技术以及性能优化,故障案例分析,数据库运维技术知识分享,个人成长和自我管理等主题,欢迎扫码关注。
本文发布于:2024-02-01 04:41:20,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170673368033928.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |