安装部署环境

  • Ubuntu 18.04.3 LTS
  • Docker 19.03.2
  • MySQL latest(8.0.17)

下载镜像

  1. # docker从仓库中拉取最新版的mysql镜像,如果没加标签的话,默认获取最新的版本
  1. Docker pull mysql

  

  1.  

挂载数据卷以及配置文件

Docker容器原则上是短暂的,如果容器被删除或损坏,任何数据或配置都将丢失。因为,我们需要将 Docker 内的 MySQL 数据文件以及配置文件转移到宿主机的指定路径。

每个人部署的 MySQL 内,可能文件路径不一致。我们可以先创建个测试的 MySQL 容器,然后再根据查找出的文件具体路径位置,重新创建我们符合我们需求的 MySQL 容器,命令如下:

  1. docker run --name mysqltest \
  2. -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root \
  3. -d mysql  

进入Docker容器内

  1. docker exec -it mysqltest bash

确定Docker内 MySQL 文件相关路径

根据官网说明:如果要挂载 MySQL 配置文件的话,我们必须在物理机上存在着该配置文件。

  1. # 查找Docker内,MySQL配置文件my.cnf的位置
  2. mysql --help | grep my.cnf
  3. # 显示如下,意思是路径按优先排序,会是在以下路径里:
  4. order of preference, my.cnf, $MYSQL_TCP_PORT,
  5. /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
  6. # 配置文件的路径不一定都一样,有些博客介绍的位置是在/etc/my.cnf。而本人Ubuntu系统上,实际存在位置是在/etc/mysql/my.cnf

查找数据文件位置

用于在容器上运行docker inspect命令的JSON输出具有一个 Mount密钥,其值提供了有关数据目录卷的信息:

  1. docker inspect mysqltest
  1. ...
  2. "Mounts": [
  3. {
  4. "Type": "volume",
  5. "Name": "4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652",
  6. "Source": "/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data",
  7. "Destination": "/var/lib/mysql",
  8. "Driver": "local",
  9. "Mode": "",
  10. "RW": true,
  11. "Propagation": ""
  12. }
  13. ],
  14. ... 

输出显示源文件夹:/var/lib/docker/volumes,表示已安装在 /var/lib/mysql容器内的服务器数据目录中。

创建本地路径并挂载Docker内数据

接下来,我们需要在物理机上,创建指定好一个数据和配置文件的挂载路径。

  1. mkdir -p /home/docker/mysql/conf && mkdir -p /home/docker/mysql/datadir

创建好本地的挂载数据路径后,我们再将测试容器里 MySQL 的配置文件复制到该路径。日后需改配置,直接在挂载路径的配置文件上修改即可。

  1. docker cp mysqltest:/etc/mysql/my.cnf /home/docker/mysql/conf

创建 MySQL 容器并启动

解决了配置文件的问题,就可以根据需求创建我们的 MySQL 容器并挂载数据了。

  1. docker run --name mysql1 \
  2. -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
  3. --mount type=bind,src=/home/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
  4. --mount type=bind,src=/home/docker/mysql/datadir,dst=/var/lib/mysql \
  5. --restart=on-failure:3 \
  6. -d mysql
  • --name:为容器指定一个名字
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -e:username="xxx",设置环境变量
  • --restart=on-failure:3:是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次
  • -mount:绑定挂载
  • -d:后台运行容器,并返回容器 id

网上许多人的博客写的挂载 MySQL数据卷方法,采用的是--volume,但是在最新的MySQL官方Docker搭建MySQL文档中,建议我们大家使用--mount,因为研究表明它更易于使用。故我们根据官网推荐的方法,这里也采用--mount挂载。

查看在运行的容器

  1. docker ps
  1. 们可以看到mysql1容器正在运行,包括之前我们创建的测试容器。

Docker安装MySQL 8.0并挂载数据及配置文件的更多相关文章

  1. 安装docker及使用docker安装其他软件(手动挂载数据卷)

    中秋明月,豪门有,贫家也有,极慰人心 Linux安装docker 可以参考官方的安装文档 centos安装docker: https://docs.docker.com/engine/install/ ...

  2. docker 安装 MySQL 8.0

    1.查找镜像 查找Docker Hub上的mysql镜像 X230:~$ docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED m ...

  3. docker创建mysql容器,并挂载数据+配置

    新建:/my/mysql/my.cnf (准备挂载配置文件用) 将以下内容拷贝进去(或者启动一个docker的mysql,并且把/etc/mysql/my.cnf中的内容拷贝出来) # Copyrig ...

  4. docker安装MySQL 8.0及初始化错误处理

      Preface          Several days ago,I've implement a docker environmnet,I'm gonna Install a MySQL 8. ...

  5. centos docker 安装mysql 8.0

    centos 版本  CentOS Linux release 7.5.1804 (Core) 内核版本: 3.10.0-862.el7.x86_64 下载最新版mysql docker pull m ...

  6. docker 安装mysql 并将文件挂载到本地

    首先准备好挂载的文件路径 执行mysql创建以及挂载的命令(这里还可以使用-e环境变量来创建新用户MYSQL_USER,MYSQL_PASSWORD) docker run -d -p : --res ...

  7. Docker搭建Redis5.0并挂载数据

    记录 Docker 搭建 Redis5.0 并挂载数据过程,搭建参考自 Docker Hub 系列文章欢迎访问:https://www.itwxe.com/posts/9e76db89/ 一.简单挂载 ...

  8. Docker学习实践 - Docker安装MySql数据库

    Docker安装MySQL数据库 1.Ubuntu安装MySQL安装 (1)安装编译源码需要的包 sudo apt-get install make cmake gcc g++ bison libnc ...

  9. Docker安装MySql完整教程、实操

    docker:官网 docker:镜像官网:        镜像官网可以所有应用,选择安装环境:会给出安装命令,例如:docker pull redis 默认拉取最新的版本(指定版本:docker p ...

随机推荐

  1. 运用arcgis sever 进行地图发布

    1.对已有的文件在arcgis中进行编辑:如图 2.从file下拉的目录中找到share as 点击 3.选择自己的manage sever 填写好名称 4.继续下一步 5.重点看capabiliti ...

  2. 设置tabBar的图片/高度/title颜色

    实现了一下内容: 1.设置tabBarItem选中及非选中时的图片,图片充满item; 2.调整了 tabBar 高度; 3.改变了title颜色及位置. ------------代码如下: ---T ...

  3. CentOS7 安装Python3.6.8

    CentOS7 安装Python3.6.8 1. 安装依赖环境 yum -y groupinstall "Development tools" yum -y install zli ...

  4. 学习Linux必看的命令(一)

    学习Linux必看的命令(一) 一:什么是Linux ​ Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,L ...

  5. Go语言系列:(2)go get 命令介绍

    Go语言的代码被托管于 Github.com 网站,该网站是基于 Git 代码管理工具的,很多有名的项目都在该网站托管代码.其他类似的托管网站还有 code.google.com.bitbucket. ...

  6. js中自执行函数(function(){})()和(function(){}())区别

    方式一,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用在去调用执行方式二,调用函数,得到返回值.强制运算符使函数调用执行(function(){})(); 是 把函数当作表达式解析,然后 ...

  7. (转)Ioc控制反转和依赖注入

    转载地址:https://zhuanlan.zhihu.com/p/95869440 控制反转控制反转(Inversion of Control,简称IoC),是面向对象编程中的一种设计思想,其作用是 ...

  8. 2019-2020-1 20199305《Linux内核原理与分析》第十一周作业

    ShellShock 攻击实验 (一)何为ShellShock? 2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发,这项漏洞 ...

  9. 如何给女朋友讲明白:Java 中 Stack(栈) 与 Heap(堆)

    背景 Java 中 Stack(栈) 与 Heap(堆) 是面试中被经常问到的一个话题. 有没有对 Java 中 Stack(栈) 与 Heap(堆) 烂熟于心的童鞋,请举手!!!(怎么没人举手-) ...

  10. Web安全测试学习笔记-DVWA-登录密码爆破(使用Burp Suite)

    密码爆破简单来说,就是使用密码本(记录了若干密码),用工具(手工也可以,if you like...)一条条读取密码本中的密码后发送登录请求,遍历密码本的过程中可能试出真正的密码. 本文学习在已知登录 ...