Ant Design Pro是一个企业级中后台解决方案,在Ant Design组件库的基础上,提炼出典型模板/业务组件/通用页等,在此基础上可以使开发者快速的完成中后台应用的开发。html
在使用Ant Design Pro的过程当中,能够发现它提供了一系列基于docker的开发部署方式,以下图。可是官方文档中并无具体的介绍,本文的主要目的就是解析Ant Design Pro中对于docker的使用。前端
任何安装过Docker的机器均可以运行这个容器得到一样的结果, 同的容器,从而彻底消除了不一样环境,不一样版本可能引发的各类问题。例如,在前端开发中一般会遇到nodejs版本问题,就能够经过docker的方式进行解决。node
Docker有三个基本概念:镜像(image),容器(container),仓库(repository)。nginx
docker build -t xxx:v1 .
docker run --name mynginx -d nginx:latest
docker exec -i -t container_id /bin/bash
docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id
实际项目中,不可能只单单依赖于一个服务,例如一个常见的Web项目可能依赖于: 静态文件服务器,应用服务器,Mysql数据库等。咱们能够经过分别启动单个镜像,并把镜像绑定到本地对应端口的形式进行部署,达到容器可通讯的目的。可是为了更方便的管理多容器的状况,官方提供了docker-compose
的方式。docker-compose
是Docker的一种编排服务,是一个用于在 Docker 上定义并运行复杂应用的工具,可让用户在集群中部署分布式应用。git
compose中有两个重要的概念:github
docker-compose.yml
文件中定义。一个项目能够由多个服务(容器)关联而成,compose 面向项目进行管理,经过子命令对项目中的一组容器进行便捷地生命周期管理。web
npm run docker:dev
该命令使用docker-compose up
命令经过docker-compose.dev.yml
模板启动相关容器。sql
docker-compose.dev.yml
内容以下: docker
这个compose文件定义了一个服务:ant-design-pro_dev
。该服务使用Dockerfile.dev
构建了当前镜像。将该容器内部的8000端口映射到host的8000端口。为了容器和host的数据同步,该容器挂载三个数据卷:../src:/usr/src/app/src
, ../config:/usr/src/app/config
, ../mock:/usr/src/app/mock
。它将主机目录映射到容器,这样容器内的三个目录能够跟host对应的三个目录作到数据同步。数据库
Dockerfile.dev
内容以下:
node:latest
做为基础镜像,并设定
/usr/src/app
做为工做目录。首先将
package.json
文件复制到该目录,并安装相关的依赖包,以后复制该文件夹下全部内容到该目录下,并使用
npm run start
启动应用。因为数据卷的存在,本地的三个文件夹下的任何修改均可以同步到容器中,达到更新的目的。
至此,整个开发环境搭建完成。
npm run docker-pro:dev
该命令使用docker-compose up
命令经过docker-compose.yml
模板启动相关容器。
docker-compose.yml
内容以下:
ant-design-pro_build
和
ant-design-pro_web
。
ant-design-pro_build
使用Dockerfile
构建镜像。
Dockerfile
内容以下:
该镜像实际只作了文件的构建(npm run build
),构建的结果存放在/dist
目录中,并经过数据卷共享该目录。由此看来,该容器只做为一个数据卷容器为其余镜像提供数据服务。
ant-design-pro_web
使用nginx镜像,nginx容器的80端口绑定host的80端口,并将ant-design-pro_build
的dist目录挂载到nginx服务器/usr/share/nginx/html
目录,将nginx.conf
挂载到/etc/nginx/conf.d/default.conf
。
容器视图以下:
经过http://localhost:80
就能够访问该部署了前端静态文件的nginx容器了。
npm run docker-hub:build
命令经过docker build
构建Dockerfile.hub
定义的镜像。
Dockerfile.hub
文件定义以下:
该Dockerfile使用了多阶段构建的方式,第一阶段构建出编译后的前端资源文件,第二阶段将第一阶段构建出来的前端资源文件复制到nginx的指定目录,构建出一个包含前端静态资源以及nginx.conf的镜像。
在指定服务器直接运行该镜像,即可以使用服务。
顺便提一句,这个Dockerfile.hub
文件是由我提给官方并合并到master分支的,详情见:github.com/ant-design/… 。仍是有小小的激动的。