English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تثبيت Apache باستخدام Docker

方法一、docker pull httpd

查找 Docker Hub 上的 httpd 镜像:

可以通过 Sort by 查看其他版本的 httpd,默认是最新版本 httpd:latest

بالإضافة إلى ذلك، يمكننا أيضًا استخدام الأمر docker search httpd لعرض الإصدارات المتاحة:

w3codebox@w3codebox:~/apache$ docker search httpd
NAME                         DESCRIPTION                 STARS  OFFICIAL AUTOMATED
httpd                          The Apache HTTP Server ..    524   [OK]       
centos/httpd                                              7                [OK]
rgielen/httpd-image-php5       Docker image for Apache...   1                [OK]
microwebapps/httpd-frontend    Httpd frontend allowing...   1                [OK]
lolhens/httpd                  Apache httpd 2 Server        1                [OK]
publici/httpd                  httpd:latest                 0                [OK]
publicisworldwide/httpd        The Apache httpd webser...   0                [OK]
rgielen/httpd-image-simple     Docker image for simple...   0                [OK]
solsson/httpd                  Derivatives of the offi...   0                [OK]
rgielen/httpd-image-drush      Apache HTTPD + Drupal S...   0                [OK]
learninglayers/httpd (...) 0 [OK]
sohrabkhan/httpd Docker httpd + php5.6 (...) 0 [OK]
aintohvri/docker-httpd Apache HTTPD Docker ext... 0 [OK]
alizarion/httpd httpd روی centos با mo... 0 [OK]
...

در اینجا ما تصویر رسمی را دانلود می‌کنیم

w3codebox@w3codebox:~/apache$ docker pull httpd

پس از اتمام دانلود، می‌توانیم تصویر با REPOSITORY httpd را در لیست تصاویر محلی پیدا کنیم.

w3codebox@w3codebox:~/apache$ docker images httpd
REPOSITORY     TAG        IMAGE ID        CREATED           SIZE
httpd          أحدث     da1536b4ef14    23 ثانية مضت    195.1 MB

روش دوم: از طریق فایل Dockerfile ساخت

ایجاد فایل Dockerfile

ابتدا، پوشه apache را ایجاد کنید تا بتوانید چیزهای مرتبط را در آن ذخیره کنید.

w3codebox@w3codebox:~$ mkdir -p ~/apache/www ~/apache/logs ~/apache/conf

پوشه www به پوشه برنامه‌های کانتینر apache تبدیل می‌شود.

پوشه logs به فایل‌های لوگ کانتینر apache تبدیل می‌شود.

پوشه conf فایل‌های پیکربندی را به فایل‌های پیکربندی کانتینر apache تبدیل می‌کند.

دخول به پوشه ایجاد شده برای apache و ایجاد فایل Dockerfile.

FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
#RUN groupadd -r www-data && useradd -r --create-home -g www-data www-data
ENV HTTPD_PREFIX /usr/local/apache2
ENV PATH $PATH:$HTTPD_PREFIX/bin
RUN mkdir -p "$HTTPD_PREFIX" \
    && chown www-data:www-data "$HTTPD_PREFIX"
WORKDIR $HTTPD_PREFIX
# install httpd runtime dependencies
# https://httpd.apache.org/docs/2.4/install.html#requirements
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        libapr1 \
        libaprutil1 \
        libaprutil1-ldap \
        libapr1-dev \
        libaprutil1-dev \
        libpcre++0 \
        libssl1.0.0 \
    && rm -r /var/lib/apt/lists/*
ENV HTTPD_VERSION 2.4.20
ENV HTTPD_BZ2_URL https://www.apache.org/dist/httpd/httpd-$HTTPD_VERSION.tar.bz2
RUN buildDeps=' \
        ca-certificates \
        curl \
        bzip2 \
        gcc \
        libpcre++-dev \
        libssl-dev \
        make \
    '' \
    set -x \
    && apt-get update \
    && apt-get install -y --no-install-recommends $buildDeps \
    && rm -r /var/lib/apt/lists/* \
    \
    && curl -fSL "$HTTPD_BZ2_URL" -o httpd.tar.bz2 \
    && curl -fSL "$HTTPD_BZ2_URL.asc" -o httpd.tar.bz2.asc \
# see https://httpd.apache.org/download.cgi#verify
    && export GNUPGHOME="$(mktemp -d)" \
    && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys A93D62ECC3C8EA12DB220EC934EA76E6791485A8 \
    && gpg --batch --verify httpd.tar.bz2.asc httpd.tar.bz2 \
    && rm -r "$GNUPGHOME" httpd.tar.bz2.asc \
    \
    && mkdir -p src \
    && tar -xvf httpd.tar.bz2 -C src --strip-components=1 \
    && rm httpd.tar.bz2 \
    && cd src \
    \
    && ./configure \
        --prefix="$HTTPD_PREFIX" \
        --enable-mods-shared=reallyall \
    && make -j"$(nproc)" \
    && make install \
    \
    && cd .. \
    && rm -r src \
    \
    && sed -ri \
        -e 's!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g' \
        -e 's!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g' \
        "$HTTPD_PREFIX/conf/httpd.conf" \
    \
    && apt-get purge -y --auto-remove $buildDeps
COPY httpd-foreground /usr/local/bin/
EXPOSE 80
CMD ["httpd-foreground"]

ملف Dockerfile يحتوي على الأمر COPY httpd-foreground /usr/local/bin/ وهو ينسخ ملف httpd-foreground الموجود في الدليل الحالي إلى داخل الصورة، كنص بدء خدمة httpd، لذا يجب علينا إنشاء ملف سكريبت محلي يسمى httpd-foreground

#!/bin/bash
set -e
# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid
exec httpd -DFOREGROUND

赋予 httpd-foreground 文件可执行权限。

w3codebox@w3codebox:~/apache$ chmod +x httpd-foreground

通过 Dockerfile 创建一个镜像,替换成你自己的名字。

w3codebox@w3codebox:~/apache$ docker build -t httpd .

创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像。

w3codebox@w3codebox:~/apache$ docker images httpd
REPOSITORY     TAG        IMAGE ID        CREATED           SIZE
httpd          أحدث     da1536b4ef14    23 ثانية مضت    195.1 MB

استخدام صورة apache

تشغيل الحاوية

docker run -p 80:80 -v $PWD/www/:/usr/local/apache2/htdocs/ -v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v $PWD/logs/:/usr/local/apache2/logs/ -d httpd

شرح الأمر:

-p 80:80: تحويل منفذ 80 في الحاوية إلى منفذ 80 في المضيف.

-v $PWD/www/:/usr/local/apache2/htdocs/: تثبيت مجلد www الحالي في المضيف إلى /usr/local/apache2/htdocs/ في الحاوية.

-v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf: توصيل ملف conf/httpd.conf الحالي في المضيف إلى /usr/local/apache2/conf/httpd.conf في القفص.

-v $PWD/logs/:/usr/local/apache2/logs/: توصيل مجلد logs الحالي في المضيف إلى /usr/local/apache2/logs/ في القفص.

مراجعة حالة بدء القفص:

w3codebox@w3codebox:~/apache$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS ... NAMES
79a97f2aac37 httpd "httpd-foreground" ... 0.0.0.0:80->80/tcp sharp_swanson

زيارة عبر المتصفح

It works! https://ar.oldtoolbag.com