手裏有一個web項目,代碼按照前端代碼庫、後端代碼庫分別在GitHub上,分散帶來的結果是,不容易持續集成,好比你可能須要不少的job去保證一個項目的正常運做,可是這個項目也不是特別大,因此嘗試將代碼融合,於此同時將代碼docker化,用於持續部署。html
原來的代碼使用gunicorn+gevent+supervisor+flask+DB的架構;具體的細節以下:前端
本地服務器搭建了一個nginx域名服務器,裏面區分PC端仍是手機端;
訪問域名經過nginx,訪問前端靜態頁面的內容
靜態頁面中加載指定地址的數據,提供數據的服務由flask後端提供接口;
後端提供的接口,經過訪問redis緩存和mongodb數據庫,返回相應的數據;nginx
上篇文章說了flask項目是怎麼拆分和組合的,可是上次僅僅是使用docker,多個容器之間使用的--link鏈接起來的,本篇文章將介紹如何使用docker-compose代替原來的多個docker命令;web
docker compose是什麼能夠自行搜索,我直接上個人docker-compose.ymlredis
version: '3' services: flask: image: "flask:latest" restart: always depends_on: - mongoDB - redisDB tty: true stdin_open: false environment: SLEEP_SECOND: 10 container_name: flask logging: driver: "json-file" options: max-size: "200M" max-file: "10" command: "gunicorn manage:app -k gevent -w 4 -b 0.0.0.0" volumes: - $HOME/logs:/app/logs
networks: - inline-network ports: - "8000:8000" matrix: image: "flask:latest" restart: always depends_on: - mongoDB - redisDB tty: true stdin_open: false environment: SLEEP_SECOND: 10 container_name: matrix command: "flask matrix" volumes: - $HOME/logs:/app/logs - /etc/localtime:/etc/localtime networks: - inline-network broadcast: image: "flask:latest" restart: always depends_on: - mongoDB - redisDB tty: true stdin_open: false environment: SLEEP_SECOND: 10 container_name: broadcast command: "flask broadcast" volumes: - $HOME/logs:/app/logs - /etc/localtime:/etc/localtime networks: - inline-network redisDB: image: "redis:latest" container_name: redis restart: always networks: inline-network: aliases: - redis ports: - "6379:6379" mongoDB: image: "mongo:latest" restart: always container_name: mongo ports: - "27017:27017" volumes: - /var/lib/mongo:/data/db networks: inline-network: aliases: - mongo networks: inline-network: driver: "bridge" ```
前端的PC端和移動端,都使用npm構建成dist文件,而後經過nginx定向到指定的dist文件內容就能夠,因此咱們對前端的代碼也進行了docker化,使用的是nginx;mongodb
dockerfile:docker
FROM nginx:1.15-alpine COPY dist/ /usr/share/nginx/html COPY default.conf /etc/nginx/conf.d/default.conf ENTRYPOINT nginx -g "daemon off;"
default.conf數據庫
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
本次鏡像化大概花了一週的時間,包括測試和解決一些坑,不少知識點包括原來的項目都不是太熟悉,因此記錄一下,可能回頭會發現這些很LOW,可是相信對一些人仍是有用的。npm