下面我以 helloapp 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 helloapp 框架。html
建立index.js:node
const http = require('http'); const port = 3000; const server = http.createServer((req, res) => { console.log(req.url); res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); }); server.listen(port,() => { console.log(`Server running`); });
而后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。docker
FROM node:8.4 COPY . /app WORKDIR /app EXPOSE 3000 CMD node index.js
上面代码一共五行,含义以下。浏览器
FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。 COPY . /app:将当前目录下的全部文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。 WORKDIR /app:指定接下来的工做路径为/app。 EXPOSE 3000:将容器 3000 端口暴露出来, 容许外部链接这个端口。 CMD node index.js
10.2 建立 image 文件app
有了 Dockerfile 文件之后,就能够使用docker image build命令建立 image 文件了。框架
$ docker image build -t helloapp .
上面代码中,-t参数用来指定 image 文件的名字,后面还能够用冒号指定标签。若是不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,因此是一个点。ui
若是运行成功,就能够看到新生成的 image 文件helloapp了。url
$ docker image ls
docker container run命令会从 image 文件生成容器。code
$ docker container run -p 8000:3000 -it helloapp
上面命令的各个参数含义以下:server
-p参数:容器的 3000 端口映射到本机的 8000 端口。 -it参数:容器的 Shell 映射到当前的 Shell,而后你在本机窗口输入的命令,就会传入容器。
这时,app已经运行起来了。打开本机的浏览器,访问
http://127.0.0.1:8000
网页显示"helloworld"。
列出本机的全部 image 文件。
$ docker image ls
删除 image 文件
$ docker image rm -f [imageName]
列出本机的全部 container 文件。
$ docker container ls
删除 container 文件
$ docker container rm -f [imageName]