哈喽,各位小伙伴大家好,前两节我们分别介绍了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一定要多练,最重要的是要明白其中的操作和原理,这样才能不用死记硬背也能流畅的操作。