docker+Nginx部署前端项目的详细过程记录
目录
- 相关配置安装
- 创建配置文件
- 项目打包与部署
- 一个相关报错:
- 总结
相关配置安装
安装Docker
yum install docker
启动服务 start docker
systemctl start docker
Docker中拉取nginx
镜像
docker pull nginx
创建配置文件
我们需要在根目录下创建Dockerfile文件和default.conf文件。
其中default.conf文件的名称是什么无所谓,只要在配置文件中注意使用相同名称即可。
Dokcerfile文件具体内容如下:
FROM nginx:latest # 将项目根目录下dist文件夹下的所有文件复制到镜像中 /usr/share/nginx/html/ 目录下 COPY dist/ /usr/share/nginx/html/ COPY default.conf /etc/nginx/conf.d/default.conf
FROM nginx:latest
: 命令的意思该镜像是基于 nginx:latest 镜像而构建的。COPY dist/ /usr/share/nginx/html/
:命令的意思是将项目根目录下 dist 文件夹下的所有文件复制到镜像中/usr/share/nginx/html/
目录下。
这里镜像中的目录我们不要动,但需要保证我们项目的打包目录是dist/
,或者自定义到你打包的目录下。
COPY default.conf /etc/nginx/conf.d/default.conf
命令的意思是将 Nginx 目录下的 default.conf 复制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置来替换 Nginx 镜像里的默认配置。
这里镜像中的目录我们不要动,但需要保证我们编写的文件名也为default.conf
,或者与你自己写的文件名对应
default.conf
下面的配置直接照抄就好,特别注意,监听的端口号并不需要动,这里的80端口指的是容器的端口,最后我们会将容器的端口映射到我们宿主服务器的端口,比如映射到8888端口。
8888:80
然后 注意修改为自己的服务器IP地址
完整配置:
upstream my_server{ server 121.41.4.33:3000; # 后端server 地址 keepalive 2000; } server { listen 80; #这里的端口号不要动,80端口指的是容器的端口,最后我们会将容器的端口映射到我们宿主服务器的端口,比如映射到8888端口 server_name 111.20.xxx.xxx; # 修改为docker服务宿主机的ip/域名 #charset koi8-r; access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/error.log error; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html =404; } # 这里就是和vue本地代理的意思一样,已api开头的路径都代理到本机的3000端口 location /api/ { proxy_pass http://my_server/api; proxy_set_header Host $host:$server_port; rewrite ^/api/(.*) /$1 break; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
项目打包与部署
将打包项目,把dist
文件夹和刚刚创建的Dockerfile
,default.conf
放到同一目录,并上传到服务器。
比如,我的代码存放位置是/home/test
目录。
然后需要构建镜像
docker build -t test .
docker build -t
我们并不需要动,
后面的test是我们构建的镜像的名称,.
代表需要进行构建的代码的存放位置,这里是.
是因为我当期所在目录就是/home/test
,并且我的项目的三个文件就位于/home/test
目录下。
如果我们此时位于其他目录,当前目录下没有要进行镜像打包的文件,那就需要更改路径。
比如:
dokcer build -t test /home/test
然后使用dokcer images
可以查看我们已经存在的镜像
镜像构建好后,我们就可以拿这个镜像启动一个容器
docker run -d -p 8888:80 --name test-image test
- -d 后台方式运行
- -p 8888:80 端口映射,将宿主的8888端口映射到容器的80端口
- –name 容器名 镜像名
然后我们可以使用docker ps
查看当前正在运行的容器
并且使用IP地址和端口号访问当前的项目
注意
上面我们进行了端口映射,那就需要在服务器中开启要使用的端口,
我们可以在云服务器中的安全组进行设置。
或者使用命令设置
查看已开放端口命令:firewall-cmd --list-all
- 查看防火墙状态:active (running) 即是开启状态
systemctl status firewalld
- 查看已开发端口命令:firewall-cmd --list-all
- 新增防火墙开放端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 开放端口后需要重新加载防火墙:
firewall-cmd --reload
一些相关指令
如果我们不再需要这个容器和镜像,
首先需要先停止这个容器,然后在移出容器和镜像。
首先拿docker ps
找到指定容器的ID,
使用docker stop [ID]
停止容器
docker rm [ID]
移除容器
然后拿docker images
查看已存在的镜像ID,
使用docker rmi [ID]
移除镜像
可能我们的docker没有设置开机启动:
systemctl start docker # 启动docker systemctl status docker # 查看docker的运行状态
一个相关报错:
关于:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
关于今天使用Docker时报了以下错误:
[centos@localhost ~]$ docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
分析报错的原因:
报错的翻译:无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。 docker 守护进程是否正在运行?
通过翻译完报错,可以看出报错的原因是因为docker的服务没启动
解决方法:
1、首先启动docker服务
[root@localhost /]# systemctl start docker
2、查看docker服务当前状态
[root@localhost /]# systemctl status docker
就此,以上的报错就成功解决!
开机自启动Docker
为了避免以上的问题重复出现,可以设置docker开启自启动!
[root@localhost /]# systemctl enable docker
后续,我们将使用docker和github actions实现自动化部署。
总结
到此这篇关于docker+Nginx部署前端项目的文章就介绍到这了,更多相关docker+Nginx部署前端项目内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!