使用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;


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM