MySQL在Docker环境下运行基础
墨墨导读:MySQL在Docker环境下运行的基础操作,本文从Docker介绍、安装Docker、MySQL安装部署几个方面展开介绍。
1. Docker介绍
1.1. docker是一种linux容器技术。容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求。每个容器内运行一个应用,不同的容器之间相互隔离,容器之间也可以建立通信机制。容器的创建和停止都十分快速,资源需求远远低于虚拟机。
优点:
- 能高效地构建应用。
- 能快速的交付和部署
- 高效的资源利用
- 轻松的迁移扩展
- 简单的更新管理
1.2. 容器的发展史:
1.3. Docker容器的运行方式:(三大核心组件)
- 镜像(images):类似虚拟机镜像
- 仓库(Repository):集中存放镜像的地方。每个服务器上可以有多个仓库。
- 容器(containers):镜像的一个运行实例,类似linux系统环境,运行和隔离应用
2. 安装docker
2.1. 先决条件
- 必须是64位CPU架构的计算机,Docker目前不支持32位CPU;
- 运行Linux3.8或更高版本内核,CentOS的内核版本不能低于3.10;
- 内核必须支持一种合适的存储驱动,可以是Device Manager、AUFS、vfs、btrfs、以及默认的驱动Device Mapper中的一个;
- 内核必须支持并开启cgroup和命名空间namespace功能。
2.2. 检查前提条件
- 内核 通过uname命令来检查内核版本信息。
- 检查Device Mapper ls -l /sys/class/misc/device-mapper
2.3. 安装docker
环境准备: Kernel 3.10+
(1)检查系统的内核版本,返回的值大于3.10即可
[root@ss30 ~]# uname -r
3.10.0-1127.el7.x86_64
(2)使用sudo或root权限的用户登入中端
(3)保证apt-get是最新版本的,执行如下命令:
命令:yum update [root@ss30 ~]# yum update
安装docker:
命令:yum -y install docker.io (apt-get install -y docker.io)
用此命令安装的可能不是docker的最新版本,要想安装docker的最新版本可以使用如下命令:
命令:curl -s https://get.docker.com | sh
[root@ss30 redis6.0]# service docker start 或systemctl start docker.service
[root@ss30 redis6.0]# ps -ef |grep docker
root 6966 1 1 19:51 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 7102 1862 0 19:51 pts/0 00:00:00 grep --color=auto docker
[root@ss30 redis6.0]# docker version
备注:移除Docker
yum -y remove docker-engine
3. MySQL安装部署
3.1. 拉去镜像 访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags
下载镜像
[root@ss30 softwares]# docker pull mysql:5.7.30
[root@ss30 img]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.30 a4fdfd462add 9 days ago 448MB
备注:
docker pull [OPTIONS] NAME [:TAG] :此命令的作用是从docker远程的仓库拉取镜像到本地 docker images [OPTIONS] [REPOSITORY[:TAG]] :此命令是来查看我们本机都有哪些镜像,也可以验证我们的pull是否执行成功
查看容器运行情况
[root@ss30 ~]# docker container ls
[root@ss30 ~]# docker ps ##列出容器
备注: docker ps [OPTIONS]说明:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- –format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器。
- –no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
3.2. 简单启动 mysql
查看所有container
[root@ss30 ~]# docker images
[root@ss30 ~]# docker run -p 3306:3306 --name mysql5730 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.30
[root@ss30 ~]# docker container ls
备注:
- –name:为容器指定一个名称,此处命名为mysql5.7
- -e:配置信息,此处配置mysql的root用户的登陆密码
- -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
- -d:后台运行容器,并返回容器ID; 内部映射的端口改成其他端口时候,需要进入docker内 把对应的端口my.cnf进行配置
登录容器:docker exec -it 容器ID bash
docker exec -it b2240680eb53 /bin/bash
3.3. 登录mysql
查看所有container
[root@ss30 openssl-1.1.1g]# docker ps -a
[root@ss30 openssl-1.1.1g]# docker start fd014d8ed34b ##关闭使用stop命令
[root@ss30 openssl-1.1.1g]# docker ps
登录docker之后 登录数据库:
进入mysql容器
[root@ss30 ~]# docker exec -it mysql bash
root@fd014d8ed34b:/#
root@fd014d8ed34b:/# mysql -uroot -p123456
3.4. 目录映射 主机上创建对应的映射目录:
[root@ss30 mysql]# rm -rf /usr/local/docker/mysql/
[root@ss30 docker]# mkdir -p /usr/local/docker/mysql/conf
[root@ss30 docker]# mkdir -p /usr/local/docker/mysql/data
[root@ss30 docker]# mkdir -p /usr/local/docker/mysql/logs
配置文件my.cnf MySQL的默认配置中可以找到/etc/mysql/my.cnf,这可能! includedir /etc/mysql/conf.等额外的目录d或/etc/mysql/mysql.conf.d(https://hub.docker.com/_/mysql/)
#vim /usr/local/docker/mysql/conf/my.cnf
[mysqld]
server_id = 1303306
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
port = 3306
transaction_isolation = READ-COMMITTED
max_connections = 1000
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
pid_file = /var/run/mysqld/mysqld.pid
log_error = /var/log/mysql/error.log
# chmod 644 /usr/local/docker/mysql/conf/my.cnf
启动数据库
#docker run -p 3306:3306 --name mysql
-v /usr/local/docker/mysql/conf:/etc/mysql
-v /usr/local/docker/mysql/logs:/var/log/mysql
-v /usr/local/docker/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
-d mysql:5.7.30
备注:-v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
备注:映射本地目录之后,但MySQL容器出现故障之后,可通过文件迁移,挂载方式,用原有数据搭建新容器,提供服务。
3.5. 备份
mysqldump备份命令:
[root@ss30 opt]# docker exec 327a1c4866ee sh -c 'exec mysqldump -uroot -p123456 -P3309 --single-transaction --master-data --all-databases' > /opt/all-databases.sql
4. 总结
通过实践,在docker中的MySQL部署和运维,还是比较简单的。实际测试性能损耗也在10%,当然主要个人认为还是网络方面的延迟。IO和CPU 已经不再是瓶颈。
容器方面,更想进一步深入的话,需要理解几个核心点: 1.Docker的数据持久化:目录的映射 和 volume方式 2.资源方面的隔离 Namespace 和 CGroup 3.容器服务编排:Mesos Swarm Kubernetes 4.网络连接方式的选择
墨天轮原文链接:https://www.modb.pro/db/29222
- QT程序在发布的时候应注意的地方
- 漂洋过海! 英文域名d.me小六位易主
- Python基础09 面向对象的进一步拓展
- QT中获取选中的radioButton的两种方法
- QT中根据ID设置radio按钮
- QWebView在 Qt 5.x中编译出错:File not found: main.obj
- Qt实现小功能之列表无限加载
- Python基础08 面向对象的基本概念
- 如何选择合适的PaaS
- 使用Qt installer framework制作安装包
- Qt Style Sheet实践(三):QCheckBox和QRadioButton
- 堆排序
- 剑指OFFER之旋转数组的最小数字(九度OJ1386)
- Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 聊聊dubbo-go的nacosRegistry
- 聊聊dubbo-go的PrometheusReporter
- 聊聊dubbo-go的apolloConfiguration
- 聊聊dubbo-go的DefaultHealthChecker
- 一文搞懂matplotlib中的颜色设置
- pyecharts极简入门教程
- Linux gdb+valgrind调试
- matplotlib基础绘图命令之hist
- Python|一文详解数据预处理
- 安排上了!PC人脸识别登录,出乎意料的简单
- valgrind使用介绍
- 实用!一键生成数据库文档,堪称数据库界的Swagger
- 算法集锦(2)|scikit-learn| 如何利用文本挖掘推荐Ted演讲
- 算法集锦(3)|采用医疗数据预测糖尿病的算法
- 谁说Cat不能做链路跟踪的,给我站出来