node+vue項目docker、docker compose及docker swarm集羣模式啓動

 一下介紹基於node獨立運行的vue前段項目Dockerfile 配置及啓動

模式一、docker直接啓動

項目根目錄下創建Dockerfile文件。

#指定依賴鏡像爲node並制定版本,2020-1-7最新未定版本爲12.13.1
FROM docker.io/node:12.13.1

# Create app directory
WORKDIR /usr/src/vueappdev

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
# 同步時區設置
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#設置node源地址爲淘寶源
RUN npm config set registry http://registry.npm.taobao.org/
#無需每次運行,靈活使用
RUN npm install

# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .
#指定暴露端口號,此處應與項目配置中的端口號一直
EXPOSE 8080
#指定項目運行指令爲 npm run prod
CMD [ "npm", "run", "prod" ]

運行命令:

#在項目根目錄下執行一下命令
#生成docker鏡像,鏡像名爲erms/web,注意命令結尾有個點
docker build -t erms/web .
#運行erms/web鏡像,綁定容器的 8080 端口,將其映射到本地主機 127.0.0.1 的 9527 端口上,對外訪問使用9527。
docker run -p 9527:8080 --name ermsweb -d erms/web


命令釋義:
例如:docker run -itd -p 9527:8080 -v /user/local/ermsweb:/workspace --name ermsweb --restart=always erms/web

這裏的/user/local/ermsweb是你的vue項目路徑
-i: 以交互模式運行容器,通常與 -t 同時使用;
-t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用;
-it的意思是,用一個終端跟容器進行交互;
-p: 端口映射,格式爲:主機(宿主)端口:容器端口
-d: 後臺運行容器,並返回容器ID;
--name="": 爲容器指定一個名稱;
--restart=always   表示在容器退出時總是重啓容器;
具體解釋詳見菜鳥教程:
https://www.runoob.com/docker/docker-run-command.html

docker run -p 9527:8080 --name ermsweb -d erms/web命令將鏡像運行起來之後,我們就可以通過宿主機的IP:9527來訪問項目了。本地訪問即可使用127.0.0.1:9527,雲服務器可以用www.xxx.com:9527訪問。

模式二、docker-compose

項目根目錄下或任意位置創建docker-compose.yml

version: '3'

services:
  dev:
    image: erms/web
    ports:
      # 9527綁定宿主機端口,對外訪問能使用。8080綁定docker容器端口,即項目端口
      - "9527:8080"
    #    restart: always
    volumes:
      - /user/local/erms:/workspace
    stdin_open: true
    tty: true

切換到docker-compose.yml所在目錄(或者執行命令是指定compose文件位置),執行命令。

#生成鏡像
docker build -t erms/web .
#docker compose命令啓動
docker-compose up -d

訪問方式與模式一相同。

模式三、docker集羣docker swarm/stack模式運行

項目根目錄下或任意位置創建docker-compose-ermsweb.yml

version: '3.3'

services:
  ermsweb:
    hostname: ermsweb
    image: erms/web
    ports:
      - target: 8080
        published: 9527
        mode: host
    labels:
      "type": "2"
    volumes:
      - /ceph/erms/ui/ERMS_UI:/usr/share/nginx/html
    networks:
      - edoc2_default
    deploy:
      # placement:
      #   constraints:
      #     - node.labels.nodetype == InDrive
      # 設置集羣個數,這裏以單機爲例
      replicas: 1
      restart_policy:
        condition: on-failure
volumes:
  esdata:
    driver: local

networks:
  edoc2_default:
    external:
      name: indrive_edoc2
#生成鏡像,鏡像名稱應與compose文件中的一致
docker build -t erms/web .
#創建docker集羣服務,-c指定compose文件的位置,指定集羣名稱爲erms
docker stack deploy -c /home/erms/compose/singelton/docker-compose-ermsweb.yml erms

訪問方式相同。

集羣模式下更新移除服務等操作請移步:https://blog.csdn.net/CaptainJava/article/details/103869834

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章