使用dockerfile制作mysql镜像部署到docker、k8s

废话不多说~~

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;

使用dockerfile制作mysql镜像部署到docker、k8s

上一篇:mysql的间隙锁


下一篇:NETCore依赖注入 AddDbContext 单例模式问题