一下介紹基於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