准备工作
目标
- 准备并熟悉运行实验环境。
- 熟悉 Docker 基础知识和指令。
- 熟悉 K8S 基础知识和 kubectl 基本指令。
说明
- 本项目的开发依赖了多种语言和技术栈,我们已经为您准备了实验环境的 CVM 镜像,课前这个镜像会被分享给您。
- 所有的操作都可以在 CVM 实例中进行。
- 但您也可以选择自己在本地环境安装,请参考本章下方的安装说明,但本地开发并不是实战的主要内容。
基础知识
Docker 名词解释
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
- 层(Layer):镜像是由多个文件系统(只读层)叠加而成, 每个层仅包含了前一层的差异部分。 当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个可写层。容器上所做的任何更改,譬如新建文件、更改文件、删除文件,都将记录与可写层上。
Docker 常用命令
运行容器:
docker run --name=nginx -p 8099:80 -v /tmp:/tmp -d nginx:alpine
docker run -it --rm nginx:alpine sh
- –name 容器名称
- -p 端口映射
- -v 磁盘映射
- -d 以守护进程运行
- -it 运行后获得一个交互终端
- –rm 实例退出后,直接删除容器实例(无需执行 docker rm 清理)。请注意:如果程序运行失败导致进程退出,实例亦会被清除。
- 镜像后面的 “sh”:表示需要运行的容器内的命令,如果没有具体的命令,会运行 Dockerfile 里面指定的 cmd 或者 entrypoint 等命令。
查看镜像信息:
docker images
查看运行中的容器实例:
doker ps
查看所有容器实例,包括没有运行的:
docker ps -a
- 通过上述命令,可以查看容器镜像或实例的名字和 ID,名字和 ID 都可以作为标识符用于操作相应资源。
查看容器详情:
docker inspect nginx
- nginx 是容器名称,也可以使用 容器ID。
对于一个已经启动的容器,可以使用下面的命令进入容器终端 或者 执行某个指令。
docker exec -it nginx sh -c "(bash || ash || sh)"
docker exec nginx sh -c "ls /tmp"
停止一个容器实例
docker stop nginx
启动一个未运行的容器实例
docker start nginx
查看容器日志
docker logs nginx
docker logs nginx -n 200
docker logs nginx -f
- -n 从尾部开始数,需要显示的行数。
- -f 持续追踪日志。
删除镜像实例:
docker rm nginx
删除镜像:
docker rmi nginx:alpine
镜像构建
docker build -t yourimage .
- -t 是标签,通常,标签的组成是 镜像地址/命名空间/镜像名称:版本号 。
镜像推送
docker login yourregistry
docker push yourimage
- 一般的镜像私服需要登录,使用 docker login 命令进行登录。
- yourimage 是你本地镜像的完整名称,包含地址,名称,版本号,也是你镜像的标签。
K8S 名词解释
使用腾讯云容器服务 TKE,会涉及到以下基本概念:
- 集群(Cluster):是指容器运行所需云资源的集合,包含了若干台云服务器、负载均衡器等云资源。
- 节点(Node):节点可以是一个虚拟机或者物理机器,取决于所在的集群配置,每个节点包含运行 Pods 所需的服务。
- 实例(Pod):由相关的一个或多个容器构成一个实例,这些容器共享相同的存储和网络空间。
- 工作负载(Workloads):Kubernetes 资源对象,用于管理 Pod 副本的创建、调度以及整个生命周期的自动控制。
- Service:由多个相同配置的实例(Pod)和访问这些实例(Pod)的规则组成的微服务。
- Ingress:Ingress 是用于将外部 HTTP(S)流量路由到服务(Service)的规则集合。
- 镜像仓库:用于存放 Docker 镜像,Docker 镜像用于部署容器服务。
K8S常用命令
kubectl 目前安装在容器镜像中,可以在容器内的终端环境中测试下面的命令。
当前您可能还没有可用集群,但不要紧,我们会在课程现场协助大家开通 TKE 集群。
请首先掌握如下几个基础的命令行操作:
查看资源(namespace,configmap,pod,service 等):
kubectl get <ns|cm|po|svc|..> -n <namespace>
创建和修改 Kubernetes 资源:
kubectl apply -f some.yaml
删除 Kubernetes 资源:
kubectl delete -f some.yaml
进入 Pod 内部:
kubectl exec -it <pod-name> -- sh
查看 Pod 详情:
kubectl describe pod <pod-name>
查看 Pod 日志:
# 返回仅包含一个容器的pod nginx的日志快照
kubectl logs nginx
# 持续输出pod ruby中的容器web-1的日志
kubectl logs -f -c ruby web-1
# 仅输出pod nginx中最近的20条日志
kubectl logs --tail=20 nginx
# 输出pod nginx中最近一小时内产生的所有日志
kubectl logs --since=1h nginx
延伸:本地安装说明
1. 安装 Docker Desktop 环境
本地安装 Docker Desktop 环境,下载地址:https://www.docker.com/products/docker-desktop
下载后,按照提示安装即可。
2. 安装 kubectl
kubectl 是与 K8S 集群交互的命令行工具,是控制 K8S 的基础。
本地安装 kubectl 客户端工具,参考此帮助文档安装:https://kubernetes.io/zh/docs/tasks/tools/
3. 安装 JAVA 环境
安装 JDK
下载官方 JDK,或者 OpenJDK,并按照说明安装。
安装 Maven
Maven 是 Java 项目,编译/包依赖管理工具。
下载 Maven(http://mirrors.tencent.com/apache/maven/maven-3/),解压后,请将 bin 目录设置为系统 path。
4. 安装 .NET 环境
下载 .NET Core 安装包:https://dotnet.microsoft.com/download ,按照软件提示步骤安装。
5. 安装 PHP 环境
PHP 运行时
可以按照官方文档:https://www.php.net/manual/zh/install.php 。或者使用 PHP 集成的开发运行环境,如 XAMPP,WAMPServer 等。
Mac 下已经内置了足够运行本项目的 PHP 环境。
安装 composer
composer 是 PHP 的依赖包管理工具。
请按照官方指示安装:https://getcomposer.org/
6. 安装 Golang 环境
到官方下载页面 https://golang.org/dl/ 下载安装包,按照提示安装即可。
7. 安装 Node.js
到官方首页 https://nodejs.org/zh-cn/ 下载安装包安装。
8. 安装 wrk 压测工具
提示:wrk 支持 mac 和 linux,暂不支持 Windows。如果您的本地环境是 Windows,可选择够买一台腾讯云上的 CVM 虚拟机,进行后续的压测实战。
- MacOS 安装:
brew install wrk
- CentOS / RedHat / Fedora:
sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
sudo cp wrk /usr/local/bin