도커 설치 아파치



방법 1. Dockerfile을 통해 빌드

Dockerfile 만들기

먼저 나중에 관련된 내용을 저장할 apache 디렉터리를 만듭니다.

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

www 디렉토리는 아파치 컨테이너가 구성한 애플리케이션 디렉토리에 매핑됩니다.

logs 디렉토리는 아파치 컨테이너의 로그 디렉토리에 매핑됩니다.

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+! /proc/self/fd/1!g' \
		-e 's!^(\s*ErrorLog)\s+\S+! /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 파일에서 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 파일에 실행 권한을 부여하세요

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

Dockerfile을 통해 이미지를 생성하고 자신의 이름으로 바꿉니다

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

생성 후 완료되면 로컬 이미지 목록에서 방금 생성한 이미지를 찾을 수 있습니다.

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

방법 2, docker pull httpd

Docker Hub에서 httpd 이미지를 찾습니다

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

여기에서 공식 이미지를 가져옵니다

php@php:~/apache$ docker pull httpd

다운로드 후 완료되면 로컬 이미지 목록 미러에서 httpd로 REPOSITORY를 확인할 수 있습니다.


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/ :호스트의 현재 디렉터리에 있는 로그 디렉터리를 컨테이너의 /usr/local/apache2/logs/

컨테이너 시작 상태 보기

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

브라우저를 통해 액세스

1053.png