作为docker集装箱启动和停止服务

我喜欢把一些服务器服务(比如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 startfig 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以外的一些问题。