Docker 安装 Apache

方法一、docker pull httpd

查找 Docker Hub 上的 httpd 镜像:

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

此外,我们还可以用 docker search httpd 命令来查看可用版本:

runoob@runoob:~/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]

...

这里我们拉取官方的镜像

runoob@runoob:~/apache$ docker pull httpd

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

runoob@runoob:~/apache$ docker images httpd

REPOSITORY TAG IMAGE ID CREATED SIZE

httpd latest da1536b4ef14 23 seconds ago 195.1 MB

方法二、通过 Dockerfile 构建

创建 Dockerfile

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

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

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

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

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

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

runoob@runoob:~/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/。

查看容器启动情况:

runoob@runoob:~/apache$ docker ps

CONTAINER ID IMAGE COMMAND ... PORTS NAMES

79a97f2aac37 httpd "httpd-foreground" ... 0.0.0.0:80->80/tcp sharp_swanson

通过浏览器访问

apache2 docker 无法访问_Docker 安装 Apache相关推荐

  1. docker $PWD路径_Docker安装Jenkins+Shell脚本自动化部署项目

    本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料 Sentinel+Nacos 是 ...

  2. desktop docker 无法卸载_docker 安装教程和常见问题

    docker能干什么? 简单的说docker 是一个非常方便的环境搭建工具.比如想搭建一个mongodb服务,但是许多服务没有方便的安装包.这时你只需要5行命令就能完成三部搭建mongo,和mongo ...

  3. docker harbor 域名_docker 安装Harbor

    docker 安装harbor 1.下载镜像依赖docker pull vmware/harbor-jobservice:v1.1.2 docker pull vmware/harbor-ui:v1. ...

  4. docker+mysql+授权_docker安装mysql, 授权远程连接

    以最新版本实例 docker search mysql //查找mysql镜像 docker pull mysql:5.7 //拉取镜像 (指定版本号. 默认是latest, 去掉 " :5 ...

  5. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

  6. 2022年Docker安装Apache Airflow2.2分布式任务调度框架

    目录 一.Apache Airflow介绍 二.下载Airflow官方的docker-compose.yaml文件 三.开始安装 四.启动Apache Airflow 五.访问系统 六.Airflow ...

  7. Windows安装Apache注册服务出现(OS 5)拒绝访问。 : AH00369: Failed to open the Windows service manager,

    windows安装Apache,注册服务出现"(OS 5)拒绝访问. : AH00369: Failed to open the WinNT service manager..." ...

  8. docker $PWD路径_Docker 技术系列之安装Redis单机版和集群版

    欢迎关注刘哥讲技术.上一节我们讲到通过docker安装了多台的mysql,很简单,那么我们这一节,利用 Docker 在一台机器上部署多个 Redis 实例. 那么redis是什么呢?Redis 是一 ...

  9. 配置安装Apache主服务发生错误:(OS 5)拒绝访问。 : AH00369: Failed to open the Windows service manager, perh······

    配置安装Apache主服务发生错误:(OS 5)拒绝访问.  : AH00369: Failed to open the Windows service manager, perhaps you fo ...

最新文章

  1. c语言皮尔森系数程序,按条件选入观测;皮尔森相关系数
  2. Android四级缓存,RecyclerView的四级缓存-初探
  3. 【开发记录】Linux常用命令记录(一)
  4. 安装ruby1.9.3
  5. 面向切面编程:操作日志
  6. kafka笔记——入门介绍
  7. c51单片机时钟程序汇编语言,51单片机数字钟汇编程序精选.docx
  8. 视频录制后有噪音怎么办?教你简答几步去除视频噪音!
  9. AppBarLayoutCoordinatorLayoutBehavior
  10. 全渠道客户体验是什么?如何创建全渠道营销平台?
  11. 人工智能,机器学习与深度学习,到底是什么关系
  12. python 之 for 循环
  13. Tomcat是干嘛用的?企业级Tomcat部署实践及安全调优
  14. 北林嵌入式系统期末复习重点
  15. 四十七、批量操作数据
  16. 微信抢红包代码 python_Python实现的微信红包提醒功能示例
  17. ERP-非财务人员的财务培训教(三)------公司/部门预算编制与评价
  18. HomeKit独一家?米家、华为HiLink涿鹿群雄?不妨看看这款新晋品牌
  19. 【转】计算机科学经典之作。。。
  20. java整合openoffice实现word、execl、ppt转换为pdf

热门文章

  1. 什么是自动化运维?为什么选择Python做自动化运维?
  2. mysql动态变量_Mysql的变量一览
  3. Java程序设计实验(二):类的创建和封装实验
  4. 解决win10系统CPU占用过高【亲测非常有效】
  5. 型号不同的计算机内存条可以通用么,想知道电脑内存条不同品牌可以混用吗
  6. ppt怎么把图片做成翻书效果_手把手教你做图片翻书效果.ppt
  7. ADI Blackfin DSP处理器-BF533的开发详解59:DSP控制ADXL345三轴加速度传感器的应用2(含源码)
  8. mysql 家谱树查询_GitHub - chenwei/FamilyTreeView: 家谱树绘制Demo
  9. C++函数调用方式(_stdcall, _pascal, _cdecl...)总结
  10. 【Python】批量移动同类型文件到其他文件夹的办公技巧