前端切换node版本方案-docker

697 阅读4分钟

在前端开发中,如果遇到node版本的问题,第一时间会想到使用nvm来切换版本。当你同时维护多个项目,并且对应不同的node版本,你就需要不停的切换node版本,这样就显得比较麻烦。使用docker可以完全解决这个问题,我们可以将每个项目对应的node版本作为一个基础镜像来创建容器。

Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

  • docker是go开发的,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
  • 容器内的应用程序是直接运行在宿主机的内核上,容器没有自己的内核。
  • 利用镜像迁移项目可以跨系统

Docker与虚拟机的区别

  • 容器能够提供宿主机的性能,而虚拟机是分配宿主机硬件资源,性能弱
  • 同样配置的宿主机,启动容器的数量大于虚拟机的数量
  • 启动时间,虚拟机比较长
  • 虚拟机需要硬件CPU的虚拟化支持

Docker核心组件

  • image镜像,构建容器(应用程序运行所需的环境,打包为镜像文件)
  • container,容器
  • 镜像仓库(dockerhub)(保存镜像文件,提供上传,下载镜像)类似于github
  • dockerfile,部署项目的脚本,并构建镜像

构建前端开发环境

docker run -it -d --name myapp --privileged -p 8080:8066 -v 项目路径:/app/vue node:16.15.0

run // 使用镜像创建容器,并启动
-it // -i 交互式命令操作 -t开启一个终端(这样就进入容器内的终端)
-d // 后台运行
--name // 容器名称
--privileged // 让容器的用户在容器内能获取完全root权限
-p //端口映射 宿主机内的端口: 容器内的端口
-v //将项目的绝对路径挂载到容器的目录/app/vue内,如果容器的指定目录有文件/文件夹,将被清空
node:16.15.0 // 基础镜像,按需选择不同的node版本

创建容器后就可以直接进入到/app/vue启动项目了

退出容器 exit

再次进入容器 dockcr exec -it containerid bash

常用命令

docker ps -a //查看当前正在运行或过去运行的所有容器
docker containre ls -a 查看所有的容器
docker containre ls 查看运行的容器

docker container rename <container identifier> <new name> 重命名容器
docker container run --detach --publish 8888:80 --name hello-dock-container fhsinchy/hello-dock // --name 后加名称

docker run <image name> // 使用镜像创建容器

docker <object> <command> <options>
使用以下语法:

object 表示将要操作的 Docker 对象的类型。这可以是 container、image、network 或者 volume 对象。
command 表示守护程序要执行的任务,即 run 命令。
options 可以是任何可以覆盖命令默认行为的有效参数,例如端口映射的 --publish 选项。
现在,遵循此语法,可以将 run 命令编写如下:

docker container run <image name>

docker container stop <container identifier> 容器的id或者名称

docker container kill <container identifier> 杀死容器
 
docker container start <container identifier> 启动

docker container restart <container identifier> 重新启动运行的容器

docker container rm <container identifier> 删除容器

docker container create --publish 8080:80 fhsinchy/hello-dock 创建但是不运行

#查看容器日志
docker logs 容器id

#查看容器的详细信息
docker container inspect 容器id

#容器的提交
比如 运行一个ubuntu镜像,在里面安装一个vim,提交后再次运行新的镜像 就有vim

docker commit 容器id 新的镜像名

# 查看容器内的进程信息的命令
docker top 容器Id

# 查看容器的资源信息
docker stats 容器id

# 获取容器内的ip地址,容器格式化参数
docker inspect --format '{{.NetworkSettings.IPAddress}}' 容器ID

# 默认的是dockerhub仓库
# 搜索镜像
docker search 镜像名:tag  tag具体的标签版本

# 查看本地镜像
docker imgaes
docker image ls

# 下载镜像
docker pull 镜像名:tag

# 查看docker镜像的存储路径
docker info | grep Root

# 运行容器 
# --rm 是退出容器时删除该容器
dcoker run -it --rm centos bash


# 删除镜像(被删除的镜像不得有依赖的容器存在)
docker rmi 【镜像名称 | 镜像ID(前3位即可)】

# 批量删除镜像
docker rmi `docker images -aq`

# 导出镜像
# 导出为压缩文件 
docker image save 镜像名称:tag > /opt/centos.tgz

#导入镜像
docker image load -i /opt/centos.tgz

# 查看镜像的详细信息
docker image inspect 镜像ID(前3位即可