前言
本文参考自《通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷》
由于原文博主是使用windows的虚拟机Vagrant的minikube,和mac OS有所不同。另外原博主的方法下载mysql:5.7的镜像下载不了,导致后面配置文件也不一样,所以有了这篇文章。
docker mysql:5.7镜像拉取参考自《docker拉取mysql镜像遇到到问题及解决》
侵删。
准备工作
- mac OS 系统版本10.15.4,
- 安装docker desktop和k8s,可参考阿里云的https://github.com/AliyunContainerService/k8s-for-docker-desktop/tree/v1.16.5
- docker 版本19.03.8,k8s版本
➜ kubectl version
Client Version: version.Info{
Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:26:26Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{
Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:18:29Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}
应用程序分成两种,无状态和有状态的。一般的前段和后端程序都是无状态的,而数据库是有状态的,他需要把数据存储起来,这样即使断电,数据也不会丢失。要创建有状态的程序,还需要引入另外一些k8s概念。它们虽然不是核心,但也很重要,共有三个,持久卷,网络和参数配置。掌握了这些之后,基本概念就已经做到了全覆盖,k8s就已经入门了。我们通过搭建MySQL来熟悉这些k8s概念。容器本身是无状态的,一旦出现问题它会被随时销毁,它存储的数据也就丢失了。MySQL需要一个能保存数据的持久层,在容器被销毁之后仍然存在,k8s叫它持久卷。
1、创建和验证MySQL镜像
通过国内镜像daocloud.io/library库下载,下载速度快到感人!
docker pull daocloud.io/library/mysql:5.7
查看下载好的镜像:
docker images|grep mysql
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/mysql 5.7 718a6da099d8 2 weeks ago 448MB
需要注意的是:mysql镜像名的前缀不能忘记,否则报错!
完整的名字: daocloud.io/library/mysql:5.7
运行:
docker run --name test-mysql -p 3306:33060 -e MYSQL_ROOT_PASSWORD=root -d -it --net host daocloud.io/library/mysql:5.7
“root”是根(root)用户的password,这里是在创建MySQL容器时指定“root”用户的password。“test-MySQL”是容器的名字。“daocloud.io/library/mysql:5.7”用的是daocloud镜像库里的“MySQL”5.7版本。这次没有用最新的8.0版,因为新版跟以前的客户端不兼容,需要修改很多东西。所用的镜像是全版的Linux,因而文件比较大,有400M。
容器建好了之后,键入“docker logs test-mysql”,查看日志。“docker ps”, 查看容器状态。
docker ps -a|grep mysql
3b6ec96e49d0 daocloud.io/library/mysql:5.7 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes test-mysql
进入docker内部,并登录mysql查看:
docker