# 实例:制做本身的 Docker 容器

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

而后,在项目的根目录下,新建一个文本文件 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]

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

相关文章
相关标签/搜索