2017-01-24 3 views
1

Я уже искал идеи для своей проблемы, но я не нашел ничего, что мог бы использовать. У меня есть файл докеров с MySql & Apache2, и я хочу, чтобы они запускались, когда контейнер запускался слишком, но я не могу сделать это в файле docker с CMD или ENTRYPOINT, потому что я хочу поместить tail, чтобы сохранить мой контейнер в живых, и я хочу быть в состоянии перейти в режиме bash непосредственно с run -it container 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).

Спасибо за вашу помощь :)

ответ

0

Несколько советов, которые могут помочь вам на вашем пути -

  1. Использование MySQL и Apache2 в том же контейнере против контейнера передовой практики. Рассмотрите разделение двух процессов на отдельные контейнеры и их подключение с помощью докер-компоновки.
  2. Использование RUN для запуска службы не принесет вам никакой пользы, так как оно будет работать во время сборки, но не будет сохраняться при фактическом запуске контейнера. Для этого вам нужно ENTRYPOINT, чтобы убедиться, что сценарий запускается при запуске контейнера.
  3. Если вы хотите, чтобы позволить себе соединение в контейнер, вы должны использовать docker exec (который выполняет команду над управлением контейнером) по docker run (который пытается запустить новый контейнер из тех же изображений)
1

Я уже искал идеи для моей проблемы, но я ничего, что я мог бы использовать не нашел.

Практически во всех случаях вы должны запускать только один процесс в одном контейнере. Разделение приложений на несколько контейнеров значительно облегчает масштабирование по горизонтали и повторное использование контейнеров. Если эта услуга зависит от другой службы, используйте связь с контейнером.

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

0

Спасибо для ваших ответов я имел в виду, чтобы иметь возможность перейти в режиме bash непосредственно с помощью ...

Итак, вы говорите, что обычно я должен использовать docker exec, чтобы иметь возможность модифицировать мой контейнер в противоположность run, что следует использовать только для развертывания контейнера?

Я собираюсь сделать это с вашими советами, спасибо! : D

Смежные вопросы