在前面的範例中我們有使用到 COPY
這個語法,這行的意思是將目前本機所在目錄的「所有」檔案複製到容器的 WORKDIR
指定路徑下。
COPY . .
但如果有些檔案你不想要複製呢?這時我們可以將規則寫進 .dockerignore
檔案裡,用法就像 gitignore
一樣。
**/.git
**/.DS_Store
**/node_modules
*.log
Dockerfile*
docker-compose*
.dockerignore
.git
.gitignore
.vscode
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
都一起放進資料夾裡面。
執行以下指令,你就可以建立一個符合你剛剛撰寫的 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