我喜欢把一些服务器服务(比如MySQL)隔离到容器的想法,只提供给需要它们的服务(比如SqlUsingApp)。
如果我理解正确,通常的方法是创build一个SqlUsingApp和一个MySQL容器,通过运行SqlUsingApp
docker run --link MySqlContainer:mysql SqlUsingApp
但是,如果需要重新启动MySQL,则启动MySQLContainer会中断链接,并使SqlUsinApp无效。 这不是通常的服务工作的方式,通过端口连接,如果服务重新启动,任何时候都可以重新连接。 因此,一个通常的非托pipe服务器可以在任何时候重启任何一个服务器,而不需要重启其他服务器。
docker式解决scheme是什么?
我确实使用fig (现在已经“改名”为docker-compose )来解决这类问题。 我们可以用一个“部署”来表示参与的各个docker集装箱(如果我们现在就打电话,请任何人:如果你知道更好的术语,请发表评论,请跟我来,我是德国人)。 这是在名为fig.ylm的文件( fig.ylm docker-compose.yml如果你已经迁移到docker-compose.yml -compose) fig.ylm YAML表示法完成的。 然后,您可以通过像fig start , fig stop这样的命令启动,停止等所描述的容器组。
让事情运行的最方便的命令就是build立所有包含,并且像启动组合控制台输出的单个应用程序一样启动所有这些命令。
为了在脚本中这样做,像deamon一样,-d参数是有用的: fig up -d像整个守护进程一样运行整个shebang。
链接到Fig文档: http : //www.fig.sh
docker-compose相同: https : //docs.docker.com/compose/
现在我将发布一个由Gitlab,Postgres和Redis服务组成的Gitlab“部署”的完整示例。 它在Ubuntu主机上运行,并在启动脚本的系统启动时自动启动:
fig.yml (在/root/docker_gitlab/主机上):
postgresql: image: sameersbn/postgresql:9.1-1 environment: - DB_USER=gitlab - DB_PASS=secretpassword - DB_NAME=gitlabhq_production gitlab: image: sameersbn/gitlab:latest links: - redis:redisio - postgresql:postgresql ports: - "10080:80" - "10022:22" volumes: - /opt/gitlab/data:/home/git/data environment: - SMTP_HOST=smtp.germanprovider.de - [email protected] - SMTP_PASS=verysecret - GITLAB_HOST=projectserver - GITLAB_PORT=10080 - GITLAB_SSH_PORT=10022 redis: image: sameersbn/redis:latest
新贵的脚本gitlab.conf (在/etc/init/ on主机上):
description "gitlab service runner" start on filesystem and started docker stop on runlevel [!2345] respawn chdir /root/docker_gitlab script # Wait for docker to finish starting up first. FILE=/var/run/docker.sock while [ ! -e $FILE ] ; do inotifywait -t 2 -e create $(dirname $FILE) done /usr/local/bin/fig start end script
无花果似乎是如此的“docker风格”,docker团队把它作为docker组成。 所以在这方面一切都应该没问题
对于监听它们的守护进程,可以发送信号到docker容器,docker容器将它们传递给CMD或入口点开始的东西。 IIRC,当发送一个HUP信号时,mysql会重启。
不幸的是,这不是一个通用的解决scheme。 像geard这样的第三方应用程序试图解决docker以外的一些问题。