zoukankan      html  css  js  c++  java
  • 使用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;

  • 相关阅读:
    springboot小技巧(转)
    spring boot项目如何测试,如何部署
    thymeleaf模板的使用(转)
    springboot+多数据源配置
    springboot+shiro
    springboot+jpa+thymeleaf增删改查的示例(转)
    SpringBoot ( 七 ) :springboot + mybatis 多数据源最简解决方案
    tcpdump查看某个端口数据
    oracle完全删除表空间
    检测python进程是否存活
  • 原文地址:https://www.cnblogs.com/zhaobowen/p/13282160.html
Copyright © 2011-2022 走看看