在容器启动时启动服务

时间:2017-01-24 11:28:14

标签: mysql apache docker debian dockerfile

我已经搜索了我的问题的想法,但我没有发现任何我可以使用的东西。 我有一个带有MySql&的dockerfile。 Apache2和我希望它们在容器启动时启动但我无法在带有CMDENTRYPOINT的dockerfile中执行它因为我想放一个tail来保存我的容器我希望能够直接使用run -it container bash进入bash模式,如果我在脚本中添加尾巴或CMD/ENTRYPOINT它是不可能的。

我尝试使用update-rc.d启动我的服务,但它根本不起作用......

我试图启动MySql& Apache2带有ENTRYPOINT的脚本并将tail放在CMD但是我认为在使用不同的dockerfile和脚本进行大量尝试后它是不可能的......

这是我的dockerfile:

###
# Dockerfile db MySql
###

###
# Image
###

FROM debian:jessie

###
# Volume
###

VOLUME /usr/projet/volumes/volume_db

###
# Proxy & installations
###

RUN export http_proxy="myproxy:port" \
&& export https_proxy="myproxy:port" \
&& apt-get update \
&& apt-get install -y vim \
&& echo "mysql-server mysql-server/root_password select root" | debconf-set-selections \
&& echo "mysql-server mysql-server/root_password_again select root" | debconf-set-selections \
&& apt-get install -y mysql-server \
&& apt-get install -y mysql-client \
&& service mysql start \
#&& service mysql stop \
&& echo "phpmyadmin phpmyadmin/dbconfig-install boolean true" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/app-password-confirm password root" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/mysql/admin-user string root" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/mysql/admin-pass password root" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/mysql/app-pass password root" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2" | debconf-set-selections \
&& apt-get install -y phpmyadmin\
&& apt-get autoremove --purge

###
# Script startup
###

#COPY script_start /etc/init.d/

RUN update-rc.d apache2 defaults \
&& update-rc.d mysql defaults

###
# Variable env
###

ENV MYSQL_ROOT_PASSWORD=root

###

###
# Port exposition & cmd
###

EXPOSE 3306 80

CMD tail -F -n0 /etc/hosts

还有我的剧本:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          script_start
# Required-Start:    $local_fs $syslog
# Required-Stop:     $local_fs $syslog
# Default-Start:     2
# Default-Stop:
# Short-Description: Boot services mysql apache2
# Description:       Boot services
### END INIT INFO

service mysql start \
&& service apache2 start

我希望你明白我想要的东西,而且我没有做太多的语言错误(fr)。

感谢您的帮助:)

3 个答案:

答案 0 :(得分:1)

  

我已经搜索了我的问题的想法,但我没有找到任何我可以使用的。

在几乎所有情况下,您只应在单个容器中运行单个进程。将应用程序分离到多个容器中可以更容易地水平扩展和重用容器。如果该服务依赖于其他服务,请使用容器链接。

https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#/run-only-one-process-per-container

答案 1 :(得分:0)

一些可能对您有所帮助的指示 -

  1. 在同一个容器中使用MySQL和Apache2是对的 容器最佳实践。考虑将这两个过程分成两部分 单独的容器,并用docker-compose连接它们。
  2. 使用RUN启动服务对您没有好处,因为它将在构建时运行,但在您实际运行容器时不会保留。你应该ENTRYPOINT,确保脚本在容器启动时运行。
  3. 如果要允许自己连接到容器,则应使用docker exec(在正在运行的容器上执行命令)而不是docker run(尝试从同一图像启动新容器) )

答案 2 :(得分:0)

感谢您的回复,我想到能够直接使用bash模式运行...

所以你说通常我必须使用docker exec能够修改我的容器,而run只能用于部署容器吗?

我打算用你的建议来做,谢谢! :d