阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Docker 安装 Apache

      Docker 安装 Apache

      方法一、docker pull httpd

      查找 Docker Hub 上的 httpd 镜像

      axihe@axihe:~/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 on centos with mo...   0                [OK]
      ...
      
      

      这里我们拉取官方的镜像

      axihe@axihe:~/apache$ docker pull httpd
      

      等待下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为 httpd 的镜像。

      axihe@axihe:~/apache$ docker images httpd
      REPOSITORY     TAG        IMAGE ID        CREATED           SIZE
      httpd          latest     da1536b4ef14    23 seconds ago    195.1 MB
      
      

      方法二、通过 Dockerfile 构建

      创建 Dockerfile

      首先,创建目录 apache, 用于存放后面的相关东西。

      axihe@axihe:~$ 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 文件可执行权限

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

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

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

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

      axihe@axihe:~/apache$ docker images httpd
      REPOSITORY     TAG        IMAGE ID        CREATED           SIZE
      httpd          latest     da1536b4ef14    23 seconds ago    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/

      查看容器启动情况

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

      通过浏览器访问

      扩展阅读

      卖前端学习教程

      只需几十元,就能买到培训班的内部教程!开启高薪之路!

      零基础小白阿里P7的教程都有!

      同时长期收购所有培训班的前端教程

      目录
      目录