对于“通过 nginx 访问网站资源文件”形式的前端项目,有以下三种方式将项目部署到 Docker 容器。
资源文件拷贝到容器方式
◊ 假设前端发布压缩包”dist.tar.gz”内部结构是 dist 文件夹->index.htnl&static 文件夹。
◊ 发布包同目录下创建 nginx 配置文件”default.conf”,例:
1 | server { |
◊ 发布包同目录下创建 Dockerfile,内容示例如下,其中的 dist.tar.gz 文件 Docker 会自动做解压,如果是文件夹 dist,注意 Docker 将只拷贝 dist 文件夹内部的内容。
1 | FROM nginx:latest |
◊ 构建镜像:docker build -timageName. 。
◊ 运行测试镜像:docker run -p 4000:80imageName–name containerName ;
◊ 浏览器访问 ip:4000;
本地目录挂载到容器方式
● 运行测试镜像:docker run -p 4000:80 -v /home/docker_congzhou/my_project/agt_jinzhong/nginx_conf:/etc/nginx/conf.d -v /home/docker_congzhou/my_project/agt_jinzhong/nginx_file:/usr/share/nginx/html nginx –name containerName ;
● 浏览器访问 ip:4000;
● 通过 docker 的卷(volume)机制实现将宿主机上的本地目录挂载到容器,这样所做的修改不会随着容器重启而丢失,且在宿主机对应的 Volume 挂载目录下做修改将在容器中生效。
使用数据容器的方式
◆ 创建包含指定目录挂载的数据容器
1 | docker create -v /home/docker_congzhou/my_project/agt_jinzhong/nginx_conf:/etc/nginx/conf.d -v /home/docker_congzhou/my_project/agt_jinzhong/nginx_file:/usr/share/nginx/html --name agt_jinzhong_data nginx |
◆ docker run –rm -p 80:80 –volumes-from agt_jinzhong_data nginx
三种方式比较
◇ 资源文件拷贝到容器方式
缺点
(1)运行多个 container 时每个 container 内都有一份资源。
(2)由于 docker 容器每次重启都是一个新的环境,在 docker 容器内做的修改将被还原,当需要修改 nginx 配置文件或静态资源时需要重新构建镜像。
优点
(1)通过命令行自动化操作,利于集成到 CI/CD 流程,更方便地完成滚动更新、服务器迁移、回滚等操作。
◇ 本地目录挂载到容器和使用数据容器的方式优缺点与以上相反。