2016-11-04 124 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