这里介绍一下如何在docker运行nodejs应用程序,算是对docker的入门。
这篇博客Node.js简介介绍了nodejs的使用。这里仍然使用server.js作为服务端的程序。server.js如下:
var http = require("http");
http.createServer(function(request,response) {
response.writeHead(200,{"Content-Type": "text/plain"});
response.write("HelloWorld");
response.end();
}).listen(8888);
1、下载包含nodejs服务的镜像:
docker pull node
2、编写Dockerfile
#说明使用的镜像
FROM node
#将当前目前复制到容器的/srv/hello,当前目录含有server.js
ADD . /srv/hello
#为后续的RUN,CMD等指令配置工作目录,这里没有
WORKDIR /srv/hello
#暴露的端口号,nodejs使用这个端口对外提供服务。
EXPOSE 8888
3、使用docker bulid命令来创建镜像,别忘了后面有一个点,my_node_hello是镜像的名字。
docker build -t my_node_hello .
4、运行容器,-P,大写的P,是指让主机自动分配一个端口和容器的8888映射。
docker run -it -P --rm my_node_hello node server.js
5、查看运行的容器,主要是看看主机用的哪个端口
docker ps -a
输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f81a0a890b2 my_node_hello:latest "node server.js" 6 seconds ago Up 6 seconds 0.0.0.0:32768->8888/tcp lonely_newton
我们看到主机使用的是32768端口,那么我们就用这个端口访问
192.168.1.34:32768
网页显示如下:
就这么多,过几天继续研究
在对容器进行更新时,经常会出现域名无法解析的情况,这个时候,我们可以在主机中修改/etc/default/docker文件,将下面一行的#
去掉。重新启动docker,
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
sudo service docker restart
有些镜像可能仍然无法解析域名,删了重新下载?