2016-11-04 150 views
2

Symfony的應用程序部署我來到這裏是因爲我發展與Symfony3的應用程序。我對應用程序的部署有一些疑問。 其實我使用泊塢窗 - 撰寫:與搬運工人

version: '2' 

services: 
    nginx: 
     build: ./docker/nginx/ 
     ports: 
      - 8081:80 
     volumes: 
      - .:/home/docker:ro 
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro 
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro 
     networks: 
      - default 

    php: 
     build: ./docker/php/ 
     volumes: 
      - .:/home/docker:rw 
      - ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro 
     working_dir: /home/docker 
     networks: 
      - default 
     dns_search: 
      - php 

    db: 
     image: mariadb:latest 
     ports: 
      - 3307:3306 
     environment: 
      - MYSQL_ROOT_PASSWORD=collectionManager 
      - MYSQL_USER=collectionManager 
      - MYSQL_PASSWORD=collectionManager 
      - MYSQL_DATABASE=collectionManager 
     volumes: 
      - mariadb_data:/var/lib/mysql 
     networks: 
      - default 
     dns_search: 
      - db 

    search: 
     build: ./docker/search/ 
     ports: 
      - 9200:9200 
      - 9300:9300 
     volumes: 
      - elasticsearch_data:/usr/share/elasticsearch/data 
     networks: 
      - default 
     dns_search: 
      - search 

volumes: 
    mariadb_data: 
     driver: local 
    elasticsearch_data: 
     driver: local 

networks: 
    default: 

nginx的是明確的,發動機是PHP-FPM一些擴展和作曲家,db是MariaDB的,並與一些插件搜索ElasticSearch。

之前,我不使用泊塢窗和部署我用Megallanes或部署,當我想部署Web應用程序。

隨着泊塢窗,我可以使用泊塢窗,撰寫文件,並在服務器上重新創建圖像和容器,我也可以救我的容器中的圖像和tar歸檔文件並加載它的服務器上。對於nginx和php-fpm可以,但是elasticsearch和db怎麼樣?因爲我需要保留數據以供將來更新代碼。然後,當我部署代碼時,我需要執行一個Doctrine Migration,也許一些命令,並且Deployer可以完美地與其他一些Interresting事情做到這一點。以及我如何使用Docker部署代碼?我們可以同時使用嗎?部署代碼和Docker的服務?

非常感謝您的幫助。

回答

2

首先,請嘗試使用用戶定義的網絡,他們有額外的功能VS傳統的連接如嵌入式DNS。這意味着您可以在應用程序中使用其名稱在同一網絡上調用其他容器。用戶定義的網絡上的容器與另一個用戶定義的網絡上的容器相隔離。

要創建用戶定義的網絡:

docker network create --driver bridge <networkname> 

Dockerfile使用用戶定義的網絡例如:

search: 
    restart: unless-stopped 
    build: ./docker/search/ 
    ports: 
     - "9200:9200" 
     - "9300:9300" 
    networks: 
     - <networkname> 

二:我注意到您爲DB和ElasticSearch沒有使用的數據量。 您需要在某些點安裝卷以保留持久性數據。

第三:如果您要導出的容器,它不會包含安裝卷。您需要備份卷數據並手動遷移它。

要備份卷的數據:

docker run --rm --volumes-from db -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 

上述命令將創建一個容器,安裝件從DB容器體積和安裝在容器當前目錄爲/backup,使用ubuntu imagetar命令來創建的/dbdata備份容器(考慮改變這個你dbdirectory)在從您的碼頭工人的主機安裝在/backup)。操作完成後,將移除瞬態容器(我們用於使用--rm開關創建備份的Ubuntu容器)。

恢復:

您的tar檔案複製到遠程位置,並用空安裝的卷創建容器。然後使用以下命令提取該卷中的tar歸檔文件。

docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1" 
+0

嗨,感謝您的幫助,我爲ElasticSearch和Mariadb做了一個卷裝。但我不明白第一點,用戶定義的網絡? – mpiot

+0

編輯更多信息的答案。 –

+0

我編輯了我的代碼並使用網絡和卷。但我真的不知道該如何處理我的源代碼:/ – mpiot