docker掃盲資料

docker相關概念:

鏡像(Image)

  • Docker鏡像可以簡答理解成Linux的文件系統,這個文件系統包含了可以運行在Linux內核的程序以及相應的數據。
  • 如果瞭解Linux操作系統的相關知識,也可以把鏡像看成是用戶空間,當Docker通過鏡像創建一個容器的時候,就是把鏡像定義好的用戶空間作爲獨立隔離的進程運行在宿主機的linux內核之上。
  • 鏡像特徵:
  1. 鏡像是分層的(Layer):即一個鏡像可以多箇中間層組成,多個鏡像可以共享同一個中間層,也可以通過鏡像添加多一層來生成一個新的鏡像。
  2. 鏡像是隻讀的(read-only):鏡像在構建完成之後,便不可以再修改,而上面說的添加一層構建新的鏡像,這中間實際是通過創建一個臨時的容器,在容器上增加或刪除文件,從而形成新的鏡像。

容器

  • 容器是通過鏡像來創建的,生成的容器是一個獨立於宿主機的隔離進程,並且有屬於自己的網絡和命名空間。
  • 鏡像是隻讀的,但容器是可讀可寫的,這是因爲容器是在鏡像上面天一層讀寫層來實現的

倉庫

倉庫用來存儲鏡像
在這裏插入圖片描述

docker解決的問題

解決了資源隔離的問題:

namespace 隔離內容 系統調用參數
UTS 主機名與域名 CLONE_NEWUTS
IPC 信號量、消息隊列和共享內存 CLONE_NEWIPC
Network 網絡設備、網絡棧、端口等 CLONE_NEWNET
PID 進程編號 CLONE_NEWPID
Mount 掛載點(文件系統) CLONE_NEWNS
User 用戶和用戶組 CLONE_NEWUSER

docker的簡單使用

鏡像操作

  1. 拉取鏡像:docker pull centos

  2. 本地鏡像列表:docker images 在這裏插入圖片描述

  3. 生成鏡像

    docker build -t harbor.aipo.lenovo.com/apisix/etcd:3.3.13 -f etcd.dockerfile .
    

    etcd.dockerfile內容形如:

      FROM 10.110.152.173:80/base_env/centos:java8
      WORKDIR /root/services
      COPY uuid-service-0.0.1-SNAPSHOT.jar .
      EXPOSE 30001
      ENTRYPOINT ["java","-jar","uuid-service-0.0.1-SNAPSHOT.jar","--server.port=30001"]
    
  4. 保存鏡像:docker push

    docker push harbor.aipo.lenovo.com/apisix/etcd:3.3.13
    

容器操作

  1. 運行容器:docker run -it centos /bin/bash
    • -i: 交互式操作。
    • -t: 終端。
    • ubuntu: ubuntu 鏡像。
    • /bin/bash:放在鏡像名後的是命令,這裏我們希望有個交互式 Shell,因此用的是 /bin/bash。
    • 要退出終端,直接輸入 exit:
  2. 查看啓動的容器:docker ps -a 在這裏插入圖片描述
  3. 進入容器
    docker exec -it 243c32535da7 /bin/bash
    
  4. 查看容器日誌
    docker logs -f 容器id

其他容器和鏡像相關操作,參考:https://www.runoob.com/docker/docker-container-usage.html

kubernetes介紹

kubernetes解決了哪些問題

kubernetes是谷歌開源的容器集羣管理系統,是Google多年大規模容器管理技術Borg的開源版本

  • (1)基於容器的應用部署、維護和滾動升級
  • (2)網絡,建立容器之間的通信子網如隧道、路由等,解決容器的跨節點通信問題。
  • (3)內置DNS服務和kube-proxy用於服務發現及負載均衡
  • (4)資源管理,包括容器使用的資源限制,以及將容器調度到對用的集羣節點上
  • (5)Docker 也有Volume的概念,但是相對簡單,而且目前的支持很有限,Kubernetes對Volume則有着清晰定義和廣泛的支持。
  • (6)對容器運行狀態的監控

k8s幾個重要概念

  • namespace命名空間
  • pod:在集羣上運行的進程,是k8s應用程序的基本執行單元——創建或部署的k8s對象模型中最小、最簡單的單元。
  • service:用於定義一組邏輯Pods以及訪問它們的政策,相當於微服務的概念,扮演負載均衡器的角色。
  • Container:容器是應用程序及其在運行時所需要的依賴的打包。一個Pod支持運行多個容器,但大多數情況下一個Pod只會運行一個容器。
  • Deployment:給Pods和ReplicaSets提供更新聲明。比如下面的Deployment就會告訴k8s去創建一個ReplicaSet去啓動3個Pods:
  • 編排文件
apiVersion: v1
kind: Namespace
metadata:
  name: saas
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: uuid-server
  namespace: saas
  labels:
    app: uuid-server
spec:
  replicas: 3
  selector:
    matchLabels:
      app: uuid-server
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: uuid-server
    spec:
      containers:
      - name: uuid-server
        image: 10.110.152.173:80/apisix/uuid:v1.0.0
        imagePullPolicy:  Always
        ports:
        - name: http
          containerPort: 30001
---
apiVersion: v1
kind: Service
metadata:
  name:  uuidservice
  namespace: saas
spec:
  type: NodePort
  selector:
    app: uuid-server
  ports:
  - name: http
    port: 80
    targetPort: 30001
    nodePort: 30001

kubernetes使用簡介

kubectl apply -f etcd.yaml
kubectl get pods -n saas -o wide
kubectl logs pods/etcd-server-746d5b4cf7-th44j -c etcd-server --namespace=saas # --previous 該參數可以查看上一次啓動的容器的日誌,非常有用
kubectl exec -it etcd-server-746d5b4cf7-k4bhv -c etcd-server -n saas /bin/bash 
kubectl get svc -n saas -o wide
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章