Docker, k8s

Dokcer haproxy + httpdphp + wordpress + mysql 실습

우당탕탕인생기 2023. 9. 10. 22:45

이번에 위와 같은 환경을 세팅해보는 연습을 해보도록 하겠다.

모든 웹은 1번 서버의 haproxy, 로드밸런싱을 통해 분산되며, 이때 80포트는 nginx 서버로 가도록 , 8080포트는 wordpress와 연결되도록한다,

마지막 3번 서버는 mysql을 사용하여 wordpress와 연동한다.

 

 

아래는 작업순으로 작성하였다.


SERVER - 02 - (HTTPDHPH , WORDPRESS)

 

우선 첫번째는 fbsanchez/httpdphp 을 사용하여 php 웹서비스을 운영해보도록 하겠다.

포트는 아래와 같이 설정하였다.

포트포워딩 서비스
60080:80
60180:80
60280:80
httpdphp
8080:80
8081:80
8082:80
wordpress

 

 

https://hub.docker.com/r/fbsanchez/httpdphp

 

Docker

 

hub.docker.com

docker pull fbsanchez/httpdphp:latest  # httpdphp 이미지 파일 가져오기


## 컨테이너 3개 만들기 각각 volume을 이용하여 세팅 설정, 포트포워딩은 60080, 60180 , 60280으로 진행

docker run -itd -p 60080:80 -v s1:/var/www/html -v s1conf /etc/httpd/conf --name s1 fbsanchez/httpdphp
docker run -itd -p 60180:80 -v s2:/var/www/html -v s2conf:/etc/httpd/conf --name s2 fbsanchez/httpdphp
docker run -itd -p 60280:80 -v s3:/var/www/html -v s3conf:/etc/httpd/conf --name s3 fbsanchez/httpdphp


## httpdphp 내의 설정 파일 수정
 vi /var/lib/docker/volumes/s1conf/_data/httpd.conf
 vi /var/lib/docker/volumes/s2conf/_data/httpd.conf
 vi /var/lib/docker/volumes/s3conf/_data/httpd.conf
 
 
 ## wordpress 세팅
docker images wordpres  # wordpress 이미지 가져오기

##컨테이너 3개 만들기 포트포워딩은 8080 ,8081, 8082
docker run -itd --name w1 -p 8080:80  -e WORDPRESS_DB_HOST=10.0.0.3 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=password_here -e WORDPRESS_DB_NAME=wordpress wordpress
docker run -itd --name w2 -p 8081:80  -e WORDPRESS_DB_HOST=10.0.0.3 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=password_here -e WORDPRESS_DB_NAME=wordpress wordpress
docker run -itd --name w3 -p 8082:80  -e WORDPRESS_DB_HOST=10.0.0.3 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=password_here -e WORDPRESS_DB_NAME=wordpress wordpress

https://hub.docker.com/_/wordpress

docker wordpress 문법은 위 docs에 정리되어 있으니 참고하면 된다.

 

wordpress - Official Image | Docker Hub

Quick reference Supported tags and respective Dockerfile links 6.3.1-apache, 6.3-apache, 6-apache, apache, 6.3.1, 6.3, 6, latest, 6.3.1-php8.0-apache, 6.3-php8.0-apache, 6-php8.0-apache, php8.0-apache, 6.3.1-php8.0, 6.3-php8.0, 6-php8.0, php8.0 6.3.1-fpm,

hub.docker.com

그 결과 아래와 같이 컨테이너가 실행되고 있다.


SERVER-03 : MYSQL(DB)

 

이때는 mysql5.7 community 버전을 위해 추가적인 세팅이 필요하다

그리고  docker run 당시 네트워크를 host로 하여 docker에서 부여하는 ip가 아닌 실제 pc의 ip가 사용된다. 이에 3306 포트를 열어주는 작업이 필요하다.

#mysql-community 버전을 위한 작업

yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 
vi /etc/yum.repos.d/mysql-community.repo ## 해당 파일에서 gpgcheck=0 으로 변경해준다.
yum install -y mysql-community-client


docker pull mysql:5.7 #mysql 5.7 version 이미지 가져오기


# mysql 컨테이너 만들기 mysql의 경우는 네트워크를 호스트로하여 해당 pc의 ip을 사용하게하였다.
docker run -itd --net host -e MYSQL_ROOT_PASSWORD=password_here --name mysql mysql:5.7


# 네트워크를 호스트로 했기때문에, mysql 관련 포트를 열어줘야 한다.
firewall-cmd --add-port=3306/tcp

 

 


SEVER - 01(HAPROXY)

이제 마지막으로 haproxy를 통해 로드밸런스 작업을 해보도록 하겠다.

이번에는 총 10.0.0.1:80 -> 웹 서비스 , 10.0.0.1:8080 -> wordpress 로 접속되도록 할 것이다.

 

yum install -y haproxy

vi /etc/haproxy/haproxy.cfg

############## 편집모드 진입

## 10.0.0.1:80 환경세틍
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

#    use_backend static          if url_static
    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 10.0.0.2:60080 check  ## 웹1
    server  app2 10.0.0.2:60180 check  ## 웹2
    server  app3 10.0.0.2:60280 check  ## 웹3
#------------------------------------------------------------------

##########################################################################


## 10.0.0.1:8080 환경세팅

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main1 *:8080  # 포트 80808, main은 위의 80포트에 이름으로 쓰이고 있으니 변경
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

#    use_backend static          if url_static
    default_backend             wapp	#app 역시 위의 80포트에서 사용하고 있으니 변경

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend wapp
    balance     roundrobin
    server  wapp1 10.0.0.2:8080 check  #워드프레스 1번
    server  wapp2 10.0.0.2:8081 check  #워드프레스 2번
    server  wapp3 10.0.0.2:8082 check  #워드프레스 3번
#------------------------------------------------------------------

이제 80, 8080 포트를 열고 systemctl haproxy을 해주면 된다.

 


10.0.0.1:80 - 웹 서비스

 

10.0.0.1:8080 - wordpress

 

 

하나의 서버의 7개의 웹서비스와 wordpress을 하는데 docker을 사용하다보니 확실히 가볍고 빠르게 만들 수 있게 되었다!

 

 

'Docker, k8s' 카테고리의 다른 글

k8s_ Pod 생성, Pod접속 , Service, Namespace  (0) 2023.09.12
k8s_Kubernetes  (0) 2023.09.12
Docker image build  (0) 2023.09.11
Cotainer 파일 복사 및 볼륨  (0) 2023.09.07
Docker 의 개념 및 기본 명령어  (0) 2023.09.07