본문 바로가기
Programming/Docker

Docker 활용기(3) - 아파치 서버(httpd) 구성해보기

by ★용호★ 2017. 1. 16.

mod_jk.so 파일 생성

tar zxvf tomcat-connectors-1.2.37-src.tar.gz
cd tomcat-connectors-1.2.37-src/native
./configure --with-apxs=/usr/sbin/apxs
make 
make install

docker에 적용

아파치 웹서버의 official 이미지에 로드밸런싱을 위해 mod_jk를 사용하기 위해서는 Dockerfile에 위의 과정을 수행해주어야 한다. mod_jk.so 파일만 복사해서 사용해도 되지만 버전이 변경될 때마다 호스트에서 make 명령을 통해 생성해내는 과정을 거쳐야하기 때문에 make 과정까지 Dockerfile에서 수행하도록 하였다. tomcat connector 다운로드 페이지의 경로는 버전이 올라갈 때마다 바뀔 소지가 있으므로 특정 버전을 미리 다운로드 받은 후에 Dockerfile의 COPY 명령을 통해 복사를 해주었다. 그리고 tomcat-connectors를 빌드하기 위해 gcc와 make가 필요하므로 이를 사전에 설치해야한다. 그래서 아래와 같이 Dockerfile을 작성하였다.

FROM httpd:2.2
MAINTAINER Yongho Choi <yongho1037@gmail.com>

RUN apt-get update -y && apt-get install -y vim gcc make

# COPY ./modules/mod_jk.so /usr/local/apache2/modules/mod_jk.so
COPY ./modules/tomcat-connectors-1.2.42-src.tar.gz /opt/

RUN cd /opt && tar -xzf tomcat-connectors-1.2.42-src.tar.gz
RUN cd /opt/tomcat-connectors-1.2.42-src/native && ./configure --with-apxs=/usr/local/apache2/bin/apxs && make && make install
  • 여기서 configure 명령 실행 시 --with-apxs 옵션을 주지 않으면 WebServer를 찾을 수 없다는 오류가 발생한다. apxs 경로를 확인 하려면 which apxs 명령을 수행해본다.
  • mod_jk 설정을 위해서는 httpd.conf 파일에 아래와 같이 설정을 추가해주어야 한다.
LoadModule jk_module modules/mod_jk.so

JkWorkersFile conf/workers.properties
JkLogFile logs/jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

JkMount /* loadbalancer
  • 그 다음 위에 명시된 conf/workers.properties 파일을 생성하여 로드밸런싱 설정을 한다.
#
# You should configure your environment slash... ps=\ on NT and / on UNIX
# and maybe something different elsewhere.
#
ps=/

# loadbalancer setting
worker.list=loadbalancer

worker.instance1.port=18009
worker.instance1.host=192.168.0.x
worker.instance1.type=ajp13
worker.instance1.lbfactor=1
#worker.instance1.cachesize

worker.instance2.port=28009
worker.instance2.host=192.168.0.x
worker.instance2.type=ajp13
worker.instance2.lbfactor=1
#worker.instance1.cachesize

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=instance1,instance2
  • 위 설정파일을 미리 작성한 후 docker container를 생성할 때 마운트를 시켜서 호스트에서 파일을 변경하더라도 컨테이너에 반영될 수 있도록 하였다.
-v <기본 경로>/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf
-v <기본 경로>/conf/workers.properties:/usr/local/apache2/conf/workers.properties


댓글