使用Dockerfile快速构建开发环境

在如今容器技术大行其道的世界里, 想比较知名的中间件、代理、开发框架都有自己的容器镜像. 作者为使用者提供了一个最简单的Dockerfile, 方便大家根据实际使用情况修改与发布公有或私有镜像. 同时帮助项目管理者可靠的进行项目内容进行版本管理与发布.

1. 构建本地镜像

如果您还是一个初学者, 在您将cf代码克隆到本地后使用docker build -t cfweb:v1 .命令将自动下载并基于centos7构建私有镜像. 这里需要注意的是Dockerfile中间的2条COPY命令, 需要自行下载并且将文件copy到构建目录下. 以防止docker构建时找不到依赖库进行编译. 构建完成后使用docker images命令可以在本地镜像列表内看到cfweb v1版本镜像.

2. 运行私有镜像

如果您仅想测试一下cf! 在上述第二步的时候构建本地镜像完成后即可使用docker run命令运行.

docker run -ti -p 8080:8080 cfweb:v1

此时您就可以使用docker ps | grep cfweb看到刚刚运行的cfweb容器.

3. 进行测试

在您使用curl -v localhost:8080/api后能得到类似返回后. 则说明您构建到镜像构建完成.

  1. [candy@MacBookPro:~/Documents/core_framework] $ curl -v localhost:8080/api
  2. * Trying ::1...
  3. * TCP_NODELAY set
  4. * Connected to localhost (::1) port 8080 (#0)
  5. > GET /api HTTP/1.1
  6. > Host: localhost:8080
  7. > User-Agent: curl/7.54.0
  8. > Accept: */*
  9. >
  10. < HTTP/1.1 200 OK
  11. < Date: Sun, 24 Mar 2019 09:56:45 GMT
  12. < Allow: GET, POST, HEAD, OPTIONS
  13. < Access-Control-Allow-Origin: *
  14. < Access-Control-Allow-Methods: GET, POST, HEAD, OPTIONS
  15. < server: Candy Server/1.0
  16. < Connection: close
  17. < Transfer-Encoding: identity
  18. < Content-Length: 51
  19. < Content-Type: application/json
  20. < Cache-Control: no-cache, no-store, must-revalidate
  21. < Cache-Control: no-cache
  22. <
  23. * Closing connection 0
  24. {"code":200,"message":"This is GET method request"}
  25.  
  26. [candy@MacBookPro:~/Documents/core_framework]

使用docker-compose实现接入层(代理)服务(业务)分离

当大家使用Docker在构建生产环境的时候, 一般会在开发框架前端使用代理软件(7层或4层)进行业务隔离与划分. 实际使用各类开发框架都时候基本上都会建立一套约定的http preix path, 例如: /api/login, /api/products.

有了这些(或更详细)约定的前缀, 可以很清晰的划分出接口的作用/同时也方便项目的维护.事实上作者当初在自己的业务中也考虑到这点, 以下是一种最基础的7层Proxy方案:

  1. cfadmin.io/api -> cf httpd api
  2. (cfadmin.io) nginx ->
  3. cfadmin.io/ws -> cf http websocket

docker-compose编排文件使用nginx作为前端接入层, 将cf容器link到代理内部. 这样做的好处在于:

  • 消除语言/框架之间的隔离, 方便使用者清晰的组合实际业务.

  • 更加方便的管理自己的服务器, 也是Devops的最佳选择.

  • 为构建高性能、可扩展的架构打下基础.

同时, docker-compose编排文件还给出了一份基于前、后端分离后的前端代理示例, 方便大家参考.

注意: 以上具体配置文件与docker-compose编排文件都可在docker目录下找到.

最后

作者使用cf的master分支制作了一个试用镜像推送到dockerhub上, 方便大家快速下载试用. (生产环境建议自行制作专属镜像)

  1. [candy@bogon:~/Documents/core_framework] $ docker run -ti -p 8080:8080 candymi/cfweb
  2. Unable to find image 'candymi/cfweb:latest' locally
  3. latest: Pulling from candymi/cfweb
  4. 8ba884070f61: Already exists
  5. 96bb27abb1c4: Already exists
  6. 9b7bcf8be16c: Already exists
  7. aae3ef5368d6: Already exists
  8. 12e955618ecc: Already exists
  9. Digest: sha256:6e562228642c56c2162d116b0034d868e9dfb25360248d215d6da8504e26c374
  10. Status: Downloaded newer image for candymi/cfweb:latest
  11. [2019/03/25 07:28:41] - 172.17.0.1 - 172.17.0.1 - /api - 200 - time: 0.000145/Sec

测试容器内的服务是否正常运行: curl localhost:8080/api