(三)Docker、k8s使用初体验及Dashboard避坑指南!!!

简介: (三)Docker、k8s使用初体验及Dashboard避坑指南!!!

哈喽,各位小伙伴大家好,前两节我们分别介绍了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的镜像,网络上多半给出的地址是官方地址

https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

但还是那个坑爹的原因,这里导致这个源并不可用,以下是本人亲测可用的地址,我们只需要直接在命令行执行以下命令即可

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一定要多练,最重要的是要明白其中的操作和原理,这样才能不用死记硬背也能流畅的操作。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
13天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
55 2
|
23天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
15天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
13天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
13天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
13天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
21天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
55 1
|
Kubernetes 负载均衡 Linux
Docker从入门到掉坑(四) 国内搭建k8s避坑指南
Docker从入门到掉坑(四) 国内搭建k8s避坑指南
439 0
|
存储 JSON Kubernetes
Docker从入门到掉坑(五):继续挖一挖 k8s
Docker从入门到掉坑(五):继续挖一挖 k8s
Docker从入门到掉坑(五):继续挖一挖 k8s
|
Kubernetes 负载均衡 Linux
Docker从入门到掉坑(四):上手k8s避坑指南
Docker从入门到掉坑(四):上手k8s避坑指南
Docker从入门到掉坑(四):上手k8s避坑指南
下一篇
无影云桌面