Project

[Project] Docker Apache-Tomcat 구성 및 연동(gcp, docker-machine, dockerfile)

Nirsa 2020. 3. 18. 22:27
반응형

 

복습할겸, 앞으로의 프로젝트 목표를 기록할 겸 아주 조그만한 개인 프로젝트를 진행 하였습니다. (사실 아직 구축 환경과 규모가 너무 작아서 프로젝트라고 하기에도 민망하네요)

당장은 프로젝트라고 하기에도 민망한 아주 작은 규모지만 조금씩 늘려갈 생각이며, 최종 목표는 아래 플랫폼들을 사용하여 최종 프로젝트를 올해 안으로 완성 하는것으로 생각하고 있습니다.

  • AWS or OpenStack
  • Kubernetes
  • Docker
  • Ansible or Terraform
  • Git
  • Python or bash shell script (업무 자동화)
  • Zabbix or ELK
  • Rocket.Cha (사내 메신저 구현 및 모니터링 알람 수신)

이 외에 시간이 된다면 zimbra등을 사용하여 사내 메일 구현과 여러 서버들을 이중화하는것이 최종 목표 입니다.

 

  • Docker Apache-Tomcat 구성 환경

  • Cloud Platform : GCP
  • Private Registry : Google Container Registry
  • OS (Goole Compute Engine)
    • docker-machine : CentOS 7.7 1908
    • web, was1, was2 server : Ubuntu 16.04.2
  • Application
    • Docker-CE, Docker-Machine 
    • Apache-2.4.6 (web server 1ea)
    • tomcat-9.0.31 (was server 2ea)
    • openJDK-1.8.0.242.b08-0.el7_7.x86_64
    • modjk tomcat-connectors-1.2.46

 

전체적인 아키텍처와 이번 프로젝트 목표는 아래와 같습니다.

  1. GCE VM 인스턴스 1대에 docker-machine을 설치하며 필요한 VM 인스턴스는 docker-machine을 통해 docker-host provisioning
  2. docker-machine 서버는 ssh 접속으로 전체적인 컨트롤 서버 역할 수행 (Dockerfile은 Docker-Machine 서버에서 Google Container Registry로 업로드)
  3. Apache-Tomcat 연동 및 로드밸런싱을 구성(web 서버는 *.jsp에 대한 요청을 was1,2 서버에게 로드 밸런싱 )
  4. 모든 설치 및 설정은 Dockerfile 직접 작성하여 사용
  5. 제작된 context들은 모두 Google Container Registry에 보관

 

  • Dockerfile

# web1
FROM centos:7

RUN yum install -y httpd httpd-devel gcc gcc-c++ wget perl make &&  mkdir /worker
WORKDIR /worker/
RUN wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.46-src.tar.gz && tar zxvf tomcat-connectors-1.2.46-src.tar.gz
WORKDIR /worker/tomcat-connectors-1.2.46-src/native/
RUN ./configure --with-apxs=/bin/apxs \
        && make && make install \
        && sed -i 's/\#ServerName www.example.com:80/ServerName localhost/g' /etc/httpd/conf/httpd.conf \
        && touch /etc/httpd/conf/workers.properties \
        && echo -e "worker.list=loadbalancer\nworker.loadbalancer.type=lb\nworker.loadbalancer.balanced_workers=worker1,worker2\nworker.loadbalancer.sticky_session=1\n\nworker.worker1.type=ajp13\nworker.worker1.host=10.178.0.7\nworker.worker1.port=8010\nworker.worker1.lbfactor=1\n\nworker.worker2.type=ajp13\nworker.worker2.host=10.178.0.8\nworker.worker2.port=9010\nworker.worker2.lbfactor=1\n" > /etc/httpd/conf/workers.properties \
        && perl -p -i -e '$.==57 and print "LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so\n<IfModule jk_module>\n   JkWorkersFile /etc/httpd/conf/workers.properties\n   JkLogFile /var/log/httpd/mod_jk.log\n   JkLogLevel info\n   JkLogStampFormat \"[%a %b %d %H:%M:%S %Y]\"\n   JkMount /*.jsp loadbalancer\n</IfModule>"' /etc/httpd/conf/httpd.conf

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
EXPOSE 80
# was1
FROM centos:7

RUN yum -y update && yum install -y java-1.8.0-openjdk-devel.x86_64 wget perl
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
ENV export JAVA_HOME
ENV PATH=$PATH:$JAVA_HOME/bin
ENV export PATH

RUN wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz \
	&& tar zxvf apache-tomcat-9.0.31.tar.gz \
	&& mv apache-tomcat-9.0.31 /usr/local/tomcat9 \
	&& perl -p -i -e '$.==114 and print "    <Connector protocol=\"AJP/1.3\" secretRequired=\"false\" address=\"0.0.0.0\" port=\"8010\" redirectPort=\"8443\" />\n"' /usr/local/tomcat9/conf/server.xml \
	&& echo "hi worker1" > /usr/local/tomcat9/webapps/ROOT/index.jsp
    
ENTRYPOINT ["/usr/local/tomcat9/bin/catalina.sh", "run"]
EXPOSE 8010
# was2
FROM centos:7

RUN yum -y update && yum install -y java-1.8.0-openjdk-devel.x86_64 wget perl
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
ENV export JAVA_HOME
ENV PATH=$PATH:$JAVA_HOME/bin
ENV export PATH

RUN wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz \
	&& tar zxvf apache-tomcat-9.0.31.tar.gz \
	&& mv apache-tomcat-9.0.31 /usr/local/tomcat9 \
	&& perl -p -i -e '$.==114 and print "    <Connector protocol=\"AJP/1.3\" secretRequired=\"false\" address=\"0.0.0.0\" port=\"8010\" redirectPort=\"8443\" />\n"' /usr/local/tomcat9/conf/server.xml \
	&& echo "hi worker2" > /usr/local/tomcat9/webapps/ROOT/index.jsp
    
ENTRYPOINT ["/usr/local/tomcat9/bin/catalina.sh", "run"]
EXPOSE 9010

 

  • Google Container Registry

 

  • 서비스 확인

  • Apache

 

  • Tomcat Load Balancing

 

반응형

'Project' 카테고리의 다른 글

[Project] 개인 프로젝트 기록(4)  (5) 2020.04.06
[Project] 개인 프로젝트 기록 (3)  (3) 2020.03.30
[Project] 개인 프로젝트 기록 (2)  (6) 2020.03.23