根据我对docker compose/fig的理解,如果您不想将端口暴露给其他人,则在两个服务/图像之间创建链接是一个主要原因.
像这里db不暴露任何端口,只链接:
web:
build: .
links:
- db
ports:
- "8000:8000"
db:
image: postgres
Run Code Online (Sandbox Code Playgroud)
Web是否认为db在其localhost上运行?我会从web中的脚本/程序连接到localhost:5432(postgresql的标准端口)来获取数据库连接吗?
如果这是正确的,如何在不暴露的情况下将端口5432更改为6432?我会在另一个端口上运行postgresql吗?
更新:
一些输入之后的有用链接:
使用docker和fig设置mongodb副本集的正确方法是什么?
我试图按照官方mongodb教程创建一个fig.yml包含一些副本集的文件,但总是被如何调用rs.initiate()和rs.add("<hostname><:port>")正确阻止.
我找到了这个SO的答案,解释了为什么我不能从shell没有打电话的那一切开始rs.initiate(),所以我怎么能实现呢?
哦,我使用mongo:latest(v2.6.5)作为基本图像,没有任何修改.
我的应用程序位于容器内,它正在读取密码和API密钥的环境变量以访问服务.如果我在我的机器上运行应用程序(而不是在docker中),我只是export SERVICE_KEY='wefhsuidfhda98'应用程序可以使用它.
这是什么标准方法?我正在考虑使用一个秘密文件,该文件将通过export命令添加到服务器,然后source在该文件上运行.
我正在使用docker&fig.
我正在编写一个Dockerfile,它需要运行多个命令作为CMD指令的一部分,我认为正确的方法是运行一个带有主守护进程的shell脚本exec.不幸的是,作为该过程的一部分,我的一些输出(stdout?stderr?我不知道,我不知道如何找出)迷失了.
这是shell脚本:
#!/bin/sh
python manage.py migrate
exec python manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
这个想法是migrate命令只运行一次并显示其输出,然后runserver命令应该接管并且容器运行直到该进程退出.
实际问题是输出migrate正确显示,但未显示立即输出runserver.奇怪的是,后来的请求记录runserver显示得很好.
澄清一下,这是我预期的输出:
[...]
No migrations to apply.
[...]
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[21/Jan/2015 16:27:06] "GET / HTTP/1.1" 200 15829
Run Code Online (Sandbox Code Playgroud)
这是我得到的fig up:
[...]
No migrations to apply.
[...]
[21/Jan/2015 16:27:06] "GET / HTTP/1.1" 200 15829
Run Code Online (Sandbox Code Playgroud)
我甚至都不确定这是谁的错.runserver命令是否根据其运行方式更改其输出?这有问题exec吗?是docker/fig?
作为一个额外的数据点,我注意到在运行容器时我确实获得了所有输出fig run web,但不是在我这样做时fig up …
我正在创建一些用于在开发机器上进行测试的docker镜像.我计划为我们的主应用程序构建一个,以及为每个外部依赖项构建一个(postgres,elasticsearch等).对于主应用程序,我正在努力编写Dockerfile或编译要托管的映像.
一方面,Dockerfile很容易随时间共享和修改.另一方面,我希望在提交新图像之前,在vim中更容易进行高级配置(自定义应用程序属性文件).
我知道我可以得到相同的结果,但我正在寻找PROS,CONS和任何方向的问题.
作为一个方面说明,我计划在所有包装了一起利用图.我对这个工具的初步印象非常积极.
谢谢!
我的容器有以下Dockerfile:
FROM centos:centos7
# Install software
RUN yum -y update && yum clean all
RUN yum install -y tar gzip wget && yum clean all
# Install io.js
RUN mkdir /root/iojs
RUN wget https://iojs.org/dist/v1.1.0/iojs-v1.1.0-linux-x64.tar.gz
RUN tar -zxvf iojs-v1.1.0-linux-x64.tar.gz -C /root/iojs
RUN rm -f iojs-v1.1.0-linux-x64.tar.gz
# add io.js to path
RUN echo "PATH=$PATH:/root/iojs/iojs-v1.1.0-linux-x64/bin" >> /root/.bashrc
# go to /src
WORKDIR /src
CMD /bin/bash
Run Code Online (Sandbox Code Playgroud)
我构建这个容器并启动图像docker run -i -t -p 8080:8080 -v /srv/source:/usr/src/app -w /usr/src/app --rm iojs-dev bash.Docker将端口8080绑定到主机端口8080,以便我可以从我的客户端访问iojs-application.一切正常.
现在我想用docker-compose启动我的容器,使用以下docker-compose.yml
webfrontend:
image: …Run Code Online (Sandbox Code Playgroud) 我的应用程序在docker镜像中运行(我的开发团队从不在他们的机器中安装软件,只有docker镜像具有依赖关系).
我需要使用pycharm调试器调试一些东西,如何将pycharm的调试器连接到docker image的python?
我有一个docker compose设置数据库容器,一个应用程序容器和一个容器,它预先加载数据库所需的数据.
我希望启动所有容器,docker-compose up同时预装容器在完成工作后终止exit 0.
但是终止这个容器会使用以下消息完成整个设置:
composesetup_load_1 exited with code 0
Gracefully stopping... (press Ctrl+C again to force)
Stopping composesetup_app_1...
Stopping composesetup_db_1...
Run Code Online (Sandbox Code Playgroud)
在一个docker-compose设置中,有没有办法让多个容器具有不同的生命周期?如果有,怎么样?
我刚刚开始了解Docker,并考虑用Docker基础架构替换基于VM的基础架构.我想知道如何处理容器之间的依赖关系以及如何确定何时/是否需要重新启动依赖容器,如果需要,如何最小化停机时间.
为了更加精确,我发现了无花果或装饰等工具来管理容器和依赖项,所以(如果我很幸运的话)我会得到一个有向无环图,告诉我启动或取下容器的顺序.例如,mongodb容器必须在webserver容器等之前启动.
因此,如果我更新MongoDB或更改某些设置,我想我也应该关闭网络服务器,因为它不能很好地处理数据库不存在.在这种情况下,如何最大限度地减少因关闭和重新启动容器而导致的停机时间,包括重新部署Jetty webapp等?
但是,如果我只是更新我的SMTP服务器(或多或少所有其他容器依赖),我不希望这会触发我的整个容器基础设施的重启.因此,在重新启动邮件服务器容器后,其他容器是否仍能够访问以前链接的端口?
你是如何处理这种情况的?我是否需要/是否可以为每个容器ABC添加一个大使容器ABC_amb,它将永远不会停止并在ABC重新启动时保持连接等?
我正在考虑微服务架构,并想知道人们是否有一个良好的开发环境最佳实践.
我的工作假设是每个微服务都将存在于它自己的git存储库中,以实现隔离和易于部署.我还假设每个开发人员都会创建他们正在处理的任何仓库的分支.
我正在考虑的问题出现在你正在处理涉及多个微服务的问题上.例如,存在影响一个微服务的缺陷以及它如何适当地消耗另一个微服务.
假设n个项目涉及缺陷,则必须检查n个git存储库并将它们配置为一起工作.如果它们各自都有Vagratefile和Dockerfile,那么最终会运行n个VM.理想情况下,您只有1个Vagrant VM,每个服务器只是同一个VM中的新Docker实例.
使用git子模块的主repo /项目可以工作.问题是如果我们创建一个通用的主仓库/项目,那么子模块将指向上游而不是开发人员的分支.
我目前正在考虑一个拥有一些配置,流浪汉和无花果的主项目可能会成功.我目前正在考虑实施这种方法的两种方法.
有没有其他人解决这个问题或有一个良好的工作流程?