docker部署项目(vue/react/node/web......)

docker 项目部署

我默认你已经安装了 docker 儿~

先说一下,下面执行可能会遇到的问题。

  1. Permission denied
    运行shell报错:Permission denied 意思就是没有权限。
    使用命令:chmod 777 ***name***.sh ,修改该文件***name***.sh 的权限,然后再执行上面第二步的操作即可。

  2. bash: vi: command not found 这是因为vim没有安装。
    使用如下命令安装:

apt-get update
apt-get install vim

附一个docker部署web项目的参考demo

https://github.com/yaodongyi/web-page


配置react,vue,web打包脚本

./build.sh 运行入口,可以在package.json上配置script: { docker_build: “./build.sh” }

#!/usr/bin/env bash
set -e
pwd=$PWD 
 
function buildImage(){
    version=`awk '/"version":/{gsub(/"|,/,"",$2);print $2;exit;}' ${pwd}/package.json`
    rm -rf dist # 删除当前目录下的dist 
    rm -rf ${pwd}/docker/dist # 删除docker下的dist
    npm run build # 重新构建
    cp -r ${pwd}/dist ${pwd}/docker/dist # copy到docker 
    dockerImage=web-page-$1:${version} # 镜像名称 注意:web-page对应package.json的name。
    docker build ${pwd}/docker/ -t ${dockerImage} --build-arg DIST_DIR=/dist # 构建镜像,指定DIST_DIR变量
}
cnpm install
buildImage webpage # 传入的$1参数
docker-compose -f docker-compose.yml up -d # 运行compose	

./docker-compose.yml

version: '3.1'
services:
  webpage:
    image: web-page-webpage
    restart: always
    ports:
      - 1234:80 # 端口映射

配置Dockerfile ./docker/Dockerfile

FROM nginx # 构建nginx基础镜像
ARG DIST_DIR
COPY ${DIST_DIR} /usr/share/nginx/html # 复制DIST_DIR目录到docker内的/usr/share/nginx/html

然后运行 ./build.sh 即可打包生成docker镜像。
以上适用于react,vue,web项目。
可以通过docker ps查看是否已经运行起来了。
在这里插入图片描述


node项目部署

./Dockerfile

FROM node:alpine # 构建node基础镜像
ARG DIST_DIR
COPY . /usr/share/nginx/html # 将当前目录内容 复制到docker中的/usr/share/nginx/html 

./build.sh

#!/usr/bin/env bash
set -e
pwd=$PWD 
 
function buildImage(){
    version=`awk '/"version":/{gsub(/"|,/,"",$2);print $2;exit;}' ${pwd}/package.json`
	npm run build # 重新构建一下
    dockerImage=with-typescript-$1:${version} # ${version}为package.json的版本号
    docker build ${pwd} -t ${dockerImage} --build-arg DIST_DIR=/ # docker build 构建镜像
    
    # 查看进程是否存在
    if [ `docker inspect --format '{{.State.Running}}' with-typescript_$1_1` == "true" ]; then
        docker restart with-typescript_$1_1 # 更新代码同时重启容器
        echo " ---> 重启docker容器,容器名称:with-typescript_$1_1"
        echo y | docker image prune # 清除空,废弃镜像
    else
        echo " ---> 首次编译,容器名称:with-typescript_$1_1"
    fi
}
cnpm install # 每次打包前重新拉一下npm i 避免更新npm包没拉到
buildImage next_app 
docker-compose -f docker-compose.yml up -d # 运行docker-componse

./docker-compose.yml

version: '2'
services:
  next_app:
    image: with-typescript-next_app
    # build: .
    working_dir: /usr/share/nginx/html # 启动的工作目录
    volumes:
      - .:/usr/share/nginx/html
      # - ./node_modules:/usr/share/nginx/html/node_modules # 如果是使用挂载node_modules 可以打开此行代码
    ports:
      - '8080:8080'
    command: 'npm start'
    restart: always

然后运行 ./build.sh 即可打包生成docker镜像。
以上适用于next/nuxt/自己搭建的node项目。


docker 命令

对于docker命令做一下常用的收集。

进入容器:
docker exec -it 容器ID /bin/bash 
退出容器
exit
查看容器/镜像
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器
docker image # 查看镜像

在这里插入图片描述

启动容器
docker start <CONTAINER ID|NAME> 
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) # 启动所有的容器
关闭容器
docker stop <CONTAINER ID|NAME>
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2) # 关闭所有的容器
删除容器
docker rm <CONTAINER ID|NAME> <CONTAINER ID|NAME>
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2) # 删除所有的容器
删除镜像
docker rmi <REPOSITORY|IMAGE ID> <REPOSITORY|IMAGE ID>
docker rmi $(docker images | awk '{print $3}' |tail -n +2) # 删除所有的镜像
清理长期未使用镜像
docker image prune
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值