我来这里是因为我使用Symfony3开发了一个应用程序。我对应用程序的部署提出了一些问题。 实际上我使用的是docker-compose:
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。
在我不使用Docker并部署我使用Megallanes或Deployer之前,我想部署webapp。
使用Docker我可以使用docker-compose文件并在服务器上重新创建图像和容器,我还可以将我的容器保存在图像和tar存档中并将其加载到服务器上。对于nginx和php-fpm来说没关系,但是弹性搜索和数据库呢?因为我需要保留数据以便将来更新代码。然后当我部署代码时,我需要执行一个Doctrine Migration和一些命令,Deployer可以完成其他一些有趣的事情。我如何使用Docker部署代码?我们可以同时使用吗?部署代码和Docker服务?
非常感谢你的帮助。
答案 0 :(得分:2)
首先,请尝试使用用户定义的网络,它们具有与嵌入式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 image
和tar
命令创建{{1}的备份在容器中(考虑将其更改为您的dbdirectory)在从docker主机挂载的/dbdata
中)。操作完成后,将删除瞬态容器(我们用于创建带/backup
开关的备份的ubuntu容器)。
要恢复:
将--rm
存档复制到远程位置,并使用空的已安装卷创建容器。然后使用以下命令提取该卷中的tar存档。
tar