首頁>技術>

推送映象到Docker Hub

之前我們都是自建的映象倉庫,這次我們換種方式,把映象上傳到Docker Hub中去。

首先我們得註冊個Docker Hub的賬號,Docker Hub地址:https://hub.docker.com/

部署應用使用之前的mall-tiny-fabric專案,先修改pom.xml檔案,主要是新增Docker Hub的認證資訊和修改下映象字首,具體內容如下;

推送成功以後就可以在Docker Hub中看到映象了。應用部署

接下來我們將把應用部署到K8S上去,包含SpringBoot應用的部署和MySQL的部署。

部署MySQL首先新增配置檔案mysql-deployment.yaml用於建立Deployment,具體說明參考註釋即可;
apiVersion: apps/v1kind: Deploymentmetadata:  # 指定Deployment的名稱  name: mysql-deployment  # 指定Deployment的標籤   labels:    app: mysqlspec:  # 指定建立的Pod副本數量   replicas: 1  # 定義如何查詢要管理的Pod  selector:    # 管理標籤app為mysql的Pod    matchLabels:      app: mysql  # 指定建立Pod的模板  template:    metadata:      # 給Pod打上app:mysql標籤      labels:        app: mysql    # Pod的模板規約    spec:      containers:        - name: mysql          # 指定容器映象          image: mysql:5.7          # 指定開放的埠          ports:            - containerPort: 3306          # 設定環境變數          env:            - name: MYSQL_ROOT_PASSWORD              value: root          # 使用儲存卷          volumeMounts:            # 將儲存卷掛載到容器內部路徑            - mountPath: /var/log/mysql              name: log-volume            - mountPath: /var/lib/mysql              name: data-volume            - mountPath: /etc/mysql              name: conf-volume      # 定義儲存卷      volumes:        - name: log-volume          # hostPath型別儲存卷在宿主機上的路徑          hostPath:            path: /home/docker/mydata/mysql/log            # 當目錄不存在時建立            type: DirectoryOrCreate        - name: data-volume          hostPath:            path: /home/docker/mydata/mysql/data            type: DirectoryOrCreate        - name: conf-volume          hostPath:            path: /home/docker/mydata/mysql/conf            type: DirectoryOrCreate
透過應用配置檔案來建立Deployment;
kubectl apply -f mysql-deployment.yaml
執行成功後查詢Deployment,發現mysql-deployment已經就緒;
[macro@linux-local k8s]$ kubectl get deploymentsNAME                      READY   UP-TO-DATE   AVAILABLE   AGEmysql-deployment          1/1     1            1           38snginx-volume-deployment   2/2     2            2           6d5h
想要其他Pod可以透過服務名稱訪問MySQL,需要建立Service,新增配置檔案mysql-service.yaml用於建立Service;
apiVersion: v1kind: Servicemetadata:  # 定義服務名稱,其他Pod可以透過服務名稱作為域名進行訪問  name: mysql-servicespec:  # 指定服務型別,透過Node上的靜態埠暴露服務  type: NodePort  # 管理標籤app為mysql的Pod  selector:    app: mysql  ports:    - name: http      protocol: TCP      port: 3306      targetPort: 3306      # Node上的靜態埠      nodePort: 30306
透過應用配置檔案來建立Service;
kubectl apply -f mysql-service.yaml 
執行成功後查詢Service,發現mysql-service已經暴露在Node的30306埠上了;
[macro@linux-local k8s]$ kubectl get servicesNAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGEkubernetes      ClusterIP   10.96.0.1        <none>        443/TCP          7d23hmysql-service   NodePort    10.107.189.51    <none>        3306:30306/TCP   7snginx-service   NodePort    10.101.171.181   <none>        80:30080/TCP     6d2h
部署完成後需要新建mall資料庫,並匯入相關表,表地址:https://github.com/macrozheng/mall-learning/blob/master/document/sql/mall.sql這裡有個比較簡單的方法來匯入資料庫,透過Navicat建立連線,先配置一個SSH通道;之後我們就可以像在Linux伺服器上訪問資料庫一樣訪問Minikube中的資料庫了,直接新增Minikube中資料庫IP和埠即可。部署SpringBoot應用首先新增配置檔案mall-tiny-fabric-deployment.yaml用於建立Deployment,這裡我們可以透過環境變數來覆蓋SpringBoot中的預設配置;
apiVersion: apps/v1kind: Deploymentmetadata:  name: mall-tiny-fabric-deployment  labels:    app: mall-tiny-fabricspec:  replicas: 1  selector:    matchLabels:      app: mall-tiny-fabric  template:    metadata:      labels:        app: mall-tiny-fabric    spec:      containers:        - name: mall-tiny-fabric          # 指定Docker Hub中的映象地址          image: macrodocker/mall-tiny-fabric:0.0.1-SNAPSHOT          ports:            - containerPort: 8080          env:            # 指定資料庫連線地址            - name: spring.datasource.url              value: jdbc:mysql://mysql-service:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai            # 指定日誌檔案路徑            - name: logging.path              value: /var/logs          volumeMounts:            - mountPath: /var/logs              name: log-volume      volumes:        - name: log-volume          hostPath:            path: /home/docker/mydata/app/mall-tiny-fabric/logs            type: DirectoryOrCreate
透過應用配置檔案來建立Deployment;
kubectl apply -f mall-tiny-fabric-deployment.yaml
我們可以透過kubectl logs命令來檢視應用的啟動日誌;
[macro@linux-local k8s]$ kubectl get podsNAME                                           READY   STATUS    RESTARTS   AGEmall-tiny-fabric-deployment-8684857dff-pnz2t   1/1     Running   0          47smysql-deployment-5dccc96ccf-sfxvg              1/1     Running   0          25mnginx-volume-deployment-6f6c89976d-nv2rn       1/1     Running   4          6d6hnginx-volume-deployment-6f6c89976d-tmhc5       1/1     Running   4          6d5h[macro@linux-local k8s]$ kubectl logs -f mall-tiny-fabric-deployment-8684857dff-pnz2t
如果想要從外部訪問SpringBoot應用,需要建立Service,新增配置檔案mall-tiny-fabric-service.yaml用於建立Service;
apiVersion: v1kind: Servicemetadata:  name: mall-tiny-fabric-servicespec:  type: NodePort  selector:    app: mall-tiny-fabric  ports:    - name: http      protocol: TCP      port: 8080      targetPort: 8080      # Node上的靜態埠      nodePort: 30180
透過應用配置檔案來建立Service;
kubectl apply -f mall-tiny-fabric-service.yaml
此時服務已經暴露到了Node的30180埠上了;
[macro@linux-local k8s]$ kubectl get servicesNAME                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGEkubernetes                 ClusterIP   10.96.0.1        <none>        443/TCP          7d23hmall-tiny-fabric-service   NodePort    10.100.112.84    <none>        8080:30180/TCP   5smysql-service              NodePort    10.107.189.51    <none>        3306:30306/TCP   13mnginx-service              NodePort    10.101.171.181   <none>        80:30080/TCP     6d2h
在Linux伺服器上,我們可以透過curl命令來訪問下專案的Swagger頁面,不過只能檢視到返回的一串HTML程式碼。
curl $(minikube ip):30180/swagger-ui.html
外部訪問應用

由於使用Minikube安裝的K8S Node處於Linux伺服器的內網環境,無法直接從外部訪問,所以我們需要安裝一個Nginx反向代理下才能訪問。

首先我們需要安裝Nginx安裝完成後新增一個Nginx的配置檔案,這裡我的配置路徑為/mydata/nginx/conf/conf.d/,用於將mall-tiny.macrozheng.com域名的訪問代理到K8S中的SpringBoot應用中去,proxy_pass為上面curl使用的路徑;
server {    listen       80;    server_name  mall-tiny.macrozheng.com; #修改域名    location / {        proxy_set_header Host $host:$server_port;        proxy_pass   http://192.168.49.2:30180; #修改為代理服務地址        index  index.html index.htm;    }    error_page   500 502 503 504  /50x.html;    location = /50x.html {        root   /usr/share/nginx/html;    }}
重啟Nginx服務,再修改訪問Linux伺服器的本機host檔案,新增如下記錄;
192.168.5.94 mall-tiny.macrozheng.com
之後即可直接在本機上訪問K8S上的SpringBoot應用了,訪問地址:http://mall-tiny.macrozheng.com/swagger-ui.html總結

透過把SpringBoot應用部署到K8S上的一頓操作,我們可以發現在K8S上部署和在Docker上部署有很多相似之處。K8S上很多部署用的指令碼,直接翻譯之前使用Docker Compose的指令碼即可,非常類似。如果你之前用過Docker,那麼你就可以輕鬆上手K8S!

專案原始碼地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-fabric

14
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 5G(NR)網路中的SRB定義和型別