이번에 위와 같은 환경을 세팅해보는 연습을 해보도록 하겠다.
모든 웹은 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 |