iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
0
DevOps

誤入 DevOps 叢林的後端工程師系列 第 8

Day08 - 撰寫 Dockerfile (2/2)

在前面的範例中我們有使用到 COPY 這個語法,這行的意思是將目前本機所在目錄的「所有」檔案複製到容器的 WORKDIR 指定路徑下。

COPY . .

但如果有些檔案你不想要複製呢?這時我們可以將規則寫進 .dockerignore 檔案裡,用法就像 gitignore 一樣。

**/.git
**/.DS_Store
**/node_modules
*.log
Dockerfile*
docker-compose*
.dockerignore
.git
.gitignore
.vscode

建立一個最基本的 api server 容器

mkdir api-server-demo-2019
cd api-server-demo-2019
npm init -y
npm i express -S
touch app.js

編寫 app.js 檔案

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

編輯 package.json 檔,添加 start 的指令。

{
  "name": "api-server-demo-2019",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node app.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  }
}

把之前撰寫的 dockerfile.dockerignore 都一起放進資料夾裡面。

建立自訂的映像檔 (image)

執行以下指令,你就可以建立一個符合你剛剛撰寫的 dockerfile 規格的的映像檔。

docker build -t api-server:0.0.1-dev .

輸出結果

Sending build context to Docker daemon  22.02kB
Step 1/9 : FROM node:10.16.0-slim
 ---> d98d1ea0154f
Step 2/9 : MAINTAINER alincode alin.code@gmail.com
 ---> Running in d363c63450b9
Removing intermediate container d363c63450b9
 ---> 4ac979437f80
Step 3/9 : ENV NODE_ENV=production
 ---> Running in 5e5a6985db83
Removing intermediate container 5e5a6985db83
 ---> 8185ee897579
Step 4/9 : WORKDIR /app
 ---> Running in b9b7275dff58
Removing intermediate container b9b7275dff58
 ---> a0ec3ba3426b
Step 5/9 : COPY . .
 ---> 975f70506adf
Step 6/9 : RUN ls
 ---> Running in eb0caeac7b7d
README.md
app.js
package-lock.json
package.json
Removing intermediate container eb0caeac7b7d
 ---> 916caf4764c3
Step 7/9 : RUN npm install
 ---> Running in f1151da701bf
npm WARN api-server-demo-2019@1.0.0 No repository field.

added 50 packages from 37 contributors and audited 126 packages in 3.645s
found 0 vulnerabilities

Removing intermediate container f1151da701bf
 ---> 1e8f51d59a17
Step 8/9 : EXPOSE 3000
 ---> Running in 98975b878ff2
Removing intermediate container 98975b878ff2
 ---> 13354e9cd0cf
Step 9/9 : CMD npm start
 ---> Running in 25c0ba963b50
Removing intermediate container 25c0ba963b50
 ---> dfb7cc3513c6
Successfully built dfb7cc3513c6
Successfully tagged api-server:0.0.1-dev

接著你可以使用下面的指令,透過剛剛建立的映像檔把容器跑起來。

docker run -d -p 3000:3000 --name api-container api-server:0.0.1-dev

輸出結果

9ddd08f8fea724fdb3e2e6f8a61bb85b5c61ba2d520c37a882cece673b27051f

現在你可以瀏覽 http://0.0.0.0:3000/ 網址了。

範例的原始碼:https://github.com/alincode/api-server-demo-2019


上一篇
Day07 - 撰寫 Dockerfile (1/2)
下一篇
Day09 - Docker CLI 常用語法
系列文
誤入 DevOps 叢林的後端工程師30

尚未有邦友留言

立即登入留言