IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

二十九、Docker 安装 Apache

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

文章永久连接:https://tech.souyunku.com/?p=5105

Apache 是当下最流行的 Web 服务器软件之一,有时候也称之为 httpd,是因为 Apache 的守护进程名为 httpd。Docker 安装 apache 的方式有两种

如果你是 Docker 初学者,如果你以后长期使用 httpd ,我们建议你两种方法都试一试,为什么呢?

原因很简单,没有经过优化,你会发现自己使用 Dockerfile 构建的容器都大于官方给的容器,因此,如果你有兴趣,可以研究为啥官方给的镜像总是小于我们自己的镜像

1. docker pull httpd

如果想以最简单的方式安装 Apache, 可以直接使用 docker pull httpd 命令

流程如下

1、 查找 Docker Hub 上的 httpd 镜像

    [root@localhost ~]# docker search httpd
    NAME    ...    OFFICIAL  ...
    httpd   ...    [OK]      ... 
    ...     ...    ...       ...
    ...     ...    ...       ...
列表很多,我们推荐你使用 `OFFICIAL = OK` 的那一条

2、 拉取官方最新的 httpd 镜像

    [root@localhost ~]# docker pull httpd
    Using default tag: latest
    ...

3、 稍等片刻,下载完成后就可以在本地镜像列表里看到 httpd 的镜像了

    [root@localhost apache]# docker images httpd
    REPOSITORY     TAG        IMAGE ID        CREATED           SIZE
    httpd          latest     fb2f3851a971    4 weeks ago       177.5 MB

2. 通过 Dockerfile 文件构建

如果你是运维工程师,我们推荐你使用 Dockerfile 文件构建 httpd 镜像

因为可以加深对安装 apache 的理解

现在,我们一步一步使用 Dockerfile 文件构建 httpd 镜像吧

1、 创建目录 apache 用于存放后面的相关东西

    [root@localhost ~]#  mkdir -p  ~/apache/www
    [root@localhost ~]#  mkdir -p  ~/apache/logs
    [root@localhost ~]#  mkdir -p  ~/apache/conf
<table> 
 <thead> 
  <tr> 
   <th align="left">目录</th> 
   <th align="left">说明</th> 
  </tr> 
 </thead> 
 <tbody> 
  <tr> 
   <td align="left">www</td> 
   <td align="left">该目录将映射为 apache 容器配置的应用程序目录</td> 
  </tr> 
  <tr> 
   <td align="left">logs</td> 
   <td align="left">该目录将映射为 apache 容器的日志目录</td> 
  </tr> 
  <tr> 
   <td align="left">conf</td> 
   <td align="left">该目录下的配置文件将映射为apache容器的配置文件</td> 
  </tr> 
 </tbody> 
</table>

2、 进入创建的 apache 目录,创建文件 httpd-foreground 文件作为启动 apache 的脚本文件

    [root@localhost ~]# cd apache
    [root@localhost ~]# touch httpd-foreground
然后输入以下内容
    # !/bin/sh
    # 去掉第一行 # ! 之间的空格
    set -e

    # Apache gets grumpy about PID files pre-existing
    rm -f /usr/local/apache2/logs/httpd.pid

    exec httpd -DFOREGROUND
赋予 `httpd-foreground` 文件可执行权限
    [root@localhost ~]# chmod +x httpd-foreground

3、 进入创建的 apache 目录,创建 Dockerfile

    [root@localhost apache]# touch Dockerfile
然后输入以下内容
    FROM debian:jessie-backports

    # 添加组和用户
    #RUN groupadd -r www-data && useradd -r --create-home -g www-data www-data

    # 设置编译环境变量
    ENV HTTPD_PREFIX /usr/local/apache2
    ENV PATH $HTTPD_PREFIX/bin:$PATH
    RUN mkdir -p "$HTTPD_PREFIX" \
        && chown www-data:www-data "$HTTPD_PREFIX"
    WORKDIR $HTTPD_PREFIX

    # library for mod_http2
    ENV NGHTTP2_VERSION 1.18.1-1
    ENV OPENSSL_VERSION 1.0.2l-1~bpo8+1
    RUN { \
            echo 'deb http://deb.debian.org/debian stretch main'; \
        } > /etc/apt/sources.list.d/stretch.list \
        && { \
    # add a negative "Pin-Priority" so that we never ever get packages from stretch unless we explicitly request them
            echo 'Package: *'; \
            echo 'Pin: release n=stretch'; \
            echo 'Pin-Priority: -10'; \
            echo; \
    # except nghttp2, which is the reason we're here
            echo 'Package: libnghttp2*'; \
            echo "Pin: version $NGHTTP2_VERSION"; \
            echo 'Pin-Priority: 990'; \
            echo; \
        } > /etc/apt/preferences.d/unstable-nghttp2

    # 安装编译依赖
    RUN apt-get update \
        && apt-get install -y --no-install-recommends \
            libapr1 \
            libaprutil1 \
            libaprutil1-ldap \
            libapr1-dev \
            libaprutil1-dev \
            liblua5.2-0 \
            libnghttp2-14=$NGHTTP2_VERSION \
            libpcre++0 \
            libssl1.0.0=$OPENSSL_VERSION \
            libxml2 \
        && rm -r /var/lib/apt/lists/*

    ENV HTTPD_VERSION 2.4.33
    ENV HTTPD_SHA256 de02511859b00d17845b9abdd1f975d5ccb5d0b280c567da5bf2ad4b70846f05

    # 设置 Apache httpd 镜像地址,我们使用的请清华镜像地址
    ENV APACHE_DIST_URLS http://mirrors.hust.edu.cn/apache/

    # 安装 apache httpd 编译依赖
    RUN set -eux; \
        \
        # mod_http2 mod_lua mod_proxy_html mod_xml2enc
        # https://anonscm.debian.org/cgit/pkg-apache/apache2.git/tree/debian/control?id=adb6f181257af28ee67af15fc49d2699a0080d4c
        buildDeps=" \
            bzip2 \
            ca-certificates \
            dpkg-dev \
            gcc \
            liblua5.2-dev \
            libnghttp2-dev=$NGHTTP2_VERSION \
            libpcre++-dev \
            libssl-dev=$OPENSSL_VERSION \
            libxml2-dev \
            zlib1g-dev \
            make \
            wget \
        "; \
        apt-get update; \
        apt-get install -y --no-install-recommends -V $buildDeps; \
        rm -r /var/lib/apt/lists/*; \
        \
        ddist() { \
            local f="$1"; shift; \
            local distFile="$1"; shift; \
            local success=; \
            local distUrl=; \
            if wget -O "$f" "$APACHE_DIST_URLS$distFile" && [ -s "$f" ]; then \
                success=1; \
                break; \
            fi; \
            [ -n "$success" ]; \
        }; \
        \
        ddist 'httpd.tar.bz2' "httpd/httpd-$HTTPD_VERSION.tar.bz2"; \
        \
        mkdir -p src; \
        tar -xf httpd.tar.bz2 -C src --strip-components=1; \
        rm httpd.tar.bz2; \
        cd src; \
        \
        gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
        ./configure \
            --build="$gnuArch" \
            --prefix="$HTTPD_PREFIX" \
            --enable-mods-shared=reallyall \
            --enable-mpms-shared=all \
        ; \
        make -j "$(nproc)"; \
        make install; \
        \
        cd ..; \
        rm -r src man manual; \
        \
        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"]
`COPY httpd-foreground /usr/local/bin/` 是将当前目录下的 `httpd-foreground` 拷贝到镜像里,作为 httpd 服务的启动脚本

相比较于官方给的 [Dockerfile][], 我们更改了以下几点:

1.  去掉镜像自动匹配,而是选择 **清华镜像** ( [http://mirrors.hust.edu.cn/apache/][http_mirrors.hust.edu.cn_apache] )
2.  去掉 `GPG` 校验
3.  移除了 `PATCHES` 补丁包

4、 通过 Dockerfile 文件创建一个 httpd 镜像 mhttpd ,名字你可以随意取,一般使用小写字母

    [root@localhost apache]# docker build -t mhttpd .

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

    [root@localhost apache]# docker images mhttpd
    REPOSITORY     TAG        IMAGE ID        CREATED           SIZE
    mhttpd         latest     417fa0258ae8    11 days ago       177.5 MB

这次两个镜像竟然出奇的一样大小

运行容器

1、 创建 index.html 文件

输入以下命令创建 `index.html`
    vi www/index.html
输入以下内容
    <!DOCTYPE html>
    <meta charset="UTF-8" />
    <h2>Hello 搜云库技术团队</h2>

2、 运行容器

输入以下命令运行容器
    docker run -it --name ms-apache-app -p 8080:80 -v "$PWD/www":/usr/local/apache2/htdocs/ httpd:latest
命令说明

1.  `-p 80:80`

    将容器的 `80` 端口映射到主机的 `8080` 端口
2.  `-v $PWD/www/:/usr/local/apache2/htdocs/`

    将主机中当前目录下的 www 目录挂载到容器的 /usr/local/apache2/htdocs/

如果要以守护进程的方式运行,可以将 `-it` 改成 `-dit`

通过浏览器访问 http://localhost:8080/ 可以看到

img_1.png

apache.png

查看容器启动情况

[root@localhost apache]# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
5159c65260e3        httpd:latest        "httpd-foreground"   11 days ago         Up About a minute   0.0.0.0:8080->80/tcp   ms-apache-app

如果添加了 -d 以守护进程的方式运行,那么就要使用

[root@localhost apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
5159c65260e3        httpd:latest        "httpd-foreground"   11 days ago         Up About a minute   0.0.0.0:8080->80/tcp   ms-apache-app

关闭 ms-apache-app 容器

[root@localhost apache]# docker stop ms-apache-app

移除 ms-apache-app 容器

[root@localhost apache]# docker rm ms-apache-app

干货推荐

本站推荐:精选优质专栏

附录:Docker 教程:系列文章


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(74) 打赏



未经允许不得转载:搜云库技术团队 » 二十九、Docker 安装 Apache

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367