一点背景:我是 docker 的新手,还不知道任何最佳实践。我的任务是创建一个基于 php 的网络服务,我决定使用 docker-compose 进行配置。
因为我们都是花哨的开发人员,所以我们知道 - 如今不使用 composer 就无法构建 php 应用程序。
我应该在构建中安装依赖项吗?因此,将其添加到我的 Dockerfile 中:
RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
或者我应该在开发期间安装依赖项并使用包含的依赖项构建容器镜像吗?
我只知道一种不这样做的方法:在开发机器上本地安装依赖项,然后构建容器。但是“最佳实践”会是什么样子呢?
而且 - 因为我是这个领域的新手 - 我将如何为我的应用服务容器运行“composer require some/package”?
我还注意到一条消息“不要以根/ super 用户身份运行 Composer!”构建容器时。我将 COMPOSER_ALLOW_SUPERUSER=1 添加到我的 Env 文件中(如 here 所示),但此消息仍然出现。
是否可以在 docker 容器中不以 root 身份执行 composer install?我可以忽略该消息吗?
提前致谢, 菲利普
最佳答案
目前我正在努力实现以下解决方案:
将整个 src 添加为卷:
volumes:
- .:/app
初始 Composer 安装命令
docker-compose exec app composer install
安装新的 Composer 包:
docker-compose exec app composer require some/package
包将通过容器安装在您的 composer 包目录(当然默认为/vendor),源代码可以在您的 ide 等中检查。
仅应用状态定义为音量,例如:
volumes:
- public/uploads:/app/public/uploads
将/vendor 添加到 .dockerignore
并在构建期间运行 composer install
RUN cd /app && composer install --no-dev --no-interaction --optimize-autoloader
因此,您将拥有要部署的预构建镜像,但仍能够以更敏捷的方式进行开发。
一个解决方案(我不知道这在 composer 中是否可行)可以是 composer 缓存目录的卷。
我不知道如何正确解决这个问题。也许我可以为开发容器创建一个具有开发用户名称的用户,并让该用户运行命令和 php-fpm 等...我想对于生产 root 是可以的。
我对 docker 还是很陌生,并且愿意寻求更好的解决方案,所以我不会接受这个答案。
已更新
在 Dockerfile 的 docker 用户中添加新用户。如下
RUN useradd -ms /bin/bash newuser
USER newuser
如果你也想创建家庭用户
WORKDIR /home/newuser
或
mkdir /home/newuser
如果你想回到root用户,你可以这样做
USER root
关于php - docker 和 PHP : getting dependencies (composer) into the container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47548150/
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我正在尝试使用docker运行一个Rails应用程序。通过github的sshurl安装的gem很少,如下所示:Gemfilegem'swagger-docs',:git=>'git@github.com:xyz/swagger-docs.git',:branch=>'my_branch'我在docker中添加了keys,它能够克隆所需的repo并从git安装gem。DockerfileRUNmkdir-p/root/.sshCOPY./id_rsa/root/.ssh/id_rsaRUNchmod700/root/.ssh/id_rsaRUNssh-keygen-f/root/.ss
我在Heroku上构建了一个必须在Docker容器内运行的RoR应用程序。为此,我使用officialDockerfile.因为它在Heroku中很常见,所以我需要一些附加组件才能使这个应用程序完全运行。在生产中,变量DATABASE_URL在我的应用程序中可用。但是,如果我尝试其他一些使用环境变量(在我的例子中是Mailtrap)的加载项,变量不会在运行时复制到实例中。所以我的问题很简单:如何让docker实例在Heroku上执行时知道环境变量?您可能会问,我已经知道我们可以在docker-compose.yml中指定一个environment指令。我想避免这种情况,以便能够通过项目
我在开发和生产中都使用docker,真正困扰我的一件事是docker缓存的简单性。我的ruby应用程序需要bundleinstall来安装依赖项,因此我从以下Dockerfile开始:添加GemfileGemfile添加Gemfile.lockGemfile.lock运行bundleinstall--path/root/bundle所有依赖项都被缓存,并且在我添加新gem之前效果很好。即使我添加的gem只有0.5MB,从头开始安装所有应用程序gem仍然需要10-15分钟。由于依赖项文件夹的大小(大约300MB),然后再花10分钟来部署它。我在node_modules和npm上遇到了
开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建
测试环境对于任何一个软件公司来讲,都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的docker动态环境+docker稳定环境环境体系。期间环境系统不断的演进,去适应转转集群扩张、新业务的扩展,走了一些弯路,但最终我们将系统升级到了我们认为的终极方案。下面我们介绍一下转转环境的演进和最终的解决方案。1测试环境演进1.1单体环境 转转在2017年成立之初,5台64G内存的机器,搭建5个完整的测试环境。就满足了转转的日常所需。一台分给开发,几台分给测试。通过沟通协调就能解决多分支并行开发下冲突问题。1.2动态环境+稳定环境 随着微服务化的进
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?
我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob
Lisp是否适合Web编程/应用程序(交互式),就像ruby和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common