arch.ruaniz.com

Scott.Lee, Application Architect

centos.7.base:1.1

build image > create container

01. build image mobon/centos.7.base:1.1(mobon/centos.7.base:latest) based docker.io/centos:7

make directory
$ mkdir -p /apps/docker/images

create dockerize file
$ vi /apps/docker/images/centos.7.base/Dockerfile

FROM docker.io/centos:7

RUN yum clean all\
 && yum repolist \
 && yum -y update \
 && sed -i "s/en_US/all/" /etc/yum.conf \
 && yum -y reinstall glibc-common

RUN yum install -y net-tools iproute wget \
# && yum -y install tar unzip vi vim telnet curl openssl \
# && yum -y install apr apr-util apr-devel apr-util-devel \
# && yum -y install elinks locate python-setuptools \
# && yum -y bind-utils \
 && yum clean all

ENV LANG=ko_KR.utf8 TZ=Asia/Seoul

# create group/user : app/app
RUN groupadd -g 3000 app
RUN useradd -d /apps -g 3000 -m -u 3000 -s /bin/bash app

# create basic directory 
RUN mkdir -p /pgms /data /logs
RUN chown -R app.app /pgms /data /logs

USER app
WORKDIR /apps

# create install directory 
RUN mkdir -p /apps/install

# 컨테이너 실행시 실행될 명령
CMD /bin/bash

build/create docker image
$ docker build -t mobon/centos.7.base:latest -f /apps/docker/images/centos.7.base/Dockerfile .

$ docker build -t mobon/centos.7.base:1.1 -t mobon/centos.7.base:latest -f /apps/docker/images/centos.7.base/Dockerfile .
$ docker image tag mobon/centos.7.base:1.1 mobon/centos.7.base:latest

push image to docker private registry
$ docker tag mobon/centos.7.base:latest docker-registry.mobon.net:5000/mobon/centos.7.base:latest
$ docker push docker-registry.mobon.net:5000/mobon/centos.7.base:latest

02. create private network - mobon.subnet

$ docker network create –driver=bridge –subnet=192.168.104.0/24 –gateway=192.168.104.10 mobon.subnet

03. create containers base mobon/centos.7.base:1.1

$ docker run –net mobon.subnet –ip 192.168.104.51 –ulimit memlock=-1 –name mobon.elasticsearch.01 -d -it mobon/centos.7.base:1.1

$ docker run –net mobon.subnet –ip 192.168.104.52 –ulimit memlock=-1 –name mobon.elasticsearch.02 -d -it mobon/centos.7.base:1.1

$ docker run –net mobon.subnet –ip 192.168.104.41 –name mobon.mongodb.01 -d -it mobon/centos.7.base:1.1

$ docker run –net mobon.subnet –ip 192.168.104.42 –name mobon.mongodb.02 -d -it mobon/centos.7.base:1.1

$ docker run –net mobon.subnet –ip 192.168.104.43 –name mobon.mongodb.03 -d -it mobon/centos.7.base:1.1

create container > create image > create container

01. create base.container

create container base centos:7 - centos.7.app
$ docker run -d -it –name centos.7.app centos:7 /bin/bash
$ docker exec -it centos.7.app /bin/bash

$ docker run –privileged –name centos.7.app -d centos:7 init

–privileged
give extended privileges to this container (container에서 host의 linux kernel 기능을 모두 사용)

$ docker exec -it centos.7.app /bin/bash #systemctl –version

install utility package
$ yum install -y net-tools
$ yum install -y iproute

create group/user : app
$ groupadd -g 3000 app
$ useradd -d /apps -g 3000 -m -u 3000 -s /bin/bash app
$ passwd app

create directory
$ su - app

$ mkdir -p /apps/install
$ mkdir -p /pgms
$ mkdir -p /data
$ mkdir -p /logs

02. create image from base.container - mobon/apps.server:1.1

$ docker commit -a “sjlee@ruaniz.com” -m “create image from centos.7.app container” centos.7.app mobon/apps.server:1.1

03. create private network - mobon.subnet

$ docker network create –driver=bridge –subnet=192.168.104.0/24 –gateway=192.168.104.10 mobon.subnet

04. create containers base mobon/apps.server:1.1

$ docker run –net mobon.subnet –ip 192.168.104.51 –ulimit memlock=-1 –name mobon.elasticsearch.01 -d -it mobon/apps.server:1.1

$ docker run –net mobon.subnet –ip 192.168.104.52 –ulimit memlock=-1 –name mobon.elasticsearch.02 -d -it mobon/apps.server:1.1

$ docker run –net mobon.subnet –ip 192.168.104.41 –name mobon.mongodb.01 -d -it mobon/apps.server:1.1

$ docker run –net mobon.subnet –ip 192.168.104.42 –name mobon.mongodb.02 -d -it mobon/apps.server:1.1

$ docker run –net mobon.subnet –ip 192.168.104.43 –name mobon.mongodb.03 -d -it mobon/apps.server:1.1

java.app.env:1.1

build image

01. build image mobon/java.app.env:1.1(mobon/java.app.env:latest) based mobon/centos.7.base:latest

create dockerize file
$ vi /apps/docker/images/java.app.env/Dockerfile

FROM docker-registry.mobon.net:5000/mobon/centos.7.base:latest
# FROM mobon/centos.7.base:latest

USER root

RUN yum -y install unzip

USER app

# install and setup application
WORKDIR /apps/install

# install java development kit
RUN curl -O https://download.java.net/java/GA/jdk12.0.2/e482c34c86bd4bf8b56c0b35558996b9/10/GPL/openjdk-12.0.2_linux-x64_bin.tar.gz
RUN tar xvf openjdk-12.0.2_linux-x64_bin.tar.gz

RUN mkdir /apps/jdk
RUN mv /apps/install/jdk-12.0.2 /apps/jdk/12.0.2

# install gradle
RUN curl -O https://downloads.gradle-dn.com/distributions/gradle-5.6.2-bin.zip
RUN unzip gradle-5.6.2-bin.zip

RUN mkdir -p /apps/gradle
RUN mv /apps/install/gradle-5.6.2 /apps/gradle/5.6.2

USER root

# set env java development kit
RUN echo 'export JAVA_HOME=/apps/jdk/12.0.2' >> /etc/profile.d/java.sh
RUN echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile.d/java.sh
RUN echo 'export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' >> /etc/profile.d/java.sh

# set env gradle
RUN echo 'export GRADLE_HOME=/apps/gradle/5.6.2' >> /etc/profile.d/gradle.sh
RUN echo 'export PATH=$PATH:$GRADLE_HOME/bin' >> /etc/profile.d/gradle.sh

RUN source /etc/profile

USER app

# 컨테이너 실행시 실행될 명령
CMD /bin/bash

build/create docker image
$ docker build -t mobon/java.app.env:latest -f /apps/docker/images/java.app.env/Dockerfile .

$ docker build -t mobon/java.app.env:1.1 -t mobon/java.app.env:latest -f /apps/docker/images/java.app.env/Dockerfile . $ docker image tag mobon/java.app.env:1.1 mobon/java.app.env:latest

create docker service container
$ docker run –name mobon.service.01 -d -p 8080:8080 -it mobon/java.app.env:latest

$ docker run –net mobon.subnet –ip 192.168.104.91 –name mobon.service.01 -d -p 8080:8080 -p 18080:18080 -it mobon/java.app.env:latest

$ docker exec -it mobon.service.01 /bin/bash

push image to docker private registry
$ docker tag mobon/java.app.env:latest docker-registry.mobon.net:5000/mobon/java.app.env:latest
$ docker push docker-registry.mobon.net:5000/mobon/java.app.env:latest

java.app.ext:1.1

build image

01. build image mobon/java.app.ext:1.1(mobon/java.app.ext:latest) based mobon/java.app.env:latest

create dockerize file
$ vi /apps/docker/images/java.app.ext/Dockerfile

FROM docker-registry.mobon.net:5000/mobon/java.app.env:latest 
# FROM mobon/java.app.env:latest

# install and setup application
WORKDIR /apps/install

# install scouter agent
RUN wget https://github.com/scouter-project/scouter/releases/download/v2.7.0/scouter-min-2.7.0.tar.gz
RUN tar xvf scouter-min-2.7.0.tar.gz

RUN mkdir /apps/scouter
RUN mv /apps/install/scouter /apps/scouter/2.7.0

# set host agent
RUN mv /apps/scouter/2.7.0/agent.host/conf/scouter.conf /apps/scouter/2.7.0/agent.host/conf/scouter.conf.org
RUN echo '### scouter host configruation sample' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo 'net_collector_ip=192.168.100.8' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#net_collector_udp_port=6100' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#net_collector_tcp_port=6100' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#cpu_warning_pct=80' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#cpu_fatal_pct=85' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#cpu_check_period_ms=60000' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#cpu_fatal_history=3' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#cpu_alert_interval_ms=300000' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#disk_warning_pct=88' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf
RUN echo '#disk_fatal_pct=92' >> /apps/scouter/2.7.0/agent.host/conf/scouter.conf

RUN cd /apps/scouter/2.7.0/agent.host; ./host.sh;

# set java agent
# RUN cp /apps/scouter/2.7.0/agent.java/conf/scouter.conf /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '### scouter java agent configuration sample' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#obj_name=mdev-was-01-product' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '# Scouter Server IP Address (Default : 127.0.0.1)' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo 'net_collector_ip=172.20.108' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '# Scouter Server Port (Default : 6100)' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#net_collector_udp_port=6100' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#net_collector_tcp_port=6100' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#hook_method_patterns=sample.mybiz.*Biz.*,sample.service.*Service.*' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo 'trace_http_client_ip_header_key=X-Forwarded-For' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#profile_spring_controller_method_parameter_enabled=false' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#hook_exception_class_patterns=my.exception.TypedException' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#profile_fullstack_hooked_exception_enabled=true' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#hook_exception_handler_method_patterns=my.AbstractAPIController.fallbackHandler,my.ApiExceptionLoggingFilter.handleNotFoundErrorResponse' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#hook_exception_hanlder_exclude_class_patterns=exception.BizException' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '### HTTP header/parameter profile' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo 'profile_http_parameter_enabled=true' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo 'profile_http_header_enabled=true' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '### ignore low response time(ms)' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo 'xlog_lower_bound_time_ms=300' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '### method profile' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#hook_method_patterns=com.xxx.controller*.*,com.xxx.service*.*,com.xxx.dao*.*' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf
RUN echo '#hook_method_ignore_classes=com.xxx.dto*.*' >> /apps/scouter/2.7.0/agent.java/conf/scouter-product.conf

#scouter.agent.java
RUN export SCOUTER_DIR=/apps/scouter/2.7.0  
RUN export JAVA_OPTS="$JAVA_OPTS -javaagent:$SCOUTER_DIR/agent.java/scouter.agent.jar"
RUN export JAVA_OPTS="$JAVA_OPTS -Dscouter.config=$SCOUTER_DIR/agent.java/conf/scouter-product.conf"
RUN export JAVA_OPTS="$JAVA_OPTS -Dobj_name=product-01"

RUN java $JAVA_OPTSD -jar ./mobon.gateway.aggregation.service-1.0.0.jar

build/create docker image
$ docker build -t mobon/java.app.ext:latest -f /apps/docker/images/java.app.ext/Dockerfile .

$ docker build -t mobon/java.app.ext:1.1 -t mobon/java.app.ext:latest -f /apps/docker/images/java.app.ext/Dockerfile . $ docker image tag mobon/java.app.ext:1.1 mobon/java.app.ext:latest

create docker service container
$ docker run –name mobon.service.01 -d -p 8080:8080 -it mobon/java.app.ext:latest

$ docker run –net mobon.subnet –ip 192.168.104.91 –name mobon.service.01 -d -p 8080:8080 -p 18080:18080 -it mobon/java.app.ext:latest

$ docker exec -it mobon.service.01 /bin/bash

push image to docker private registry
$ docker tag mobon/java.app.ext:latest docker-registry.mobon.net:5000/mobon/java.app.ext:latest
$ docker push docker-registry.mobon.net:5000/mobon/java.app.ext:latest

node.app.env:1.1

build image

01. build image mobon/node.app.env:1.1(mobon/node.app.env:latest) based docker.io/node

make directory
$ mkdir -p /apps/docker/images

create dockerize file
$ vi /apps/docker/images/node.app.env/Dockerfile

FROM docker.io/node

## create group/user : app/app
#RUN groupadd -g 3000 app
#RUN useradd -d /apps -g 3000 -m -u 3000 -s /bin/bash app

RUN mkdir -p /pgms /data /logs
#RUN chown -R app.app /pgms /data /logs

#USER app

WORKDIR /apps

# create directory 
RUN mkdir -p /apps/install

# 컨테이너 실행시 실행될 명령
CMD /bin/bash

build/create docker image
$ docker build -t mobon/node.app.env:latest -f /apps/docker/images/node.app.env/Dockerfile .

$ docker build -t mobon/node.app.env:1.1 -t mobon/node.app.env:latest -f /apps/docker/images/node.app.env/Dockerfile .
$ docker image tag mobon/node.app.env:1.1 mobon/node.app.env:latest

push image to docker private registry
$ docker tag mobon/node.app.env:latest docker-registry.mobon.net:5000/mobon/node.app.env:latest
$ docker push docker-registry.mobon.net:5000/mobon/node.app.env:latest

node.app.ext:1.1

build image

01. build image mobon/node.app.ext:1.1(mobon/node.app.ext:latest) based mobon/node.app.env:latest

create dockerize file
$ vi /apps/docker/images/node.app.ext/Dockerfile

FROM docker-registry.mobon.net:5000/mobon/node.app.env:latest 
# FROM mobon/node.app.env:latest

# install and setup application
WORKDIR /apps/install

#USER root

ENV DEBIAN_FRONTEND teletype

# Before adding Influx repository, run this so that apt will be able to read the repository.
RUN apt-get update && apt-get install -y --no-install-recommends apt-utils
RUN apt-get install -y sudo apt-transport-https

# Add the InfluxData key
RUN curl -sL https://repos.influxdata.com/influxdb.key | apt-key add -
#RUN wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -

RUN echo "deb https://repos.influxdata.com/debian $(. /etc/os-release; echo $VERSION_CODENAME) stable" | tee /etc/apt/sources.list.d/influxdb.list
#RUN cat /etc/apt/sources.list.d/influxdb.list

# install and start the Telegraf service
RUN apt-get update && apt-get install -y telegraf
#RUN service telegraf start
#RUN systemctl start telegraf

#USER app

build/create docker image
$ docker build -t mobon/node.app.ext:latest -f /apps/docker/images/node.app.ext/Dockerfile .

$ docker build –no-cache -t mobon/node.app.ext:latest -f /apps/docker/images/node.app.ext/Dockerfile .
$ docker build -t mobon/node.app.ext:1.1 -t mobon/node.app.ext:latest -f /apps/docker/images/node.app.ext/Dockerfile .
$ docker image tag mobon/node.app.ext:1.1 mobon/node.app.ext:latest

create docker service container
$ docker run –name mobon.service.01 -d -p 8080:8080 -it mobon/node.app.ext:latest

$ docker run –net mobon.subnet –ip 192.168.104.91 –name mobon.service.01 -d -p 8080:8080 -p 18080:18080 -it mobon/node.app.ext:latest

$ docker exec -it mobon.service.01 /bin/bash

push image to docker private registry
$ docker tag mobon/node.app.ext:latest docker-registry.mobon.net:5000/mobon/node.app.ext:latest
$ docker push docker-registry.mobon.net:5000/mobon/node.app.ext:latest

elasticsearch

elasticsearch cluster

redis

redis cluster