Docker를 이용하여 웹 사이트 구축 하기

DOCKER를 이용한 웹 서비스

특정 서비스를 10대의 서버에서 제공한다고 가정하자.
WEB 서버와 WAS서버의 셋팅을 서버당 4시간씩 예상하고(네트워크 설정, OS설치, 프로그램 설치, ETC…) 2명의 엔지니어가 하루 8시간씩 일을 한다고 했을 경우 약 3일 정도 필요 하다.

만약 가상화 서버를 이용한다면, 최초의 인스턴스만 생성하고 복제를 하면 된다. 최초 인스턴스 생성을 위한 이미지 생성에 5시간을 예상하고 인스턴스 생성은 5분도 걸리지 않는다. 또한 서비스의 확장이나 축소가 아주 적은 비용으로 처리가 가능하다.

다음의 칼럼을 확인하면 해당 내역을 좀더 알기 쉽게 설명 하였다.
클라우드가 왜 필요할까?

NGINX + TOMCAT + MARIADB

WHY NGINX?

WEB 서버로 NGINX를 선택한 이유는 2가지 이다.
1. 빠른 속도 – APACHE 와 NGINX 속도 비교
2. 쉬운 설정 – TOMCAT과 LOAD BALANCER
3. 내가 한번도 안써봐서. – NGINX 는 현재 가장 핫한 WEB 서버이다. APACHE의 아성을 넘보는 상태이기도 하고 많은 곳에서 APACHE에서 NGINX로 넘어가고 있다.

DOCKER 가상화 서버 구축
  • MariaDB 서버 구축
    Dockerfile를 이용한 간단한 구축을 추천 한다. 우선 github에서 관련 파일을 받는다.
  1. 준비 하기
$> git clone https://github.com/lahuman/CentOS-Dockerfiles/tree/master/mariadb/centos7
  1. 독커 이미지 생성 진행
    • --rm 이미지 생성 성공시 컨테이너를 제거
    • -t 이미지에 대한 이름 설정
$> docker build --rm -t <yourname>/mariadb .
  1. DATA VOLUME CONTAINER 생성 – 최초 한번만 생성
    • --name 컨테이너 명 설정
    • -v 연결할 값 설정
$> docker run --name=mariadb-data -v /var/lib/mysql <yourname>/mariadb true
  1. MariaDB 초기 설정 – 최초 한번만 생성
    • --volumes-form 설정된 컨테이너의 볼륨과 연결
$> docker run -rm --volumes-from=mariadb-data <yourname>/mariadb /config_mariadb.sh
  1. MariaDB 컨테이너 생성 – ** 이 컨테이너에 대하여 START/STOP 처리 **
    • -d 백그라운드로 실행
    • -p host_port:container_port 연결
$> docker run --name=mariadb -d -p 3306:3306 --volumes-from=mariadb-data <yourname>/mariadb
  1. 연결 테스트
$> docker exec -it mariadb-doc4sm /bin/bash

#> /usr/bin/mysql -uroot -p mysql

  • TOMCAT 서버 구축 & DBMS 연동
  1. 준비사항
    • JDK 1.8
    • TOMCAT 8

docker에서 tar.gz 파일을 복사할 경우 압축이 풀린 상태로 표출 되는 버그가 있어 압축을 풀고 해당 디렉토리에 대한 복사를 추천한다.

  1. docker 이미지 생성
  • Dockerfile
FROM centos:centos7
MAINTAINER LAHUMAN <lahuman1@gmail.com>

RUN yum -y update; yum clean all
RUN yum -y install epel-release tar ; yum clean all

ADD apache-tomcat-8.0.21 /usr/local/apache-tomcat-8.0.21
ADD jdk1.8.0_40 /usr/local/jdk1.8.0_40

ADD server.xml /usr/local/apache-tomcat-8.0.21/conf/server.xml

ENV JAVA_HOME /usr/local/jdk1.8.0_40

RUN mkdir /data

EXPOSE 8080
EXPOSE 8009

VOLUME /data
  • 이미지 생성
docker build --rm -t <image name> .
  1. 컨테이너 생성 & 기동
    • -h 컨테이너 호스트 이름 설정
    • --mac-address 맥 주소 설정
    • --link 연결할 컨테이너명:내부에서 사용할 명칭
    • -v host path:container path 를 연결
    • -t 허위 TTY 허용
    • -i 상호작용 설정
      > -it 옵션을 이용하여야 /bin/bash 를 이용하는데 문제가 없음
$> docker run --name doc4sm1 -h lahuman --mac-address 02-42-AC-11-00-62 --link mariadb-doc4sm:mariadb -d -it -v /home/docker/doc4sm/data:/data  --privileged=true  lahuman/doc4sm:centos7 /usr/local/apache-tomcat-8.0.21/bin/catalina.sh run

$> docker run --name doc4sm2 -h lahuman --mac-address 02-42-AC-11-00-62 --link mariadb-doc4sm:mariadb -d -it -v /home/docker/doc4sm/data:/data  --privileged=true  lahuman/doc4sm:centos7 /usr/local/apache-tomcat-8.0.21/bin/catalina.sh run

  • NGINX 서버 구축 & TOMCAT 연동
    1. 준비사항
      Dockerfile
   FROM centos:centos7
MAINTAINER The CentOS Project <cloud-ops@centos.org>

RUN yum -y update; yum clean all
RUN yum -y install epel-release tar ; yum clean all
RUN yum -y install nginx ; yum clean all
ADD nginx.conf /etc/nginx/nginx.conf
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl https://git.centos.org/sources/httpd/c7/acf5cccf4afaecf3afeb18c50ae59fd5c6504910 
    | tar -xz -C /usr/share/nginx/html 
    --strip-components=1
RUN sed -i -e 's/Apache/nginx/g' -e '/apache_pb.gif/d' 
    /usr/share/nginx/html/index.html

RUN mkdir /webapp

EXPOSE 80

VOLUME /webapp

CMD [ "/usr/sbin/nginx" ]
  1. 이미지 생성
  • nginx 설정 변경
    #doc4sm
    upstream doc4sm_servers{
        ip_hash;
        server doc4sm1:8080;
        server doc4sm2:8080;

    }
    server {
        listen  80;
        server_name doc4sm.lahuman.pe.kr;

        location / {
                proxy_pass http://doc4sm_servers;
        }
    }

정말 간단하게 2대의 톰켓 was를 load balancer 한다.

  • 이미지 생성 명령어
docker build -rm -t lahuman/home:centos7 .
  1. 컨테이너 생성 & 기동
docker run --name lahuman --link doc4sm1:doc4sm1 --link doc4sm2:doc4sm2 -d -p 80:80 -v /home/docker/lahuman.pe.kr/webapp:/webapp  --privileged=true  lahuman/home:centos7

GITHUB 참고

Docker 맛보기

docker

Docker 사용하기

What is Dcoker?

Docker는 개발자와 시스템 관리자가 어플리케이션에 대한 빌드, 실행, 배포를 지원하는 오픈 소스 플랫폼 입니다. Docker 엔진은 휴대성, 가벼운 실행환경과 묶음 툴로 구성되어 있고,Docker Hub는 어플리케이션 공유와, 자동화된 흐름을 제공합니다. 개발자, QA 그리고 제품의 환경에 사이에 마찰을 제거 하고 컴포넌트 집합을 Docker를 통해 앱에서 가능하도록 합니다. 결과적으로 변경 없이 컴퓨터, 가상머신과 클라우드에서 같은 어플리케이션을 실행합니다.
Build Ship Run
Build Ship Run
어떤한 언어, 툴을 Docker 컨테이너를 사용하여 개발 응용 프로그램과 의존성을 묶어서 배송 멈춤 없이 변경 및 수정 가능

Installing Docker

기본적으로 Docker 명령어는 root 계정으로 실행 하여야 합니다.

  • CentOS-7 에 Docker 설치
$ sudo yum install docker
  • Docker 데몬 실행
$ sudo service docker start

만약 OS 가 부팅 되었을때 데몬이 실행되기 원한다면:

$ sudo chkconfig docker on
  • 이제 도커 설치는 완료 되었다. 처음으로 centos의 마지막 버젼의 이미지를 로컬에 받아보자.
$ sudo docker pull centos
  • 다운이 완료 되었다면, 다음 명령어로 다운 받은 이미지를 확인 해보자:
$ sudo docker images centos

결과는 아마 다음과 비슷할 것이다:

$ sudo docker images centos
REPOSITORY      TAG             IMAGE ID          CREATED             VIRTUAL SIZE
centos          latest          0b443ba03958      2 hours ago         297.6 MB
  • 간단하게 bash shell로 이미지를 실행 해보자:
$ sudo docker run -i -t centos /bin/bash

만약 문제가 없었다면, bash prompt를 확인 할 수 있을 것이다. exit 를 입력하면 빠져 나올 것이다.

여기까지가 Docker의 기본 사용법 입니다 상위 내용은 Docker.com 에서 확인 가능합니다.

추천 링크 (한글사랑)

도커(Docker) 튜토리얼 : 깐 김에 배포까지

도커 무작정 따라하기