顯示具有 docker 標籤的文章。 顯示所有文章
顯示具有 docker 標籤的文章。 顯示所有文章

2020-11-08

使用 docker-node 測試 nodejs 專案

使用 docker-node 測試 nodejs 專案

首先你的環境必須已經安裝 docker,參考「取得 docker」。

# 取得 nodejs,在此使用較舊版本 10 docker pull node:10

在專案中建立 docker-compose.yml 檔:

version: "2" services: node: image: "node:10" working_dir: /Users/shinder/Dropbox/my-nodejs-proj environment: - NODE_ENV=development volumes: - ./:/Users/shinder/Dropbox/my-nodejs-proj ports: - 3000:3000 command: "node ./src/index.js"

其中,比較要注意的是 ports,第一個 3000 是 host 使用的 port,第二個 3000 是 container 使用的 port。 執行使用 up,關閉使用 down:

# 啟動 docker-compose up # 在背景中啟動 docker-compose up -d # 關閉 docker-compose down # 查看正在執行的 containers docker ps

*** 在啟動專案的時候出錯了「invalid ELF header」,無法載入 bcrypt 模組。 問題出在,bcrypt 是平台相依性的,我的 host 是 MacOS,container 則是 Debian。

目前想到的解法是,重新建立 image 檔,將專案內的檔案(排除 node_modules)複製到 container,然後再重新 npm install 所有套件。要設定三個檔案:.dockerignore,Dockerfile,docker-compose.yml。

# .dockerignore node_modules
# Dockerfile FROM node:10 RUN npm install -g nodemon RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app RUN npm install EXPOSE 3000
# docker-compose.yml version: "3" services: node: build: . working_dir: /usr/src/app environment: - NODE_ENV=development volumes: - ./:/usr/src/app - /usr/src/app/node_modules # 上式可以用 container 的路徑覆蓋原來 host 的 node_modules 目錄 ports: - 3000:3000 command: "npm run dev"

執行 docker-compose up 即可建立,若調整設定檔後要重建可使用 docker-compose build。 其它常用的指令:

# 連入 container 的 bash docker exec -it <container-id> /bin/bash # 列出所有 image 檔 docker image ls # 移除某個 image 檔 docker rmi <image-id>

2019-01-24

使用 docker mongo

啟動 mongo ,將 27017 port bind 到 localhost 的 27017 port,可方便使用 robo 3T 工具(儲存區沒有設定):

$ docker run -d -p 27017:27017 --name 容器名稱  mongo

若要使用 mongo console,依據官方文件(不一定要 bind port):

$ docker run -it --link 容器名稱:mongo --rm mongo mongo --host mongo test

使用 robo 3T 是比較方便的。
若要使用 local 磁碟當儲存區:

mkdir ~/data
sudo docker run -d -p 27017:27017 -v ~/data:/data/db mongo



FB 留言