目录
- 用前端姿势玩docker【一】Docker通俗理解常用功能汇总与操作埋坑
- 用前端姿势玩docker【二】dockerfile定制镜像初体验
- 用前端姿势玩docker【三】基于nvm的前端环境构建技巧
- 用前端姿势玩docker【四】基于docker快速构建webpack的开发与生产环境
- 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理
跨平台兼容性问题解决
前端开发工作中,主流的还是windows和mac,我们的目的是在windows和mac下能够尽可能地实现一致性。这个一致性体现在:
- docker的安装与初始化
- docker 容器的使用
- 开发中的各种操作过程
安装
Mac直接看官方文档
windows 上安装docker分为两种:
-
docker for windows
此方式要求windows系统必须能够启动 hyperV服务,而如果能够启动hyperV,基本上意味着都要是windows专业版,印象当中即便是家庭版也对版本有要求。优点:方便,快捷
缺点:对系统有要求,不能做到任意机器均可使用
-
使用docker-toolbox通过docker-machine创建docker虚拟机
此方式通过使用 docker quickstart terminal快速创建docker虚拟机,然后通过docker-machine控制虚拟机,并在虚拟机中跑docker服务。优点:门槛低
缺点:官方文档说明已经不建议使用此方法;配置较为复杂
总结
类Unix系统上,docker使用都很方便。关键是windows上需要斟酌考虑:
如果需要满足老旧的机器快速构建环境,不想去考虑各种系统类型(专业版、家庭版)、版本等问题。则建议使用docker-machine创建docker虚拟机的方法。
如果是在单一机器上使用docker,且长期固定使用同一台机器,那么docker for windows一定是最佳选择。
关于mac与windows启动便利性上,可以编写相应的.sh与.bat文件做启动文件。
windows docker-toolbox 安装docker问题汇总
- 无法使用私库:若配合镜像私库使用,则需要修改docker-toolbox下的sart.sh在docker-machine create那一行增加参数:
"${DOCKER_MACHINE}" create -d virtualbox --virtualbox-no-vtx-check $PROXY_ENV --engine-registry-mirror http://hub-mirror.c.163.com --engine-insecure-registry 私库域名或ip "${VM}"
-
进入docker容器后无法ping通外网
若可ping同域名,无法ping同ip:则需要添加dns,在
/var/lib/boot2docker/profile
文件中增加--dns=8.8.8.8
,注意此处有 = 号域名ip均无法ping通:在上文中同样的文件中添加bip配置
--bip 172.17.5.0/24
,注意此时无等号 -
windows VirtualBox软链接错误: symlink(): Read-only file system
需要使用VBoxManage开启软连接功能,步骤如下:
- 关闭VirtualBox
- 为VirtualBox增加环境变量
- 启动软链功能:执行命令: VBoxManage.exe setextradata default VBoxInternal2/SharedFoldersEnableSymlinksCreate//mnt/project 1 其中default为虚拟机名称,/mnt/project 为启动软链功能的目录
- 查看是否启动成功: 执行命令:VBoxManage.exe getextradata default enumerate ,能看到存在以下内容即为开启成功:Key: VBoxInternal2/SharedFoldersEnableSymlinksCreate//mnt/project, Value: 1
-
windows中通过VirtualBox开启docker虚拟机,启动容器后,在容器内启动webpack-dev-server,外网无法访问:
docker-machine ssh
进入docker虚拟机后,ip addr
查看192网段的ip,并通过此ip加端口在宿主机访问即可。 -
启动容器后,开启dev-server,修改代码后,宿主机浏览器无法热更新:
在VirtualBox中的文件系统下,webpack无法自动开启热更,需要手动添加watchOptions开启轮询:具体时间根据个人机器情况决定
watchOptions: {
poll: 1500
}