使用docker构建node demo

docker

使用docker来打包node.js开发的应用,然后发布到自己的私有仓库。在远程机器上拉取这个镜像,做到开发/测试/线上环境的一致性。

为了以后k8s的测试用,特意打包了一个简单的node demo镜像,然后发布到docker hub上。

node demo

1
2
3
4
5
6
7
8
9
10
11
// app.js

const http = require('http')

const handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
const app = http.createServer(handleRequest);
app.listen(8080);

docker image

创建Dockerfile文件,写入如下内容:

1
2
3
4
FROM mhart/alpine-node:10
EXPOSE 8080
COPY app.js .
CMD node app.js

这里使用的node基础镜像是mhart/alppine-node:10,打包出来的镜像大小在74m左右。
执行docker build -t hello-node:0.0.1 .

docker hub

注册登陆 https://hub.docker.com

这里的docker ID是你以后镜像仓库的前缀,比如我的是dillonliang,获取我的镜像就是docker pull dillonliang/image_name,创建一个有意义且不重复的docker ID。

在命令执行如下命令登陆docker

1
docker login -u DOCKER_ID -p PASSWORD

控制台打印Login Succeeded代表你已经登陆成功了。
这里的DOCKER_ID是在docker hub里申请的Docker ID,PASSWORD是登陆的密码。

推送image并验证

对hello-node重新打tag

1
docker tag hello-node:0.0.1 dillonliang/hello-node:latest

发布到docker hub

1
docker push dillonliang/hello-node

docker hub image

删除本地的docker image

1
2
docker rmi hello-node:0.0.1
docker rmi dillonliang/hello-node:latest

此时检查docker images,没有了刚才我们创建的hello-node

拉取发布到docker hub中的镜像

1
docker pull dillonliang/hello-node

拉取成功后,说明你的镜像可以被别人使用了,我们将用这个hello-node镜像做后续的k8s操作。