docker前端开发环境搭建

news2024/11/25 11:56:10

docker 做本地开发环境的好处:

 隔离环境

各项目所需node等版本不一,切换起来比较麻烦,虽用 nvm可 来解决,但使用 docker 更优

快速配置环境

新电脑,新系统,新环境,第一件事就是配置开发环境。下载 node、git,然后安装一些 npm 的全局包,然后下载 vscode,配置 vscode,下载插件等等……

使用docker 后,只需从 docker hub 中拉取事先打包好的开发环境镜像,就可以愉快的进行开发了。

docker安装

docker 官网(http://www.docker.com)下载 docker desktop 并安装

安装完成,打开 docker,待其完全启动后,打开 控制台 输入:

docker -v

显示版本信息 表示已安装

配置开发环境

假设有一个项目,它必须要运行在 8.14.0 版本的 node 中,我们先去 docker hub 中将这个版本的 node 镜像拉取下来:

docker pull node:8.14.0

拉取完成后,列出镜像列表:

docker images

 

启动容器:

docker run -it --name test_container d543faf5bdd8 /bin/bash

上面的命令表示以命令行交互的模式启动一个容器,并将容器的名称指定为 test_container。

此时已经新建并进入到容器,容器就是一个 linux 系统,可以使用 linux 命令,我们尝试输入一些命令:

可以看到这个 node 镜像除了预装了 node 8.14.0

镜像和容器的的关系:镜像只预装了最基本的环境,比如上面的 node:8.14.0 镜像可以看成是预装了 node 8.14.0 的 linux 系统,而容器是基于镜像克隆出来的另一个 linux 系统,可以在这个系统中安装其它环境比如 java、python 等,一个镜像可以建立多个容器,每个容器环境都是相互隔离的,互不影响(比如在容器 A 中安装了 java,容器 B 是没有的)

使用命令行操作项目并不方便,所以我们先退出命令行模式,使用 exit 退出:

 借助 IDE 可以更方便的玩 docker,这里我们选择 vscode,打开 vscode,安装 Remote - Containers 扩展,这个扩展可以让我们更方便的管理容器:

安装成功后,左下角会多了一个图标,点击:

 

在展开菜单中选择“Attach to Running Container”:

 

此时会报一个错“There are no running containers to attach to.”,因为我们刚刚退出了命令行交互模式,所以现在容器是处理停止状态的,我们可以使用以下命令来查看正在运行的容器:

docker ps

 发现列表中并没有正在运行的容器,我们需要找到刚刚创建的容器并将其运行起来,先显示所有容器列表:

# -a 可以显示所有容器,包括未运行的

docker ps -a

# 使用容器名称

docker start my_container

再次运行 docker ps 命令后,就可以看到已运行的容器了。然后回到 vscode,再次选择"Attach to Running Container",就会出现正在运行的容器列表:

选择容器进入,添加一个 bash 终端,就可以进入我们刚刚的命令行模式:

 我们安装 vue-cli,并在 /home 目录下创建一个项目:

# 安装 vue-cli

npm install -g @vue/cli


# 进入到 home 目录

cd /home


# 创建 vue 项目

vue create demo

在 vscode 中打开目录,发现打开的不再是本机的目录,而是容器中的目录,找到我们刚刚创建的 /home/demo 打开:

 

输入 npm run serve,就可以愉快的进行开发啦:

 

上面我们以 node 8.14.0 镜像为例创建了一个开发环境,如果想使用新版的 node 也是一样的,只需要将指定版本的 node 镜像 pull 下来,然后使用这个镜像创建一个容器,并在容器中创建项目或者从 git 仓库中拉取项目进行开发,这样就有了两个不同版本的 node 开发环境,并且可以同时进行开发。

重点:使用 ubuntu 配置开发环境【镜像快速配置】

上面这种方式使用起来其实并不方便,因为 node 镜像只安装了 node 和 git,有时我们希望镜像可以内置更多功能(比如预装 nrm、vue-cli 等 npm 全局包,或者预装好 vscode 的扩展等),这样用镜像新建的容器也包含这些功能,不需要每个容器都要安装一次。

我们可以使用 ubuntu 作为基础自由配置开发环境,首先获取 ubuntu 镜像:

# 不输入版本号,默认获取 latest 即最新版

docker pull ubuntu

新建一个容器:

docker run -itd --name fed 597ce /bin/bash

这里的 -itd 其实是 -i -t -d 的合写,-d 是在后台中运行容器,相当于新建时一并启动容器,这样就不用使用 docker start 命令了。后面我们直接用 vscode 操作容器,所以也不需要使用命令行模式了。

我们将容器命名为 fed(表示 front end development),建议容器的名称简短一些,方便输入。

ubuntu 镜像非常纯净(只有 72m),只具备最基本的能力。

安装 sudo:

apt-get install sudo

安装 git:

apt-get install git

安装 wget(wget 是一个下载工具,我们需要用它来下载软件包,当然也可以选择 axel,看个人喜好):

apt-get install wget

为了方便管理项目与软件包,我们在 /home 目录中创建两个文件夹(projects 与 packages),projects 用于存放项目,packages 用于存放软件包:

cd /home

mkdir projects

mkdir packages

由于 ubuntu 源中的 node 版本比较旧,所以从官网中下载最新版,使用 wget 下载 node 软件包:

# 将 node 放到 /home/packages 中

cd /home/packages


# 需要下载其它版本修改版本号即可

wget https://nodejs.org/dist/v14.18.0/node-v14.18.0-linux-x64.tar

解压文件:

tar -xvf node-v14.18.0-linux-x64.tar


# 删除安装包

rm node-v14.18.0-linux-x64.tar


# 改个名字,方便以后切换 node 版本

mv node-v14.18.0-linux-x64 node

配置 node 环境变量:

# 修改 profile 文件

echo "export PATH=/home/packages/node/bin:$PATH" >> /etc/profile


# 编译 profile 文件,使其生效

source /etc/profile


# 修改 ~.bashrc,系统启动时编译 profile

echo "source /etc/profile" >> ~/.bashrc


# 之后就可以使用 node 和 npm 命令了

node -v

npm -v

安装 nrm,并切换到 taobao 源:

npm install nrm -g

nrm use taobao

安装一些 vscode 扩展,比如 eslint、vetur 等,扩展是安装在容器中的,在容器中会保留一份配置文件,到时打包镜像会一并打包进去。当我们关闭容器后再打开 vscode,可以发现本机的 vscode 中并没有安装这些扩展。

至此一个简单的前端开发环境已经配置完毕,可以根据自己的喜好自行添加一些包,比如 yarn、nginx、vim 等。

打包镜像

上面我们通过 ubuntu 配置了一个简单的开发环境,为了复用这个环境,我们需要将其打包成镜像并推送到 docker hub 中。

第一步:先到 docker 中注册账号。

第二步:打开 shell,登录 docker。

第三步:将容器打包成镜像。

# commit [容器名称] [镜像名称]

docker container commit fed fed

第四步:为镜像打 tag,因为镜像推送到 docker hub 中,要用 tag 来区分版本,这里我们先设置为 latest。tag 名称加上了用户名做命名空间,防止与 docker hub 上的镜像冲突。

docker tag fed huangzhaoping/fed:latest

第五步:将 tag 推送至 docker hub。

docker push huangzhaoping/fed:latest

第六步:将本地所有关于 fed 的镜像和容器删除,然后从 docker hub 中拉取刚刚推送的镜像:

# 拉取

docker pull huangzhaoping/fed


# 创建容器

docker run -itd --name fed huangzhaoping/fed /bin/bash

用 vscode 打开容器,打开命令行,输入:

node -v

npm -v

nrm -V

git --version

然后再看看 vscode 扩展,可以发现扩展都已经安装好了。

如果要切换 node 版本,只需要下载指定版本的 node,解压替换掉 /home/packages/node 即可。

至此一个 docker 开发环境的镜像就配置完毕,可以在不同电脑,不同系统中共享这个镜像,以达到快速配置开发环境的目的。

注意

  • 不要在容器中存任何重要的文件或信息,因为容器一旦误删这些文件也就没了。可以用挂载卷映射到宿主主机上保存

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Java代码审计]—MCMS

环境搭建 MCMS 5.2.4:https://gitee.com/mingSoft/MCMS/tree/5.2.4/利用 idea 打开项目 创建数据库 mcms,导入 doc/mcms-5.2.8.sql 修改 src/main/resources/application-dev.yml 中关于数据库设置参数 启动项目登录后台 http://localhost:8080/ms/l…

【NLP】自动化计算文本文件TTR的bash脚本

自动化计算文本文件TTR的bash脚本 简介 这是一个可以计算文本文件TTR的bash脚本,文件名为:calculate_TTR.sh。它会接收一个文件名作为参数,并输出总单词数、特异单词数和TTR。 TTR是什么 TTR(Type-Token Ratio)是用…

javaweb期末复习重点

2022.12.12javaweb复习重点 10个选择题10个填空题10个判断2-3简答题2个程序题(15分一个) 1.HTML、Javascript、divcss ? 详细解释 HTML HTML(Hyper Text Mark-up Language)即超文本标记语言,是用于描述网页的一种标记语言。简单来说&…

九龙证券|全面推进技术研发,6G概念爆火!多家上市公司表示已布局

据商场研讨组织估计,2040年全球6G商场规划逾越3400亿美元。 6G概念指数逆市大涨5.61% 3月2日,6G概念指数逆市上涨5.61%。成份股中,本川智能、沃特股份、邦本科技、我国卫通涨停;信科移动-U大涨14.61%,亚光科技、信维通…

html常用标签2和语法练习

目录 1.表单标签 form标签 input标签 选择框 复选框:checkbox 按钮框:button 文件选择框 多行编辑框:textarea 2.html语法练习 展示简历信息 填写简历信息 ​编辑 3.HTML特殊字符 1.表单标签 表单是让用户输入信息的重要途径 表单域:包含表单元素的区域,重点是form…

手把手教你用js实现手机通讯录功能(附源码)

js实现手机通讯录效果图需求需求一:锚点通过#id配合a标签使用css中scroll-behavior属性的使用需求二需求三获取汉字拼音的首字母方法1:使用插件,这里推荐pinyin-pro方法2:使用unicode去重数组中冗余的对象法一:用Map去…

abap MODIFY常用语法解析

MODIFY 是既可以操作数据又可以操作内表的一个语法, 实现的逻辑都一样. 如果你内表或数据库中存在该行数据会对该行数据进行更新. 如果不存在,就会插入数据. , 1.如果it_tab是带有标题行的内表,是可以忽略FROM wa_tab工作区的 MODIFY it_tab .2.把工作区wa_tab中的数据更新…

中高级前端面试宝典之浏览器篇

中高级前端面试宝典 作为一名前端开发工程师,要掌握的知识点是多而杂的,在面试刷题阶段,经常没头没脑的,我将面试题系统化,分了好几个系列,祝愿大家(包括我)在这个疫情刚过去的互联网…

高通平台开发系列讲解(摄像头篇)QCM6490 上摄像头驱动开发

文章目录 一、Camera 硬件简介二、内核驱动移植2.1、确定设备树2.2、增加 camera 节点2.3、配置相关 GPIO沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 qcm6490 摄像头驱动开发。 一、Camera 硬件简介 摄像头连接器一般会包含 Mipi 信号、mclk、供电、re…

从业者必读,一篇文章轻松掌握DevOps核心概念和最佳技能实践!

文章目录前言一. DevOps的定义及由来二. DevOps的价值三. devops工具有哪些3.1 devops工程师的硬实力3.2 devops工程师的软实力总结前言 大家好,又见面了,我是沐风晓月,本文是对DevOps的总结,一篇文章告诉你什么是DevOps. 对很多…

Windows+CLion+Opencv+NCNN笔记

一、下载protobuf和ncnn在腾讯优图的github上下载ncnn,下载链接为https://github.com/Tencent/ncnn。在安装NCNN之前需要编译安装protobuf,protobuf3.4.0下载链接为https://github.com/google/protobuf/archive/v3.4.0.zip。下载后解压,将ncn…

什么是决策能力?HR人才测评

什么是决策能力?决策能力是一项多种能力的综合,指的是能够认识、理解、并且综合分析后得出判断,从而采取行动的能力。如:对当前形势的分析,对相关人员的判断,能做出合理的,适当的行动来应对。决…

【MyBatis】篇一.

文章目录1、MyBatis概述2、环境搭建1、MyBatis概述 认识: JavaEE开发的一个套件SSM,即: MyBatis是一个持久层的框架,是对JDBC的一个封装,是一个半自动的ORM框架。 ORM即实体类对象和数据库中的数据的一个映射关系&am…

关于Facebook Messenger CRM,这里有你想要知道的一切

关于Facebook Messenger CRM,这里有你想要知道的一切!想把Facebook Messenger与你的CRM整合起来吗?这篇博文是为你准备的! 我们将介绍有关获得Facebook Messenger CRM整合的一切信息。然后,我们将解释为什么你需要像SaleSmartly&a…

Git使用:常用命令汇总

前言 Git对于程序猿来说并不陌生,它是一款非常好用的项目管理工具,无论是前端开发还是后台开发,只要项目里面可以使用Git来管理,就会涉及代码的提交和合并操作,主要是常用的Git操作命令的使用,虽然目前有好…

CA-SSL:用于检测和分割未知类的半监督学习

论文作者 | Lu Qi, Jason Kuen , Zhe Lin, and etal论文来源 | CVPR2022文章解读 | William1、摘要为了提高检测/分割的性能,现有的自监督和半监督方法从未标记的数据中提取任务相关或任务特定的训练标签,但这两种方法对于任务性能都是次优的&#xff0c…

【JeecgBoot-Vue3】第1节 源码下载和环境安装与启动

目录 一. 资料 1. 源码下载 2. 官网启动文档 二、 前端开发环境安装 2.1 开发工具 2.2 前后端代码下载 2.3 前端启动 Step 1:安装nodejs npm Step 2:配置国内镜像(这里选阿里) Step 3:安装yarn Step 4&…

python的 ping 网络状态监测方法(含多IP)

ping 基本概念 ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Messag…

九、Bean的循环依赖问题

1 什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你,你也依赖我。 比如:丈夫类Husband,妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 2 singleton下的set注入产生的循环依赖 丈夫类 pac…

RabbitMQ的使用

1.初识MQ1.1.同步和异步通讯微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。两种方式各有优劣,打电话可以立即得到响应,但是你却不…