下面我以 helloapp 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 helloapp 框架。
创建index.js:
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 文件
然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。
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 文件
有了 Dockerfile 文件以后,就可以使用docker image build命令创建 image 文件了。
$ docker image build -t helloapp .
上面代码中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
如果运行成功,就可以看到新生成的 image 文件helloapp了。
$ docker image ls
生成容器
docker container run命令会从 image 文件生成容器。
$ docker container run -p 8000:3000 -it helloapp
上面命令的各个参数含义如下:
-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]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。