[微服務] Docker基礎(5) - 使用Docker進行第一個實戰
前言
在這篇文章我們要
- 建立一個超簡單的node.js web app
- 根據此app創建我們的Dockerfile
- 建立image
- 執行container
- 透過瀏覽器連接我們的web應用
建立NodeJs web app
前言: 這不是我們的主要目的如果有更喜歡的語言或方式的話都可以取代
創建一個乾淨的資料夾並且建立一個簡單的nodeJs app
package.json
{
"dependencies": {
"express": "*"
},
"scripts": {
"start": "node index.js"
}
}
index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hi there');
});
app.listen(8080, () => {
console.log('Listening on port 8080');
})
記得要先安裝node.js與npm
建立Dockerfile
- 基底選擇
- 哪個基底:他的tagName
- 跑哪個Dependency
- 執行Dependency指令
# Specify a base image
FROM node:alpine
# Install some dependencies
RUN npm install
# Default command
CMD ["npm", "start"]
可以看到FROM中我們將alpine改成node:alpine
因為node這個基底是node官方提供的,他可以直接幫你將node的各種工具安裝好,而我們為了方便所以選擇了alpine的tag,代表著這個基底也包含了alpine提供的package功能
問題來了
- 如何放我們的source到我們的image中呢?
COPY 指令
在我們的Dockerfile中加上COPE指令,將我們的source放到image中
COPY ./ ./
指令代表將目前目錄的文件放到image的主目錄目錄中,全部的Dockerfile會如下
# Specify a base image
FROM node:alpine
# Install some dependencies
COPY ./ ./
RUN npm install
# Default command
CMD ["npm", "start"]
我們執行一次docker build .
可以看到我們的image順利產出了
還記的我們之前文章提到的將image客製化自己的標籤嗎
docker build -t 你的名稱/此image的名稱:版本號 .
我們就可以透過docker images中看到我們客製化的image了!!
啟動我們的Container
記得在build後的image id,如果忘記了可以用docker images查詢,直接讓他起來吧
docker run image-id
問題又來了
我起來了可是我卻無法透過我的瀏覽器看到我的node web app訊息,問題在哪呢?
因為我們目前瀏覽器訪問的是實際電腦的port,而這個port並沒有和我們的容器做掛勾,所以當然怎麼都沒辦法看到我們的NodeJS web app,
讓我們的Container port和電腦Hook up!
在我們的run指令增加-p設定Port
docker run -p 8080:8080 image-id
- -p port:port 此變數用來宣告我們的實體port對應到的Container port
小知識:為了避免常使用的Port被我們的Container佔用,所以通常本機port都會用較冷門的port去和Container做映射
總結
今天我們將NodeJs web app和裝在Docekr容器中並且啟動,這也是微服務的基本操作,一口氣起好幾個Container包裝我們的微服務。
留言
張貼留言