還爲重複安裝開發環境而煩嗎? 這或許是更好的解決方案 —— docker

工欲善其事必先利其器

開始進行web開發以前,都須要搭建好基本的開發環境.
我的用到的有nginx、redis、mysql、node.js.node

搭建環境不一樣的方式mysql

  • 使用apt(ubuntu)、brew(mac os)一個個安裝
  • 腳本: LNMP一鍵安裝包
  • 源碼編譯

上面的解決方案都有一個共同的缺點nginx

  • 一旦系統重裝,須要從新安裝、配置(有多臺電腦時,開發環境版本容易不一致)
  • 沒有版本控制系統,軟件配置維護麻煩

更好的解決方案 —— docker

基於 docker(18.03以上)搭建nginxredismysql 服務。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

相關文章
相關標籤/搜索