前言
kubia是一个镜像的nodejs镜像,启动后,默认监听8080端口,通过http请求该端口,可以返回一个信息。
启动该容器后,进入该容器,查看/app.js:
const http = require('http');
const os = require('os');
var requestCount = 0;
console.log("Kubia server starting...");
var handler = function(request, response) {
console.log("Received request from " + request.connection.remoteAddress);
if (++requestCount >= 5) { '访问超过5次,提示出错'
response.writeHead(500);
response.end("Some internal error has occurred! This is pod " + os.hostname() + "\n");
return;
}
response.writeHead(200);
response.end("This is v3 running in pod " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080); '默认监听8080端口'
dockerfile如下:
[root@paas-controller-3:/home/ubuntu]$ docker history docker.artnj.test.com.cn/cci/kubia:v3
IMAGE CREATED CREATED BY SIZE COMMENT
d707daf1e75a 2 years ago /bin/sh -c #(nop) ENTRYPOINT ["node" "app... 0 B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:7ab1d256339e559... 564 B
<missing> 2 years ago /bin/sh -c #(nop) CMD ["node"] 0 B
<missing> 2 years ago /bin/sh -c set -ex && for key in 6A0... 5.07 MB
<missing> 2 years ago /bin/sh -c #(nop) ENV YARN_VERSION=1.15.2 0 B
<missing> 2 years ago /bin/sh -c ARCH= && dpkgArch="$(dpkg --pri... 65.2 MB
<missing> 2 years ago /bin/sh -c #(nop) ENV NODE_VERSION=12.2.0 0 B
<missing> 2 years ago /bin/sh -c groupadd --gid 1000 node && u... 333 kB
<missing> 2 years ago /bin/sh -c set -ex; apt-get update; apt-... 562 MB
<missing> 2 years ago /bin/sh -c apt-get update && apt-get insta... 142 MB
<missing> 2 years ago /bin/sh -c set -ex; if ! command -v gpg >... 7.81 MB
<missing> 2 years ago /bin/sh -c apt-get update && apt-get insta... 23.2 MB
<missing> 2 years ago /bin/sh -c #(nop) CMD ["bash"] 0 B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:caf91edab64f988... 101 MB
能看到最后以ENTRYPOINT 用exec格式,执行 node app.js
安装
启动一个kubia,如果没有镜像,会自动先下载,再执行安装:
$ docker run --name kubia-container -p 8080:8080 -d docker.artnj.test.com.cn/cci/kubia:v3
d2e244f9.....
注意:我们指定了镜像的版本为:v3,如果不指定,则默认为:latest
在启动容器的时候,如果不指定对应的端口参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的
。
语法:
-p p1:p2
p1是主机的端口,p2是容器内部的端口
查看ip信息
[root@EMS3 ~]# docker exec -it kubia-container sh
# ip a
370: eth0@if371: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:09 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.9/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:9/64 scope link
valid_lft forever preferred_lft forever
ip为172.17.0.9
通过浏览器访问
我们通过浏览器访问http://10.43.39.215:8080/
:
但是访问多次后,发现打印“Some internal error has occurred!”,通过查看运行的源码脚本,最后发现是访问超过5次,就额外加上打印日志。
if (++requestCount >= 5)
$ docker exec -it d2e244f9 sh
# cat app.js
const http = require('http');
const os = require('os');
var requestCount = 0;
console.log("Kubia server starting...");
var handler = function(request, response) {
console.log("Received request from " + request.connection.remoteAddress);
if (++requestCount >= 5) {
response.writeHead(500);
response.end("Some internal error has occurred! This is pod " + os.hostname() + "\n");
return;
}
response.writeHead(200);
response.end("This is v3 running in pod " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);
注意:脚本中,容器使用固定的8080端口,因此配置启动命令时,必须制定容器内的为8080,可以配置为
-p 8080 :8080 | http://10.43.39.215:8080 / |
-p 8081 :8080 | http://10.43.39.215:8081 / |
在主机中访问
在主机中执行命令:
[root@EMS3 ~]# curl localhost:8080
This is pod f4a9983fb72c
[root@EMS3 ~]# curl 10.43.39.215:8080
This is pod f4a9983fb72c
[root@EMS3 ~]# curl 172.17.0.9:8080
This is pod f4a9983fb72c
10.43.39.215是主机的ip
172.17.0.9是容器f4a9983fb72c的ip
在容器中访问
我们再创建一个容器,模拟互相访问情况。
[root@EMS3 ~]# docker ps|grep kubia
d2e244f9fb2f docker.artnj.test.com.cn/cci/kubia:v3 "node app.js" 6 days ago Up 2 days 0.0.0.0:8081->8080/tcp kubia-container2
f4a9983fb72c docker.artnj.test.com.cn/cci/kubia:v3 "node app.js" 6 days ago Up 6 days 0.0.0.0:8080->8080/tcp
现在有2个容器
容器 | ip | |
---|---|---|
kubia-container2 | d2e244f9fb2f | 172.17.0.10 |
kubia-container | f4a9983fb72c | 172.17.0.9 |
进入f4a9983fb72c 容器,在里面访问d2e244f9fb2f
[root@EMS3 ~]# docker exec -it f4a9983fb72c sh
# curl 172.17.0.10:8080
This is pod d2e244f9fb2f