docker回顾
创建一个简单的Node.js应用
const http = require('http');
const os = require('os');
console.log("Kubia server starting...");
var handler = function(request,response){
console.log("Received request from"+request.connection.remoteAddress);
response.writeHead(200);
response.end("You've hit "+ os.hostname()+"\n");
};
var www = http.createServer(handler);
www.listen(8080);
为镜像创建Dockerfile
FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node","app.js"]
构建容器镜像
docker build -t kubia .
镜像构建的过程:用户告诉 Docker 需要基于当前目录(注意命令 结尾的点)构建一个叫 kubia 的镜像,Docker 会在目录中寻找 Dockerfile,然后基 于其中的指令构建镜像。
运行容器镜像
docker run --name kubia-container -p 8080:8080 -d kubia
这条命令告知Docker基于kubia镜像创建一个叫kubia-container的新容器。这个容器与命令行分离 (-d标志),这意味着在后台运行.
通过localhost:8080访问应用
获取更多容器信息
docker ps只会展示容器的大部分基础信息。可以使用docker inspect查看更多的信息。
docker inspect kubia-container Docker会打印出包含容器底层信息的长JSON。
探索容器内部
docker exec -it kubia-container bash
这会在已有的 kubia-container 容器内部运行bash。bash进程会和主容器进程拥有相同的命名空间。
-it选项是下面两个选项的简写:
• -i,确保标准输入流保待开放。需要在 shell 中输入命令。
• -t, 分配一个伪终端(TTY) 。
例如: 查询进程:ps -aux
停止和删除容器
docker stop kubia-container
docker rm kubia-container
向镜像仓库推送镜像
- 使用附加标签标注镜像
不会重命名标签,而是给同一个镜像创建一个额外的标签 docker tag kubia 1150079039/kubia
源 目的 - 向Docker Hub推送镜像 docker push 1150079039/kubia
配置kubernetes集群
用Minikube运行一个本地单节点kubernetes集群
Minikube是一个构建单节点集群的工具,对于测试kubernetes和本地开发应用都非常有用。
安装Minikube
使用Minikube启动一个kubernetes集群
minikube start
安装kubernetes客户端(kubectl)
要与kubernetes交互,还需要kubectl CLI客户端
使用kubectl查看集群是否正常工作
kubectl cluster-info
kubectl列出所有集群节点
kubectl get nodes
kubectl get命令可以列出各种kubernetes对象
查看对象更多信息
kubectl describe node gke-kubia
在kubernetes上运行第一个应用
部署Node.js应用
kubectl run kubia --image=1150079039/kubia --port=8080 -generator=run/v1
--image=1150079039/kubia 显示的是指定要运行的容器镜像,--port=8080选项告诉Kubernetes应用正在监昕8080端口。最后一个标志(--generator)需要解释一下,通常并不会使用到它,它让Kubernetes创建一个Replication Controller, 而不是Deployment。
列出pod
kubectl get pods
访问web应用
每个pod都有自己的IP地址,但是这个地址是集群内部的,不能从集群外部访问。要让pod能够从外部访问,需要通过服务对象公开它,要通过创建一个特殊的LoadBalancer类型的服务,将创建一个外部的负载均衡,可以通过负载均衡的公共IP访问pod。
创建一个服务对象
要创建服务,需要告知kubernetes对外暴露之前创建的ReplicationController(缩写为rc):
kubectl expose rc kubia --type=LoadBalancer --name kubia-http
列出服务
kubectl get service