Docker 建立一個node.js service

shangrex
1 min readJul 12, 2021

--

可以參照上一片的 javascript service

Docker 下載

curl -fsSL https://get.docker.com | sudo bash

Docker compose 下載

下載官網

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose

建立 Dockerfile 以建立image

$file 是js檔案的位置
$PATH 是working directory,請不要使用在PATH中加入~,使用絕對路徑

#首先先load node的images,來當作web app
FROM node:14
#建立自己的work dir
WORKDIR $PATH
#把package.json複製進去
COPY package*.json ./
RUN npm install
#bundle app source
COPY . .
#打開5001 port
EXPOSE 5001
#執行command
CMD ["node", "$file"]

從官網複製過來的解釋
FROM: creates a layer from the ubuntu:18.04 Docker image.
COPY: adds files from your Docker client’s current directory.
RUN: builds your application with make.
CMD: specifies what command to run within the container.
WORKDIR: setup the dockerfile
中文版解釋

之後把dockerfile build成一個images
$name 為images的名字

sudo docker build . -t $name

測試images所建立的container

  • 若是要測試自己的images,可以先把images建立成一個container玩看看
docker run -p 8080:5001 -d <images_id>

看自己contianer的狀態

docker ps -a
docker logs <container_id>

8080為外部的port
5001為container內部的port

若是要刪除container

docker stop <container_id>
docker rm <container_id>

若是要刪除images

docker rmi <images_id>

若是要進入container中的 bash

docker run <container_id> -it /bin/bash

建立docker-compose管理container

docker-compose可以一次管理多個docker container,只要轉寫好yml檔案,建立image之間的關係,就可以一鍵啟動或停止。

version: "2"
services:
node:
image: $name
environment:
- NODE_ENV=production
volumes:
- ./:$PATH
expose:
- "5001"
ports:
- "8080:5001"

替換掉$name & $PATH
8080為外部的port
5001為container中的port
讓他在背景跑起來,在有docker-compose.yml的目錄中做

sudo docker-compose up -d

觀看docker-compose的狀態

docker-compose ps

reference

dockerfile setup

--

--

shangrex
shangrex

Written by shangrex

CS student in UIUC from Taiwan, Love to read books and play LOL

No responses yet