学习k8s(一)

教程来自k8s in Action书籍,在这里纪录学习笔记

第一步,重拾docker

安装虚拟机,centOS7,docker,网上都有。第一步,学会构建镜像

 

先在Linux下的随意一个文件夹下准备好两个文件,app.js和Dockerfile

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 hit " + os.hostname() + "\n");
};

var www = http.createServer(handler);
www.listen(8080);
代码清晰地说明了实 现的功能 这里在8080 端口启动了 HTTP 服务器。
服务器会以状态码 200 OK 和文字  you   hit <hostname 来响应每个请求。
请求 handler 会把客户端的 IP 打印 到标准输出 ,以 便日后查看。
注意:返回的主 机名是服务器真实的主 机名,不是客户端发出的 HTTP 请求 中头的 Host 字段

 

为了把应用打包成镜像,首先需要创建 个叫 Dockerfile 的文件,它包含了
系列构建镜像时才会执行的指令 Dockerfile 文件需要和 a pp.js  文件在同 目录,并包 含下面代码清单中的命令
FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]
From 行定义了镜像的起始内容(构建所基于的基础镜像) 这个例子中使用的是node 镜像的 tag 7版 本。
第二 行中把 ap p.js  文件从本地 件夹添加到镜像的根目 录,保持 a pp.js  这个文件名。
最后一 行定义了当镜像被运行时需要被执行的命令, 这个例子中,命令是 n ode app . js
 
 
为什么选择基础镜像
你或许在想,为什么要选择这个镜像作为基础镜像 因为这个应用是 Node. js 应用,镜像需要包 含可执行的 node 进制文件来运行应用。 你也可以使用任何包含这个二进制文件的镜像,或者甚至可以使用 Linux 发行版的基础镜像,如fedora或ubuntu ,然后在镜像构建的时候安装 Node.js 但是由于 node 镜像是专 门用 来运行 Node.js 应用的,并且包含了运行应用所需的 一切, 所以把它当作基础镜像。
 
然后输入命令构建
docker build -t kubia .
别忘了结尾的点,不然构建失败。用户告诉Docker需要基于当前目录,构建一个叫kubia的镜像,Docker会在目录中寻找Dockerfile,然后基于其中的指令构建镜像。
 
 
 
镜像分层
你或许会认为每个Dockerfile只创建一层,其实不是,构建时,每条单独的指令都会创建一个新层。镜像构建的过程中,拉取基础镜像所有分层之后,Docker在它们上面创建一个新层并且添加app.js。然后回创建另一层来指定指定镜像运行时所执行的命令。最后一层会被标记为kubia:latest。下图展示了这个过程。同时也会展示另外一个叫other:lastest的镜像如何与我们构建的镜像共享同一层 Node.js镜像。
 
 
此时镜像构建完成。
 
 
 
可以跑起来了
docker run --name kubia-contaioner -p 8080:8080 -d kubia
 
 

这条命令告知Docker基于kubia镜像创建 个叫kubia-container的新 容器。 这个容器与命令行分离(-d标志), 这意味着在后台运行。 本机上的8080端口会被映射到容器内的8080端口(-p8080: 8080选项), 所以可以通过http:// localhost: 8080访间这个应用。
 
 
后面这串英文数字就是把主机名返回,但不是宿主机的主机名,是Docker容器的ID。
 
 
 
 
接下来,跑成功了还得研究它的内部。由于一个容器里可以运行多个进程,所以总是可以运行新的进程去看看里面发生了什么。如果镜像里有可用的shell二进制可执行文件,也可以运行一个shell。
Node.js镜像包含了bash shell,所以可以像这样在容器内运行shell
 
coker exec -it kubia-container bash
 
这会在已有的kubia-container容器内运行bash。bash进程会和主容器进程拥有相同的命名空间。这样可以从内部探索容器,查看Node.js和应用是如何在容器里运行的。-it选项是下面两个选项的简写:
-i,确保标准输入流保持开放。需要在shell中输入命令
-t,分配一个伪终端(TTY)
如果希望像平常一样使用shell,需要同时使用这两个选项(缺少第一个就无法输入任何命令。缺少第二个,那么命令提示符不会显示,并且有些命令会提示TERM变量没有设置)
 
从内部探索容器。下面都展示如何使用shell查看容器内运行的进程。
 
 
 
 
进程的ID在容器中与主机不同。容器使用独立的PID Linux命名空间并且有着独立的系列号,完全独立于进程树。
正如拥有独立的进程树一样,每个容器也拥有独立的文件系统。在容器内列出根目录的内容,指挥展示容器内的文件,包括镜像内的所有文件,再加上容器运行时创建的任何文件(类似日志文件)
 
其中包含app.js文件和其它系统目录,这些目录是正在使用的node:7基础镜像的一部分。可以使用exit命令退出容器。
 
 
停止和删除容器
docker stop kubia-contaioner
因为没有其他的进程在容器内运行,这会停止容器内运行的主进程。容器本身仍然存在并且可以通过docker -ps -a来查看。-a 选项打印出所有的容器,包括运行中的和已经停止的。
docker rm kubia-contaioner
 
镜像仓库推送镜像
这里就注册Docker Hub。然后根据Docker Hub的规则标注镜像。Docker Hub允许向你的Docker Hub ID开头的镜像仓库推送镜像。
然后根据注册ID重命名
 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值