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