Tag: 容器

在Docker集群中安排任务的最佳方法是什么?

目前,我有一个应用程序运行在一台服务器上。 有一个crontab按照特定的规则build立起来,在某些时候有一些任务正在运行。 现在,我正在考虑将我的应用程序迁移到Docker容器中,以便能够独立运行我的应用程序的多个实例。 我想知道如何做的事情是如何安排跨多个docker集装箱的任务 。 比方说,我有一个PHP命令,每小时通过API从第三方应用程序获取新的数据。 目前,我会使用一个cron来安排它像这样: 0 */1 * * * php /some/path/index.php mycommand 。 可以有不同的频率启动多个类似的命令。 我不能简单地将crontab打包到我的Docker镜像中,因为当有5个容器运行时,命令将被启动5次。 我想在运行容器数量上独立启动一次。 什么是实现这一目标的理想解决scheme?

使用docker集装箱内的数据

一个主要任务是执行到一个docker容器和尾部日志文件。 这是在python项目里面完成的: docker exec container_to_analyse tail -f /var/log…xy.log 被执行并且stdout被传递到parsing并且做一些指标。 工作完全正常,直到我尝试将我的项目设置到docker集装箱。 现在我不能执行到所需的容器,我还没有find一种方法来访问container_to_analyse数据,并在公制容器内使用它。 Dockerfile: FROM python:2.7 ENV PYTHONUNBUFFERED 1 RUN mkdir /metrics_docker COPY ./* /metrics_docker/ WORKDIR /metrics_docker RUN pip install -r requirements.txt CMD ["python" , "./data_pusher.py"] 我的问题是,如何将驻留在/ var / log …文件中的container_to_analyse日志公开到我的度量容器中,以便它可以使用它。

如何将软件或其他软件包添加到docker集装箱?

我已经从docker中心像这样拉jenkins容器: docker pull jenkins 容器运行,我可以访问Jenkins UI: http://localhost:8080 我的问题是: 如果我想能够创build一个从github仓库中取出的jenkins作业,并且想从该仓库的某个testing文件运行一些pythontesting,那么我怎样才能安装额外的软件包,比如virtualenvwrapper, pip, pytest, nose, selenium等? 看来,docker容器不会与本地主机文件系统共享任何参考。 我如何在这个正在运行的容器中安装这样的包? 谢谢

Docker – 进程不在启动时启动

我正在容器化最新版本的grafana,并希望在容器启动时启动grafana-process ,然后在K8S(kubernetes)集群中使用它。 我的Dockerfile看起来像: FROM armdocker/baseimages/rhel:7-20161207 MAINTAINER xxxxxxxx ENV GRAFANA_VERSION_MAJOR=4 GRAFANA_VERSION_MINOR=4 GRAFANA_VERSION_PATCH=3-1 ENV GRAFANA_VERSION=${GRAFANA_VERSION_MAJOR}.${GRAFANA_VERSION_MINOR}.${GRAFANA_VERSION_PATCH} RUN yum clean all && yum install -y unzip tar RUN curl -f -L -o grafana-${GRAFANA_VERSION}.x86_64.rpm https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-${GRAFANA_VERSION}.x86_64.rpm && \ yum localinstall grafana-${GRAFANA_VERSION}.x86_64.rpm -y EXPOSE 3000 ENTRYPOINT ["/etc/init.d/grafana-server start"] 构buildDockerfile成功,并且不返回任何错误。 当我尝试运行这个图像时,我得到了错误。 docker run -dit -p 3000:3000 armdocker/proj/grafana:1.0.5 471b2acb964caad69bbb78831a59ee9d2b27997911b5b104b0057ddc957d1101 Error response from daemon: Cannot […]

运行时将环境variables传递给kubernetes

在使用vanilla docker,compose或swarm时,我可以通过“-add-env FOO = bar”作为Docker cli参数来为运行时的容器定义一个env var值。 但是,在kubernetes中,我只看到如何在容器规范部分的.yml文件中强调值。 任何人都可以指出我如何在运行时传递它? (即使用“kubectl apply …”时传递一个env var) 谢谢! 真的很感谢任何帮助! 最好的祝福,

性能:Docker中的Java

我知道Docker非常适合部署。 但是,性能呢? 最近我读了https://oliverveits.wordpress.com/2015/10/27/docker-java-performance-tests/他得出的结论是,本机Java是最好的select。 不幸的是,我没有发现很多关于docker中java性能的其他testing或信息。 在Docker性能方面你有什么关于java的经验? 如果你能指点我一些我错过的文档或testing,那将是非常好的。

DevOps vs Docker

我想知道docker如何适合CI / CD。 我明白,在容器的帮助下,您可能会关注代码,而不是依赖关系/环境。 但是一旦你签入代码,你将会期待像TeamCity,Jenkins或者Bamboo这样的工具来处理集成构build,集成testing/unit testing以及部署到目标服务器(在批准之后),在那里你会期望同样的Docker容器映像运行内置的代码。 但是,总而言之,Docker在CI / CD周期中并不存在,尽pipe它在服务器执行时发挥作用。 那么,为什么我会看到文章将其列为DevOps的其中一项。 我可能是错的,因为我不是DevOps大师,请指教!

不能通过IP地址访问docker容器

我正在一个Django的应用程序,我决定把我所有的开发进入docker集装箱。 我有一个小问题:基本上,我有3个容器: – 应用程序(其中包含django代码) – postgres(其中包含数据库) – networking(这是一个nginx转发请求端口80到8000是端口使用的Django)我的问题是,我不能访问我的网站外的“应用程序”容器,我的nginx日志说: 2014/12/21 22:22:35 [error] 9#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.59.3, server: _, request: "GET / HTTP/1.1", upstream: "http://172.17.0.62:8000/", host: "192.168.59.103" 显然,nginx不能转发连接,因为“app”容器(192.168.59.103)不会侦听连接。 但是这不是真的,因为我附加到应用程序容器,我试图做一个curl请求,但: – 如果我curl "localhost:8000" ,它的作品(我得到的django欢迎页面 – 如果我做curl "http://172.17.0.62:8000/"不行的所以,我设法隔离问题并运行”路由“命令,显示我: Destination Gateway Genmask Flags Metric Ref Use Iface default 172.17.42.1 0.0.0.0 UG […]

在运行docker contianer中设置环境variables

我需要在运行的Docker容器中设置环境variables。 我已经意识到创build容器时设置环境variables的方式。 到目前为止,我发现没有可用的直接方式来做这个与docker和docker计划添加一些新的1.13版本。 但是,我发现有些人能够pipe理它,现在不适合我。 我尝试了下面的方法,但没有为我工作 – docker exec -it -u=root test /bin/bash -c "export port=8090" 使用脚本将echo“export port = 8090”复制到/etc/bash.bashrc,然后将其源代码 docker exec -it test /bin/bash -c "source /etc/bash.bashrc" configuration一个脚本中的所有东西,并从主机运行它也没有工作。 当从主机运行脚本时,除“export port = 8090”或“source /etc/bash.bashrc”或“source / root / .bashrc”之外,其他所有命令都成功执行。 任何人都可以解释为什么从主机源文件不能在docker容器中工作,甚至当我设置用户(“ – U =根”)? 任何人都可以帮我解决这个问题吗? 当我从容器内源文件,它完美的作品。 但在我的情况下,我必须从主机做到这一点 注意:我使用docker 1.12,并在ubuntu:16.04和ubuntu:14.04上面试过

设置docker集装箱可以打开的最长时间

我正在打开docker容器并运行内联bash脚本。 bash脚本运行python代码,但是我并不总是知道代码是什么。 因为它是任意代码,我想在30秒内启用一个kill开关来closures这个容器。 有没有办法做到这一点,我正在运行的代码: docker run my/image sh -c '$(curl -ss -o python_file.py https://www.example.com); \ python python_file.py' 基本上在运行python文件之前,我想启动一个计时器。 如果该计时器命中30秒,我运行docker工杀死这个特定的容器。 我试过以下,但它不工作。 timeout 30 docker run my/image sh -c '$(curl -ss -o python_file.py https://www.example.com); \ python python_file.py'