開始進行web開發以前,都須要搭建好基本的開發環境.
我的用到的有nginx、redis、mysql、node.js.node
搭建環境不一樣的方式mysql
上面的解決方案都有一個共同的缺點nginx
基於 docker(18.03以上)搭建nginx、 redis 、mysql 服務。git
. ├── .env # 默認爲dev的環境變量 ├── .gitignore ├── README.md ├── container # 不一樣容器的配置文件 │ ├── mysql │ │ └── docker-compose.yml │ ├── nginx │ │ ├── conf │ │ ├── docker-compose.prod.yml │ │ └── docker-compose.yml │ └── redis │ └── docker-compose.yml └── prod # prod的環境變量 └── .env
docker-compose 在運行時會使用當前目錄下的.env文件,
而且不支持指定env文件,因此須要多個不一樣環境時,只能在對應文件夾下創建.env文件github
經過.env文件配置整個項目所須要的環境變量web
# file .env # 項目名稱 COMPOSE_PROJECT_NAME=site # compose文件 COMPOSE_FILE=container/nginx/docker-compose.yml:container/mysql/docker-compose.yml:container/redis/docker-compose.yml # mysql config MYSQL_ROOT_PASSWORD=123456 MYSQL_DATABASE=demo # redis config REDIS_PASSWORD=123456 # 自定義環境變量 本地服務器 IP SITE_IP=host.docker.internal # host.docker.internal須要18.03以上版本
以nginx的 docker-compose.yml 文件爲例:
${SITE_IP}將被替換成host.docker.internal, $${SITE_IP}將不會被替換redis
version: "3" services: nginx: image: nginx volumes: - ./conf/dev.template:/etc/nginx/conf.d/dev.template ports: - "80:80" environment: - SITE_IP=${SITE_IP} command: /bin/bash -c "envsubst '$${SITE_IP}'< /etc/nginx/conf.d/dev.template > /etc/nginx/conf.d/dev.conf && exec nginx -g 'daemon off;'" networks: - default - network_site networks: network_site: driver: bridge
其餘鏡像的配置能夠從dockerhub查看redis、mysqlsql
// dev模式 docker-compose up // prod模式,使用 prod下的.env文件 cd ./prod && docker-compose up
docker-compose up nginx docker-compose up mysql docker-compose up redis
# 中止某個服務 docker-compose stop nginx # 中止所有 docker-compose stop
具體配置請從github倉庫查看
經過使用docker,咱們只須要一個repository存放配置, 即可以在多臺電腦上迅速安裝環境.docker