2016-07-24 5 views
0

私はLAMPコンテナを構築しようとしていますが、すでにいくつかのコンテナを構築しています:httpd 2.4.23、redis 3.0.7、mysql 5.6.30ソースコードをダウンロードしたアーカイブから自分自身をコンパイルします。私は上記のすべてをdebianコンテナに基づいています。複数従属ですか? LAMPコンテナを構築するDockerfiles

私はphp5.6.20コンテナをやっているので、それはapacheとmysqlについて知らないと言っています。

FROM debian 

RUN apt-get update 
RUN apt-get install -y build-essential; 
RUN apt-get install -y cmake; 
RUN apt-get install -y libfreetype6-dev libjpeg-dev libpng12-dev libcurl4-openssl-dev libbz2-dev libxml2-dev libxslt-dev libgd2-xpm-dev php5-imap libz-dev 

WORKDIR /usr/bin/ 
COPY php-5.6.20.tar.gz /usr/bin/ 
RUN gzip -d php-5.6.20.tar.gz 
RUN tar -xvf php-5.6.20.tar 
RUN ln -s php-5.6.20 php 

WORKDIR /usr/bin/php/ 
RUN ./configure \ 
    --prefix=/usr/bin/ \ 
    --with-apxs2=/usr/bin/apache/bin/apxs \ 
    --with-config-file-path=/usr/bin/php-5.6.20/ \ 
    --enable-libgcc \ 
    --with-mysqli=/usr/bin/mysql/mysql_config \ 
    --with-zlib-dir=/usr \ 
    --with-jpeg-dir=/usr \ 
    --with-png-dir=/usr \ 
    --with-gd \ 
    --enable-gd-native-ttf \ 
    --with-freetype-dir=/usr \ 
    --enable-ftp \ 
    --enable-xml \ 
    --enable-zip \ 
    --with-bz2 \ 
    --enable-wddx \ 
    --without-pear \ 
    --enable-mbstring \ 
    --with-curl 

RUN make 

RUN make install 

私は上の代わりに、それをベースにする必要がある場合、私は疑問に思う:FROM httpd:2.4.23

は、ここでPHPのコンテナのDockerfileです。しかし、私は、mysqlと/またはredisのいずれかにhttpdを置く必要があります...私はその設定が本当に好きではありません。

私はDocker Composeもインストールしましたが、それが私の状況で役立つかどうかは疑問です。

UPDATE:インストールとしてあなたは、あなただけの同じように、Dockerfile上記とあなたのイメージにApacheをインストールすることができ、あなたのコンテナで実行されているのapacheが必要な場合はここで完全に動作するDockerfile

FROM debian 

RUN apt-get update 
RUN apt-get install -y build-essential; 
RUN apt-get install -y cmake; 
RUN apt-get install -y openssl libssl-dev; 
RUN apt-get install -y libpcre3 libpcre3-dev 

WORKDIR /usr/bin/ 
COPY httpd-2.4.23.tar.gz /usr/bin/ 
RUN gzip -d httpd-2.4.23.tar.gz 
RUN tar -xvf httpd-2.4.23.tar 
RUN ln -s httpd-2.4.23 httpd 
COPY apr-1.5.2.tar.gz /usr/bin/httpd/srclib/ 
COPY apr-util-1.5.4.tar.gz /usr/bin/httpd/srclib/ 
WORKDIR /usr/bin/httpd/srclib/ 
RUN gzip -d apr-1.5.2.tar.gz 
RUN gzip -d apr-util-1.5.4.tar.gz 
RUN tar -xvf apr-1.5.2.tar 
RUN tar -xvf apr-util-1.5.4.tar 
RUN ln -s apr-1.5.2 apr; 
RUN ln -s apr-util-1.5.4 apr-util 

WORKDIR /usr/bin/httpd/ 
RUN ./configure \ 
    --prefix=/usr/bin/apache \ 
    --enable-rewrite \ 
    --enable-deflate \ 
    --enable-ssl 

RUN make 

RUN make install 

RUN apt-get update 
RUN apt-get install -y libncurses-dev 

COPY mysql-5.6.30.tar.gz /usr/bin/ 
WORKDIR /usr/bin/ 
RUN gzip -d mysql-5.6.30.tar.gz 
RUN tar -xvf mysql-5.6.30.tar 
RUN ln -s mysql-5.6.30 mysql 

WORKDIR /usr/bin/mysql/ 
RUN mkdir install; mkdir install/data; mkdir install/var; mkdir install/etc; mkdir install/tmp 

RUN cd /usr/bin/mysql/; cmake \ 
    -DCMAKE_INSTALL_PREFIX=/usr/bin/mysql/install \ 
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
    -DMYSQL_DATADIR=/usr/bin/mysql/install/data \ 
    -DDOWNLOAD_BOOST=1 \ 
    -DWITH_BOOST=/usr/bin/mysql/install/boost \ 
    -DMYSQL_UNIX_ADDR=/usr/bin/mysql/install/tmp/mysql.sock 

RUN make 

RUN make install 

RUN apt-get update 
RUN apt-get install -y libfreetype6-dev libjpeg-dev libpng12-dev libcurl4-openssl-dev libbz2-dev libxml2-dev libxslt-dev libgd2-xpm-dev php5-imap libz-dev 

WORKDIR /usr/bin/ 
COPY php-5.6.20.tar.gz /usr/bin/ 
RUN gzip -d php-5.6.20.tar.gz 
RUN tar -xvf php-5.6.20.tar 
RUN ln -s php-5.6.20 php 

WORKDIR /usr/bin/php/ 
RUN ./configure \ 
    --prefix=/usr/bin/php \ 
    --with-apxs2=/usr/bin/apache/bin/apxs \ 
    --with-config-file-path=/usr/bin/php-5.6.20/ \ 
    --enable-libgcc \ 
    --with-mysqli=/usr/bin/mysql/install/bin/mysql_config \ 
    --with-zlib-dir=/usr \ 
    --with-jpeg-dir=/usr \ 
    --with-png-dir=/usr \ 
    --with-gd \ 
    --enable-gd-native-ttf \ 
    --with-freetype-dir=/usr \ 
    --enable-ftp \ 
    --enable-xml \ 
    --enable-zip \ 
    --with-bz2 \ 
    --enable-wddx \ 
    --without-pear \ 
    --enable-mbstring \ 
    --with-openssl 
    --with-curl 

RUN make 

RUN make install 

ENTRYPOINT ["/usr/bin/apache/bin/apachectl", "start", "-D FOREGROUND"] 

EXPOSE 80 

# Build the container: docker build -t stephaneeybert/httpd:2.4.23 . 
# Run the container: docker run -d -p 127.0.0.1:80:80 --name httpd stephaneeybert/httpd:2.4.23 
# Check that the port is open: nmap -p 8081 localhost 
+0

「ApacheとMySQLについて知りません」と言うと、ログを投稿できますか? –

+0

これは、2つがコンテナにインストールされていないので、apacheとmysqlについて知らないことは意味があります。私の質問は、コンテナの依存関係についてどうやって行くかということでした。 – Stephane

+0

ログの出力は以下の通りです: './configure:line 8417:/ usr/bin/apache/bin/apxs:そのようなファイルやディレクトリはありません configure:error:Aborting' – Stephane

答えて

2

でビルド不可欠もの。つまり、

RUN apt-get install -y apache2 

または類似のコマンドを意味します。このapacheアプリケーションの設定が必要な場合は、ADDまたはCOPYコマンドを使用して、コンテナの外側から内側に設定ファイルを追加することができます。詳細はhereとなります。

独立したコンテナとしてApacheが必要な場合は、docker-compseを使用してそれを実現できます。別のコンテナでApacheを起動し、次にdepends_onを使用してコンテナ間の依存関係を設定します。 portsを使用して、各コンテナのポート番号を変更し、相互に通信できるようにすることができます。

+0

私はまだ私の問題を抱えています。コンパイルしてPHPサーバを構築したいと思います。 configureスクリプトはいくつかのapacheとmysqlパスを使います: '--with-apxs2 =/usr/bin/apache/bin/apxs'と' --with-mysqli =/usr/bin/mysql/mysql_confi 'しかし、これらのパスはこのPHPコンテナには存在しません。それらはそれぞれ独自のコンテナ内に存在します。私はこれらの2つのパスを使わずにPHPを構築する方法を疑問に思っていますが、終わりにはまだランプをインストールしています。 – Stephane

+0

@Stephane「自分のコンテナ」と言うと、mysqlとapacheは2つの独立したコンテナで実行されていますが、別のコンテナで実行されている5.6.20のコンテナですか?そうであれば、すべてを単一のコンテナで実行することを検討する必要があります。それぞれのコンテナをVMまたは物理マシンとしてイメージすると、3つの異なるマシンでApache、MySQL、PHPを実行できますが、まだLAMPが稼動していますか?特別な構成を介して行うことができる場合は、その構成もコンテナの状況に適用する必要があります。 –

+0

はい、私は、MySQL用とApache用、PHP用の3つのコンテナを用意したいと考えていました。そして、私は3つの異なるマシンでこれらの3つを動かすことはできません。私は、サービスごとに1つのコンテナを用意する必要があることを認識しています。私のケースでは、MySQLのコンテナとApache-PHPのコンテナの両方に変換する必要があります。今私はちょうど私がMySQLなしでApache-PHPを構築する方法を見て、それがMySQLと通信する必要があることを知る必要があります。 – Stephane

関連する問題