1 前言

Docker容器原则上是短暂的,如果容器被删除或损毁,数据或配置将丢失,所以上个章节部署的MySQL只适合于测试环境,由于生产的需求,本章将使用Docker卷机制持久保存Docker容器中创建的数据。

2 最佳实践

2.1 环境配置

2.1.1 系统环境配置

IP Address = 10.168.0.71

Host Name = any

OS = CentOS 7.6 x86_64

2.1.2 软件环境配置

2.2 非持久化方式启动MySQL

2.2.1 下载MySQL服务器Docker镜像

docker pull mysql/mysql-server:5.6

其他版本的下载,请使用以下命令,

docker pull mysql/mysql-server:5.5

docker pull mysql/mysql-server:5.6

docker pull mysql/mysql-server:5.7

docker pull mysql/mysql-server:8.0

docker pull mysql/mysql-server:latest

下载完毕后,你可以使用以下命令查看当前下载的镜像,

docker images

可见如下显示,

REPOSITORY TAG IMAGE ID CREATED SIZE

mysql/mysql-server 5.6 8fe1c25ccc38 6 weeks ago 218MB

2.2.2 初始化一个非持久化实例

docker run --name mysql1 -d mysql/mysql-server:5.6 --character-set-server=utf8 --collation-server=utf8_general_ci

启动实力后,可见如下显示,

87cb7f2615ff3f762332eb826566a566888e7ade0ecf5fe55cc4c462d7f2e9da

可使用如下命令查看正在运行的容器,

docker ps

可见如下显示,

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

18682cd5edea mysql/mysql-server:5.6 "/entrypoint.sh mysq…" About a minute ago Up About a minute (healthy) 3306/tcp mysql1

2.2.3 检查MySQL启动的log

docker logs mysql1

2.2.4 获取初始化密码

docker logs mysql1 2>&1 | grep -i "GENERATED ROOT PASSWORD:"

可见如下输出,

Entrypoint] GENERATED ROOT PASSWORD: 63JyseNLAsYf4vnydUS0D3x4NasF

注:以上密码为“[im4DdeRId3gOM0bAKIBzumJYBr”

2.2.5 从容器内部连接MySQL服务器

docker exec -it mysql1 mysql -uroot -p

然后,我们需要使用如下命令修改root密码才能继续,

alter user 'root'@'localhost' identified by 'rootpassword';

如果有以下错误提示,

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'rootpassword'' at line 1

请使用如下命令配置,

set password for 'root'@'localhost'=PASSWORD('rootpassword');

2.2.6 创建授权账号

grant all privileges on *.* to 'root'@'%' identified by "rootpassword";

flush privileges;

2.2.7 查询实例IP

docker inspect mysql1

可见如下显示,

[...]

"Networks": {

"bridge": {

"IPAMConfig": null,

"Links": null,

"Aliases": null,

"NetworkID": "e3134a755397c4841912004d8ecff4bf918f6484e9873e3da815946062e87940",

"EndpointID": "8ae10d4677c284e21523fbf4457aa8b0c2a297999a717d111f6b05c12a56fa0a",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:11:00:02",

"DriverOpts": null

}

}

[...]

注:参数”IPAddress”的声明即实例当前地址

2.2.8 测试登录

yum install -y mariadb

安装完客户端后,可使用如下命令测试,

mysql -uroot -p -h 172.17.0.2

2.3 持久化方式启动MySQL

2.3.1 持久化的说明

docker inspect mysql1

可见如下输出,

[...]

"Mounts": [

{

"Type": "volume",

"Name": "6757102195b9452306e48650023d366d2c3d72b51764878f08279bb58dca1cb2",

"Source": "/data/docker-runningdata/volumes/6757102195b9452306e48650023d366d2c3d72b51764878f08279bb58dca1cb2/_data",

"Destination": "/var/lib/mysql",

"Driver": "local",

"Mode": "",

"RW": true,

"Propagation": ""

}

[...]

如上所示,“docker inspect”命令所输出的JSON文件,

– “Mount”关键字声明Docker卷相关定义

– “Destination”关键字声明存于容器内部路径为“/var/lib/mysql”

– “Source”关键字声明存于物理主机的卷路径为“/data/docker-runningdata/volumes/6757102195b9452306e48650023d366d2c3d72b51764878f08279bb58dca1cb2/_data”

基于以上,如果需要持久保存数据,官方提供以下命令范式用于启动,

docker run --name=mysql1 \

--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \

--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \

-d mysql/mysql-server:tag

2.3.2 创建数据目录和配置文件目录

mkdir -p /data/docker/etc/mysql

mkdir -p /data/docker/data/

2.3.3 复制实例数据到本地

docker cp mysql1:/etc/my.cnf /data/docker/etc/mysql

docker cp mysql1:/etc/my.cnf.d /data/docker/etc/mysql

docker cp mysql1:/var/lib/mysql /data/docker/data/

2.3.4 停止并删除之前的实例

docker stop mysql1

docker rm mysql1

2.3.5 启动MySQL数据库实例

docker run --name=mysql1 \

--mount type=bind,src=/data/docker/etc/mysql/my.cnf,dst=/etc/my.cnf \

--mount type=bind,src=/data/docker/etc/mysql/my.cnf.d,dst=/etc/my.cnf.d \

--mount type=bind,src=/data/docker/data/mysql,dst=/var/lib/mysql \

-d mysql/mysql-server:5.6 \

--character-set-server=utf8 \

--collation-server=utf8_general_ci

2.3.6 测试登录

mysql -uroot -p -h 172.17.0.2

2.4 管理MySQL实例

2.4.1 使用shell管理MySQL服务器

docker exec -it mysql1 bash

可见如下命令提示符,

bash-4.2#

可使用如下命令查看MySQL的数据目录,

bash-4.2# ls /var/lib/mysql

可见如下提示,

auto.cnf ib_logfile0 ib_logfile1 ibdata1 mysql mysql.sock performance_schema test

2.4.2 管理MySQL容器的相关命令

docker start mysql1

docker restart mysql1

docker stop mysql1

docker rm mysql1

2.5 将容器加入一个特定的网络

2.5.1 创建容器间的网络

docker network create cmdschool-net

可以使用如下命令确认网络的创建,

docker network ls

可见如下显示,

NETWORK ID NAME DRIVER SCOPE

42120d142861 bridge bridge local

a44be59ebfd9 cmdschool-net bridge local

5bf4d2d3d1a6 host host local

e9ee5d7f4acc none null local

2.5.2 停止并删除之前配置的实例

docker stop mysql1

docker rm mysql1

2.5.3 使用新的参数连接Docker网络

docker run --name=mysql1 \

--mount type=bind,src=/data/docker/etc/mysql/my.cnf,dst=/etc/my.cnf \

--mount type=bind,src=/data/docker/etc/mysql/my.cnf.d,dst=/etc/my.cnf.d \

--mount type=bind,src=/data/docker/data/mysql,dst=/var/lib/mysql \

--network=cmdschool-net \

-d mysql/mysql-server:5.6 \

--character-set-server=utf8 \

--collation-server=utf8_general_ci

注:留意“–network”参数

2.5.4 查询当前实例的IP

docker inspect mysql1

可见如下显示,

"Networks": {

"cmdschool-net": {

"IPAMConfig": null,

"Links": null,

"Aliases": [

"4e0f2027134c"

],

"NetworkID": "a44be59ebfd9319f7c0ae0dd26f4d41f0d576141481388346a0ff870ee2ed809",

"EndpointID": "76513bee3bddd2c80f611e93f003dbb6c9abd53d184ade5e35faf6bb3d19f3cf",

"Gateway": "172.19.0.1",

"IPAddress": "172.19.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:13:00:02",

"DriverOpts": null

}

}

注:参数”IPAddress”的声明即实例当前地址

2.5.5 测试登录

mysql -uroot -p -h 172.19.0.2

注:请自行安装mysql客户端

参阅文档

=================

docker mysql 生产环境_如何部署Docker MySQL生产环境?相关推荐

  1. 无网络环境,如何部署Docker镜像

    一.简介 无网络环境,部署 Docker 镜像,这通常适用于一些部署环境是脱离网络的公司,或者公司内部有着严格的网络安全要求.且还是 Docker 部署的程序,这个时候怎么办,别急今天就来讲讲,无网络 ...

  2. docker php composer 使用_如何使用Docker部署PHP开发环境

    本文主要介绍了如何使用Docker构建PHP的开发环境,文中作者也探讨了构建基于Docker的开发环境应该使用单容器还是多容器,各有什么利弊.推荐PHP开发者阅读.希望对大家有所帮助. 环境部署一直是 ...

  3. docker mysql 阿里云_阿里云docker部署mysql

    看完我的上一个博客之后,对centos系统应该有一定的了解,话不多说,接下来我们来在docker容器中部署mysql. 1.下载mysql镜像,因为本人用的5.7版本,你也可以下载最新版,都是可以的 ...

  4. docker适合初学者吗_简化了Docker:面向绝对初学者的动手指南

    docker适合初学者吗 by Shahzan 由Shahzan Whether you are planning to start your career in DevOps, or you are ...

  5. docker没有下载完全_会用Docker的人都别装了,这多简单呐

    学术又官方的说法 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是 ...

  6. centos mysql卸载重装_提高性能,MySQL 读写分离环境搭建

    MySQL 读写分离在互联网项目中应该算是一个非常常见的需求了.受困于 Linux 和 MySQL 版本问题,很多人经常会搭建失败,今天松哥就给大伙举一个成功的例子,后面有时间再和大家分享下使用 Do ...

  7. 群辉docker安装树莓派镜像_群晖 Docker 安装 AriaNg+File Browser

    说明: AriaNg 是一个让 aria2 更容易使用的现代 Web 前端,使用响应式布局,支持各种计算机或移动设备.本次所使用的镜像包含 Aria2.AriaNg 和 File Manager 同时 ...

  8. docker 容器共享数据_如何在Docker容器之间共享数据

    docker 容器共享数据 介绍 (Introduction) Docker is a popular containerization tool used to provide software a ...

  9. php mysql 云虚拟机_虚拟机+apache+php+mysql 环境安装配置

    虚拟机的安装:直接下一步即可,注意修改路径. 安装完成后新建虚拟机,直接下一步.如果选择镜像文件后出现错误,可以试着去修改电脑bios中的虚拟化设置,改为enable,如下图: apache安装: 1 ...

最新文章

  1. angular指令ng-class巧用
  2. 如何在Amazon AWS上设置一台Linux服务器
  3. 在2012年安装XCODE旧版本的错误解决方法
  4. GIAC 2020 全球互联网架构大会演讲实录:基于TarsGo的微服务技术架构实践
  5. VC++静态文本框/PICTURE控件的notify属性
  6. char数组转string_String类和其它数据类型的相互转换
  7. Kubernetes 与 Helm:使用同一个 Chart 部署多个应用
  8. 程序员过关斩将--你为什么还在用存储过程?
  9. 路由器和交换机的区别详解
  10. springboot 2.3_Spring Boot 应用监控,早发现早
  11. 白鹭php源码,白鹭/CDNDrive
  12. __attribute__((visibility()))
  13. 重读微积分(八):全微分和法线
  14. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destinatio
  15. 龙宫旅游策划方案:5A景区的突破性发展!
  16. python爬取文献资料_Python 批量爬取Web of Science 文献信息数据
  17. 德巴赫猜想python_哥德巴赫猜想问题基于Python的验证方法研究
  18. python studing DAY1
  19. Linux开发 | 电脑WiFi上网,开发板和电脑网线直连,文件拷贝
  20. 【稳定性day3】蘑菇街的运维体系 - 如何撑住双十一

热门文章

  1. 箱梁终张拉后弹性上拱度计算_高速铁路预应力简支箱梁反拱预设分析
  2. 同步fifo的串并_同步FIFO设计Spec(示例代码)
  3. Python type函数和isinstance函数区别 - Python零基础入门教程
  4. 其他机器无法访问php,PHP 局域网其他机器无法访问的问题
  5. 初识C++之函数重载
  6. C语言优先队列作用,C语言实现优先队列(priority queue)
  7. java成员变量的初始化_Java成员变量初始化过程
  8. html中basefont标签,HTML的basefont标签
  9. oracle nvl和coalesce,NVL与Coalesce之间的Oracle差异
  10. oracle数据库内核,深入内核:Oracle数据库里SELECT操作Hang解析