多依赖? Dockerfiles构建LAMP容器

时间:2016-07-24 14:59:28

标签: docker dockerfile

我正在尝试构建一个LAMP容器,我已经构建了几个容器:httpd 2.4.23,redis 3.0.7,mysql 5.6.30,我自己从源代码下载的档案中编译它们。我将所有这些都基于debian容器。

现在我正在使用php 5.6.20容器,它抱怨它不知道apache和mysql。

这是php容器的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 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。但后来我需要将httpd放在mysql上,和/或redis上...我真的不喜欢那个设置。

我还安装了Docker Compose,但我想知道它是否对我的情况有帮助。

更新:这是完全正常工作的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

1 个答案:

答案 0 :(得分:2)

如果你需要在容器中运行apache,你可以使用上面的Dockerfile在你的映像中安装apache,就像你安装build-essential东西一样。这意味着:

RUN apt-get install -y apache2

或类似的命令。如果还需要为此apache应用程序配置,则可以使用ADDCOPY命令将配置文件从外部添加到容器内部。可以找到更多详细信息here

如果您需要将apache作为独立容器,则可以使用docker-compse来实现它。在另一个容器中启动apache,然后使用depends_on配置容器之间的依赖关系。您可以使用ports更改每个容器的端口号,以便它们可以相互通信。