經常使用的 docker 命令
- 安裝
docker
環境
docker --help
查看 docker 命令提示
docker ps -a
查看全部運行的容器
docker images
查看全部的
- 配置 Dockerfile 文件
- 查看容器運行日誌:
docker logs -f [containerId]
Docker 打包 egg 鏡像
- 在項目根目錄新建 Dockerfile 文件,編輯內容以下
FROM node:10.13.0
ENV NODE_ENV production
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/package.json
RUN npm i --production --registry=https://registry.npm.taobao.org
COPY . /usr/src/app
EXPOSE 9000
CMD npm start
複製代碼
- 在 egg 項目的
package.json
文件中,在 start 啓動項中,--daemon
是後臺啓動。若是使用 docker 容器,須要去除 --daemon
.
- 進入項目根目錄,執行鏡像打包命令:
docker build -t image_name ./
- 打包完成之後執行容器啓動命令:
docker run -itd --net=host --name container_name -p 8000:8000 image_name
-t
這個參數很重要,它表明不會進入到容器內部去執行命令,若是去掉它,會在容器內部執行啓動 Dockerfile CMD 中的命令。
- 執行完畢後,能夠經過 docker ps 命令去查看,會顯示正在運行的容器,若是發現容器沒有正常啓動,能夠執行
docker logs -f containerID
命令,查看容器內的執行日誌。
可能出現的問題
- 容器沒法正常啓動:出現這種狀況,首先檢查你的容器打包命令是否正確,
docker ps -a
命令查看你打包的全部容器. 容器打包命令中的 -itd
中的 -d
至關於在容器內部執行了 Dockerfile 文件中的 CMD 命令,咱們知道在 nodejs 中執行命令後控制檯會有日誌輸出,能夠經過 docker logs -f containerID 檢查日誌輸出。
- 容器正常啓動,可是容器中的程序沒法正常鏈接本地宿主機中的數據庫等本地服務,首先要搞清楚服務端口號,在容器運行命令中加上對應的端口映射,好比
docker run -itd --net=host --name container_name -p 8000:8000 -p 9999:9999 image_name . --net=host
參數很是重要,這告訴容器和宿主機共享網絡。這個時候,在容器內部能夠經過你映射的端口號去正常訪問本地服務。
- 若是前面兩個步驟執行完之後,仍是沒法正常啓動和訪問服務,建議去 egg.js github 倉庫中去查詢相關問題的解決方案 egg.js issue