Docker:第一篇 通过Docker部署Vue项目
通常来说,如果需要搭建一个网站,那么需要做很多的配置,例如Nginx等等。使用Docker的话就可以非常方便的创建和管理不同的网页程序了。
准备工作
在开始之前,需要以下环境(版本仅供参考),操作系统(Linux arch 5.18.5-arch1-1):
- node v18.4.0
- Docker v20.10.17
- @Vue/cli 5.0.8
node
推荐使用nvm管理node版本:
1.首先打开nvm的github,然后找到如下的命令,运行任意一条即可(注意版本号,直接复制是无法运行的):
1 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/{}/install.sh | bash |
2.重新登录Linux就可以了。
3.nvm换源
1 | -- 1. 打开环境配置文件 |
4.使用nvm安装node
1 | -- 查看当前所有可以安装的版本 |
5.安装yarn
体验上比npm好,所以建议安装一个
1 | npm install -g yarn |
Docker
1.安装Docker的方法:
1 | sudo su # 切换root用户 |
2.测试docker是否正常工作
1 | sudo docker run hello-world |
看到Hello from Docker!等内容则为正常启动,如果有异常,查看systemd的docker服务是否正常启动。
4.只能sudo执行的问题
Docker的守护线程绑定的是unix socket,而不是TCP端口,这个套接字默认属于root,其他用户可以通过sudo去访问这个套接字文件。所以docker服务进程都是以root账户运行。
解决的方式是创建docker用户组,把应用用户加入到docker用户组里面。只要docker组里的用户都可以直接执行docker命令。
查看是否有docker用户组
1 | cat /etc/group | grep docker |
如果有,则跳过这一步,没有的话创建一个
1 | sudo groupadd docker |
添加用户进docker,并更新用户组
1 | sudo gpasswd -a $USER docker |
测试一下
1 | docker ps -a |
显示正常就不再需要sudo命令了。
Vue/cli
1.使用npm安装vue/cli,或者yarn等等也可以,运行任意一条即可:
1 | yarn global add @vue/cli |
创建一个Vue项目
1.找个文件夹,创建一个Vue项目
1 | vue create vuedemo |
2.提示版本和包管理器,选择Vue 3还有yarn即可
3.启动Vue项目
1 | yarn serve |
根据提示,打开主机所在的ip和端口(默认8080)就可以访问啦。
4.开完完成之后构建项目
1 | yarn build |
这个构建命令会在目录底下生成一个dist文件夹,理论上只要将这个dist文件夹里面的内容部署成静态资源,就可以访问了。
静态资源站点
接下来需要部署一个静态资源的站点,在上一章高性能服务器与多并发里面提到epoll机制实现的多并发软件Nginx,就是此次需要部署的。
通过docker可以非常快速的部署一个Nginx服务器。
1.直接拉取最新的nginx镜像
1 | docker pull nginx:latest |
2.查看镜像docker images
3.在vuedemo目录下创建配置文件nginx.conf
1 | server { |
4.在vuedemo目录下创建Dockerfile文件
1 | #使用nginx镜像 |
5.构建容器
1 | docker build -t vuedemo . |
-t 表示指定镜像名字
. 表示在当前目录下构建
6.运行容器
1 | docker run --name vuedemoaa -p 50080:80 -d vuedemo |
–name vuedemoa 表示指定容器名字为vuedemoa
-p 50080:80 表示将容器的80端口映射为主机的50080端口
-d vuedemo 后台运行vuedemo镜像
7.访问页面
接下来只要访问主机所在的ip加端口号50080就可以访问页面了。
8.重新部署
假如对页面或者配置的内容做了修改,需要重新生成镜像重启容器
1 | -- 停止容器 |
9.故障排查
在启动容器以后,可以通过docker ps -a
查看容器的运行状态,如果是Exited那么就说明容器发生了错误,需要查看日志docker logs -f --tail=100 vuedemoaa
logs 查看日志
-f 持续打印日志
–tail=100 查看最近100条日志