从0到1搭建舒适的docker前端开发环境
目的
本文意在使用 docker 帮助前端同学搭建统一的前端开发环境
—解决因为不同的开发环境(mac、windows、linux)导致的各种依赖相关或者运行中丢失某些文件的问题;
技术栈
docker docker-compose node nginx 以及前端的项目(vue 项目)
起步
首先全局安装docker 客户端以 mac 系统为例;
看到这个就代表安装成功了
打开 docker 设置找到 docker engine 配置一下国内代理加速
1 | { |
安装 vscode 的 Docker 插件-用于帮助我们管理我们的 docker 镜像以及容器等;
下面初始化一个 vue 项目作为 demo(vue-cli)
1 | vue create vue-docker |
开发
在项目根目录中创建一个名为 Dockerfile 的文件,用于 docker 相关的配置;
1 | #设置构建的基础镜像 |
然后在根目录中执行构建命令
-t: 设置容器的名称
.:是打包当前目录所有东西(不包括.dockerignore 中的文件)
1 | docker build -t vue-docker . |
构建过程长这样
构建完成后我们可以查看构建后的镜像列表
然后我们执行 run 命令去启动一个容器
-d: 后台运行
-p: 映射容器内的 8080 端口到主机的 8080 端口
-i: 交互式操作
-t: 终端
-v: 文件映射,将主机本地的文件映射到容器中,这样我们本地修改文件内容,可以动态看到页面的变化了
vue-docker: 这是指用 vue-docker 镜像为基础来启动容器
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell
1 | docker run -d -p 8080:8080 -v /src:/vue-docker/src vue-docker |
然后看到 af28efc278be5ae44f83511522cfb375a6f6811b573c33565c22ab087b415d90 这个说明容器已经启动了
我们打开浏览器访问http://localhost:8080
,就能看到页面内容了,本地代码更改,页面也会随之改变
docker-compose
目前仅仅是启动了一个 vue 的服务,我们如果想使用其他服务怎么呢?比如我们想使用 node 做中间层,使用 nginx 转发的代理怎么办呢(当然我们可以使用 webpack—proxy 去做代理)?
有的同学可能会这样写
1 |
|
然后在一个 Dockerfile 文件中并不会把两个 from 一起构建,最终构建的还是带有 node 环境的镜像;
为了解决这个问题我们需要引入 docker-compose,去一起构建我们所需环境的依赖的镜像;
安装
1 | sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose |
看到这个说明安装成功了
然后我们需要编写 docker-compose 的配置文件了,在项目跟目录中创建一个名为 docker-compose.yml 的文件
1 | version: "3" # 指定版本(不同的版本存在语法差异,这边使用最新的版本) |
接下来在项目跟目录中创建 default.conf,用于 nginx 相关的配置;
1 | server { |
接下来在项目跟目录中创建 vue 文件,用于 Dockerfile 相关的配置;
1 | #设置构建的基础镜像 |
然后 vue.config.js 中添加 disableHostCheck,不去检测域名;
1 | module.exports = { |
接着执行 docker-compose -d up 指令启动 docker-compose 构建
1 | # -d: 后台执行 |
看到绿色的箭头说明我们的容器全都启动了,然后访问http://localhost
就可以看到页面了