废话不多说~~
1、拉取一个现成的镜像,当然也可以拉取centos镜像,自己安装
docker pull mysql:5.7
https://hub.docker.com/从这里巴拉,有说明看。
2、测试镜像
docker拉取的镜像都是别人上传的,人家的环境能用,不一定你的环境也能用。所以测试一下,修改成自己想要的。
docker run --name tempMysql -p 33307:3306 -e MYSQL_ROOT_PASSWORD=password -e LANG=C.UTF-8 -d mysql:5.7
--name 后面是指定的容器名
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量
MYSQL_ROOT_PASSWORD是root用户的登陆密码
mysql:5.7 是下载的镜像+版本(若不指定版本,该命令会重新下载mysql最新的镜像)
-d 后台启动
客户端执行:
mysql -h192.168.2.22 -P 33307 -uroot -p
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)
如果客户端是docker的宿主机的话,也需要指定-h,不然就练到127.0.0.1 然后报错。
3、定制自己的镜像
vim dockerfile
FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ENV LANG=C.UTF-8
ENV MYSQL_ROOT_PASSWORD=password
docker build -t mysql:my
注意:这里设置了两个ENV,相当于把mysql的密码和字符集写死了。
不想写死的话docker run的时候就要加上-e 设置这两个变量。同理在k8s上运行也是一样的,不想写死就的设置环境变量,如果不想费心找密码的话。
我们的数据库在生产环境中基本不用(没那个精钢钻呀),所以我没配置存储,有需要的自行参考https://hub.docker.com/_/mysql
4、推送到私有镜像库
docker push hub.ict.ac.cn/dev/mysql:my
5、在docker上运行
docker run --name tempMysql -p 33307:3306 -d mysql:my
docker run --name tempMysql -p 33307:3306 -e LANG=C.UTF-8 -e MYSQL_ROOT_PASSWORD=password -d mysql:my
6、k8s运行mysql
kubectl apply -f mysql.yaml
使用原装镜像的:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql
namespace: wde
spec:
selector:
matchLabels:
app: mysql-wde
template:
metadata:
labels:
app: mysql-wde
spec:
containers:
- name: mysql-wde
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: LANG
value: ‘C.UTF-8‘
- name: MYSQL_ROOT_PASSWORD
value: ‘password‘
---
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
namespace: test
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 31106
selector:
app: mysql-wde
使用自定义镜像的:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql
namespace: wde
spec:
selector:
matchLabels:
app: mysql-wde
template:
metadata:
labels:
app: mysql-wde
spec:
containers:
- name: mysql-wde
image: hub.ict.ac.cn/dev/mysql:my
ports:
- containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
namespace: test
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 31106
selector:
app: mysql-wde
如果出现报错:
ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘192.168.2.22‘ (111) 单纯查这个错是因为拒绝远程连接,以为是mysql配置bind_address的问题。
其实也有可能dp没有起来,仔细检查一下。
7、测试连接
mysql -h 192.168.2.22 -uroot -P31106 -p
use mysql
创建用户(生产环境千万别. 根据自己需求改,密码不能弱口令)
grant all privileges on . to ‘root‘@‘%‘ identified by ‘password‘ with grant option;