iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
DevOps

30天 k8s 學習筆記系列 第 2

Day-02-Express與Docker

  • 分享至 

  • xImage
  •  

Express Hello world

Express 4.x

  $ express --no-view helloworlddemo
  $ cd helloworlddemo
  $ npm install
  $ npm start

檔案結構

.
├── app.js
├── bin
│   └── www
├── package-lock.json
├── package.json
├── public
│   ├── images
│   ├── index.html
│   ├── javascripts
│   └── stylesheets
│       └── style.css
└── routes
    ├── index.js
    └── users.js

以這個範例實作 Dockerfile

FROM node:18.0-slim
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]

FROM

宣告基本的 Docker Image 環境

node:18.0-slim 詳情

Debian:11-slim 為基礎 Nodejs 版本18 的環境

WORKDIR

設定工作的資料夾位置

COPY

將檔案複製到 Docker Image 內的 WORKDIR 資料夾內

COPY SOURCE TARGET

Note: COPY和ADD二個的功用都一樣,就是將檔案複製進去image裡,COPY只能複製本機端的檔案或目錄,ADD能增加遠端url的檔案到docker image,ADD能順手將本機端複製進去的tar檔解開(遠端的tar不行!)。在實例上並不建議使用ADD來抓取網路上的檔案,會使用RUN curl or wget的方式。原因是使用一次ADD指令會增加docker image layers一次,原則上layers越多,docker image size就會越大!

RUN

建立image內部再跑的指令,是跑在Linux裡面的,跟ENTRYPOING與CMD最大的不同就是,他不是作為Image的「啟動指令」,而是作為image的「建造指令」

EXPOSE

很多人以為加上EXPOSE 3000,docker run起來後,就可以從本機端連得到container的 3000 port。

EXPOSE概念上比較像是在告訴使用這個image的人,服務是在那個port。

  $ docker pull nginx
  $ docker inspect nginx
  $ docker run -p 8888:3000 -d nginx

CMD

在 Container 運行的時候 執行此命令

Note: ENTRYPOINT是Dockerfile 定義的一個指令,他的作用類似於CMD,都是在container 啟動時會自動執行的指令,你可以不定義CMD,然後改成定義ENTRYPOINT,你的container 照樣能夠啟動,如同你之前將命令寫在CMD 一樣


上一篇
Day-01-Docker簡介
下一篇
Day-03-Container
系列文
30天 k8s 學習筆記5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言