MySQL在Docker环境下运行基础

互联网全栈架构

共 4931字,需浏览 10分钟

 ·

2020-09-15 07:27

墨墨导读: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 -r3.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 dockerroot       6966      1  1 19:51 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockroot       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 imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEmysql               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 bashroot@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                          = 1303306character_set_server               = utf8mb4collation_server                   = utf8mb4_unicode_ciport                               = 3306transaction_isolation              = READ-COMMITTEDmax_connections                    = 1000datadir                            = /var/lib/mysqlsocket                             = /var/run/mysqld/mysqld.sockpid_file                           = /var/run/mysqld/mysqld.pidlog_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.网络连接方式的选择


1. 人人都能看懂的 6 种限流实现方案!

2. 一个空格引发的“惨案“

3大型网站架构演化发展历程

4Java语言“坑爹”排行榜TOP 10

5. 我是一个Java类(附带精彩吐槽)

6. 看完这篇Redis缓存三大问题,保你能和面试官互扯

7. 程序员必知的 89 个操作系统核心概念

8. 深入理解 MySQL:快速学会分析SQL执行效率

9. API 接口设计规范

10. Spring Boot 面试,一个问题就干趴下了!



扫码二维码关注我


·end·

—如果本文有帮助,请分享到朋友圈吧—

我们一起愉快的玩耍!



你点的每个赞,我都认真当成了喜欢


浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报