Table of Contents
哈嘍,各位小夥伴大家好,前兩節我們分別介紹了Docker和Kubernetes以及其安裝,那麼,如何來檢驗安裝是否成功呢?當然,最行之有效的方法就是使用一下啦,那麼,本節,我們就一起來體驗一下Docker和Kubernetes的初步使用吧。
特別聲明,本節的代碼中,形如> docker --version的是命令,以下的都是執行結果,而且//是我自輸入的註釋,請不要混淆!
Docker初體驗
上節課,我們在安裝完docker後,通過About查看了docker的基本信息,那麼本節,我們將學習用命令行來操作docker。
要注意,在進行操作前,一定要先運行Docker,就好比我們要開車一定要先讓車啓動,要不然,即使能看到一些參數,但也不能實際的上路行駛。這裏也是一樣的道理。(因此,假設以下都是正常情況)
查看版本
第一個就先查看版本吧,查看版本其實有2個相似的命令,但是查看的東西是不一樣的,因此需要注意一下,如下
查看docker引擎的版本(即docker的版本)
>docker --version
Docker version 19.03.8, build afacb8b
查看全部版本,可用於驗證是否開啓實驗功能(experimental CLI)
>docker version
Client: Docker Engine - Community //client 相關信息
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:23:10 2020
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Community //server相關信息
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:29:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
啓動實例
就像是我們學習一門新的語言時,總是習慣先寫HelloWorld一樣,我們也可以用Docker來打印我們的HelloWorld,不同的是,docker已經爲我們寫好了這個鏡像,而不需要我們手動編寫,我們只需輸入
>docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world//拉取鏡像
0e03bdcc26d7: Pull complete
Digest: sha256:8e3114318a995a1ee497790535e7b88365222a21771ae7e53687ad76563e8e76
Status: Downloaded newer image for hello-world:latest
Hello from Docker!//執行結果
This message shows that your installation appears to be working correctly.//表明安裝成功
接下來,我們在來試着拉取一個名爲webserver的nginx web server鏡像
> docker run --detach --publish 80:80 --name webserver nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
fdd5d7827f33: Pull complete
a3ed95caeb02: Pull complete
716f7a5f3082: Pull complete
7b10f03a0309: Pull complete
Digest: sha256:f6a001272d5d324c4c9f3f183e1b69e9e0ff12debeb7a092730d638c33e0de3e
Status: Downloaded newer image for nginx:latest
dfe13c68b3b86f01951af617df02be4897184cbf7a8b4d5caf1c3c5bd3fc267f
啓動後,在瀏覽器中直接輸入http://localhost即可展示該nginx的起始頁
到這裏,我們已經拉取了2個鏡像,併成功運行了,那如何查看已有鏡像以及其狀態呢?
查看鏡像列表
顯示從DockerHub下載的鏡像
>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 602e111c06b6 3 hours ago 127MB
docker/desktop-storage-provisioner v1.0 605a0f683b7b 7 weeks ago 33.1MB
hello-world latest bf756fb1ae65 3 months ago 13.3kB
k8s.gcr.io/kube-proxy v1.15.5 cbd7f21fec99 6 months ago 82.4MB
k8s.gcr.io/kube-controller-manager v1.15.5 1399a72fa1a9 6 months ago 159MB
k8s.gcr.io/kube-apiserver v1.15.5 e534b1952a0d 6 months ago 207MB
k8s.gcr.io/kube-scheduler v1.15.5 fab2dded59dd 6 months ago 81.1MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller 0.26.1 29024c9c6e70 6 months ago 483MB
docker/kube-compose-controller v0.4.23 a8c3d87a58e7 10 months ago 35.3MB
docker/kube-compose-api-server v0.4.23 f3591b2cb223 10 months ago 49.9MB
k8s.gcr.io/coredns 1.3.1 eb516548c180 15 months ago 40.3MB
k8s.gcr.io/kubernetes-dashboard-amd64 v1.10.1 f9aed6605b81 16 months ago 122MB
k8s.gcr.io/etcd 3.3.10 2c4adeb21b4f 16 months ago 258MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 2 years ago 742kB
上述步驟中,鏡像拉取後成功運行,證明已經創建了容器實例,那如何查看容器實例呢?
容器實例查看
查看當前運行的容器實例
>docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
afb71d7f2857 nginx "nginx -g 'daemon of…" 16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp webserver
查看創建的全部容器實例,除了當前運行的,包括已退出的
>docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e9af44f55863 hello-world "/hello" 28 seconds ago Exited (0) 27 seconds ago bold_wilson
afb71d7f2857 nginx "nginx -g 'daemon of…" 15 minutes ago Up 15 minutes 0.0.0.0:80->80/tcp webserver
939c9e97eba4 hello-world "/hello" 23 minutes ago Exited (0) 23 minutes ago xenodochial_spence
停止正在運行的容器
>docker container stop webserver
webserver
移除已創建的容器
>docker container rm webserver bold_wilson xenodochial_spence
//這裏移除的容器名稱根據自己的事件情況而定,中間用空格隔開即可
webserver
bold_wilson
xenodochial_spence
這裏需要注意的是,若要移除容器,則當前容器必須是退出狀態,正在運行的容器是不會被移除的。
Docker幫助
其實,對於docker的命令無需死記,一方面,我們可以根據推理,比如鏡像是docker image...,容器是docker container...,
另外,等不確定或者遇到不認識的命令的時候,這時候我們就可以通過--help命令來查看/查找具體定義,如
> docker --help
> docker container --help
> docker container ls --help
> docker run --help
//由於結果太長,這裏就只給出命令
Kubernetes初體驗
對於Kubernetes的管理,我們一般會通過啓用Dashboard,這是一個可視化的網頁,你可以理解成Kubernetes WebUI,下面,我們就來看一下如何啓用Dashboard吧。
Dashboard配置
Dashboard需要用到k8s.gcr.io/kubernetes-dashboard
的鏡像,網絡上多半給出的地址是官方地址
但還是那個坑爹的原因,這裏導致這個源並不可用,以下是本人親測可用的地址,我們只需要直接在命令行執行以下命令即可
kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
//結果
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created
之後,我們可以通過命令kubectl get pods --all-namespaces檢測dashboard是否安裝成功
此時,我們可以通過啓動代理,然後我們即可通過本地訪問dashboard,
>kubectl proxy
Starting to serve on 127.0.0.1:8001
啓動後,我們即可通過以下地址來進行瀏覽器訪問
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
授權配置
從上圖可以看出,授權有2種方式,一種是通過Kubeconfig文件,另一種是Token,這裏我們分別講解一下吧。
Token
1.生成default Token
在powerShell裏輸入,注意是powerShell,不是命令行裏
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN
結果如下,框中的即爲生成的Token
複製上圖中的Token,輸入到剛剛的授權頁面,則會進入到管理界面
2.自定義用戶生成Token
除了使用docker默認的配置生成token外,我們還可以通過自定義的方式來生成。具體操作如下:
特別提醒一下,以下創建的文件必須放在.kube同路徑下,否則在執行之後的命令時需要指明文件路徑
a.創建admin-user.yaml,用於創建服務賬號,內容如下
# admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
執行kubectl create命令
>kubectl create -f admin-user.yaml
serviceaccount/admin-user created
b.創建admin-user-role-binding.yaml,用於綁定角色,內容如下
# admin-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
執行kubectl create命令
>kubectl create -f admin-user-role-binding.yaml
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
c.獲取token
經過以上兩步之後,我們可以開始獲取token了,
仍然是在powershell中執行
$TOKEN=((kubectl -n kube-system describe secret admin-user | Select-String "token:") -split " +")[1]
kubectl config set-credentials admin-user --token="${TOKEN}"
echo $TOKEN
結果如下
PS C:\Users\29853> $TOKEN=((kubectl -n kube-system describe secret admin-user | Select-String "token:") -split " +")[1]
PS C:\Users\29853> kubectl config set-credentials admin-user --token="${TOKEN}"
User "admin-user" set.
PS C:\Users\29853> echo $TOKEN
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTg2MjhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhMGI4NjI4OS04ZTA0LTRlNmItOTRlNi0zYTA4ODkyNGI2YTYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.VexslypiDXxB2bCDhFlsZtQOKKBqpXUx93PgzrsCyaqh9-Y8Wg2Z-NqB8wvvD-QZlz9m7KijGGRTyoECWa-GkQ08ftSlDK0pUwjeDiMVMzdiJQBqB4ZkpkMzZySaUk6v8vR-YByGi7S7SBOt4_Gbk3iC1MvsRJVKjaMlKmwyPjKW_Fus8z_OEVkw7AV_gZR26T-Wn_91H_CBQPe17IotJmbejnxXiiYK_TNCUrhBTgtm-i0iPzkHrty-jK01oVgghS69dgEiKYPtcdObv72gOTDR6wkmydX4V0vdH2QdF5myjSLE4l9lQIrFU4xXAwTRo7JoQF1tKN8OxNqWXKJSDg
輸入最後生成的token,仍然可以登錄成功。而且,會在config文件下生成對應的token
Kubeconfig
該方式的話,其實就是直接選中.kube/config文件即可,如圖
依舊可以成功登錄。
好了,到此,您就完成了Docker和Kubernetes的初體驗,其實,對於docker和Kubernetes涉及的東西是非常非常多的,到現在也只能說是配置好了可以進行學習的環境。對於Docker和Kubernetes一定要多練,最重要的是要明白其中的操作和原理,這樣才能不用死記硬背也能流暢的操作。
更多優質文章,請搜索公衆號 攻城獅客棧,或掃描下方二維碼
讓我們一起變的更優秀。