docker 入门 2 启动一个kubia镜像

前言

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:8080http://10.43.39.215:8080/
-p 8081:8080http://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-container2d2e244f9fb2f172.17.0.10
kubia-containerf4a9983fb72c172.17.0.9

进入f4a9983fb72c 容器,在里面访问d2e244f9fb2f

[root@EMS3 ~]# docker exec -it f4a9983fb72c sh
# curl 172.17.0.10:8080
This is pod d2e244f9fb2f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值