2

下面我以 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]

ref: https://www.ruanyifeng.com/bl...


Reco
4.6k 声望541 粉丝

敢作敢为