# 實例:製做本身的 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...

相關文章
相關標籤/搜索