Docker和包pipe理器在生产中
我正在开发一个PHP应用程序,我想使用docker集装箱运行。 我正在使用composer包pipe理器来引入所有的依赖关系。 所有的代码保存在一个git仓库,除了依赖。
为了使我的本地机器上运行的一切,我使用docker-compose(图)。 我将我的应用程序代码(包括供应商文件夹)装载到我的容器上。 这是我的docker-compose.yml文件。
nginx: image: nginx:1.9 links: - php volumes: - conf/nginx/default.conf:/etc/nginx/conf.d/default.conf - src:/var/www/html ports: - "80:80" php: image: php:5.6.9-fpm links: - memcached volumes: - conf/php/php.ini /usr/local/etc/php/php.ini - src:/var/www/html volumes_from: - nginx
我不明白的是我如何将其推入生产或分期环境。 根据我的理解,最好将容器中的所有东西都放在容器中,而不必运行包pipe理器,因为这可能会失败,或者包可能与本地机器上的包不一样。 所以我想出了以下docker-compose.yml文件:
webapp: image : quay.io/myusername/myrepo php: image: php:5.6.9-fpm volumes: - config/php/php.ini /usr/local/etc/php/php.ini volumes_from: - webapp nginx: image: nginx:1.9 links: - php volumes: - config/nginx/default.conf:/etc/nginx/conf.d/default.conf volumes_from: - webapp ports: - "80:80"
webapp容器是从以下dockerfile构build的,并托pipe在某个存储库上。
FROM busybox VOLUME /var/www/html ADD src /var/www/html
我有一个git钩子,会触发quay.io上的这个dockerfile的构build,并将我的源代码添加到图像。
这是问题:供应商文件/依赖不在版本控制,所以他们不会被添加。
我看到两个解决scheme,我都不觉得理想。
- 添加依赖到版本控制。
- 运行命令
composer install
来拉入所有文件。 如上所述不是优选的。
docker工人对我来说还是很新的,所以我可能弄错了所有的东西。 很想得到一个答案如何正确地做到这一点。
你的Dockerfile
应该build立一个容器镜像,好像没有安装卷一样。 在容器中复制或复制代码,运行composer来安装依赖项。 运行容器没有任何卷应该工作。
生产环境中的卷主要用于保存数据和日志。 您的代码不应该在装入的卷中。
出于开发目的,您可以将卷挂载到代码位置,并且您的容器仍然可以工作。
为了加速构build过程,请首先复制composer.json
和composer.lock
文件,然后将依赖关系安装到源代码树之外的位置。 这将确保只有当你的json文件发生变化时才会更新依赖关系,而不是每次更改代码,都会极大地加速进程。
- Gitlab CI中cache / artifacts的正确用法是什么?
- 在dockerfile中,在RUN语句中创build或复制文件或目录后,它不存在
- 在特定进程的开发环境中将docker作为非root用户运行
- 如何知道composer php安装在Docker容器中的时间
- 如何禁用CircleCI中默认的作曲者安装?
- docker中的composer-playground不能连接到hlf v1
- composer php安装失败,当无法看到MySQL数据库
- 在Docker容器中使用git,composer,oh-my-zsh(UID / GID问题)
- Docker Cloud WordPress堆栈工作stream优化