지금까지 배웠던 시스템(airflow, ngnix 등)을 docker로 수행해본다고 하셨다.
먼저 Ngnix
먼저 httpd 디렉토리 내에 Dockerfile은 아래와 같이 작성했다.
$ vi httpd/Dockerfile
FROM httpd:2.4
참고로 httpd 이미지를 사용하면 Apache HTTP Server를 설치하거나 별도로 설정할 필요 없이, 바로 컨테이너에서 웹 서버를 실행할 수 있다. 도커 이미지를 기반으로 쉽게 웹 애플리케이션을 배포하거나 테스트 환경을 구성할 수 있다.
빌드 및 실행 방법은 아래와 같다.
# 빌드
$ docker build -t my-apache2 docker/httpd/
# 실행
$ docker run --rm httpd:2.4 \
> cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf
이렇게하면 로컬에 my-httpd.conf 파일이 생긴다.
DocumentRoot "/usr/local/apache2/blog"
<Directory "/usr/local/apache2/blog">
이 부분 내용을 수정해준다.
FROM httpd:2.4
# docker build --build-arg REPO_URL=.....
ARG REPO_URL=https://github.com/sooj1n/sooj1n.github.io.git
COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf
RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "vim"]
RUN ["apt-get", "install", "-y", "git"]
RUN git clone ${REPO_URL} /usr/local/apache2/blog
이후 도커파일을 위와 같이 수정해주었다.
* ARG REPO_URL=https://github.com/sooj1n/sooj1n.github.io.git:
- REPO_URL이라는 이름의 빌드 아규먼트를 정의합니다. 기본값은 지정된 GitHub 리포지토리 URL입니다. 이 값은 도커 이미지를 빌드할 때 다른 URL로 변경할 수 있습니다.
* COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf:
- my-httpd.conf라는 로컬 설정 파일을 컨테이너 내의 Apache HTTP Server 설정 파일(httpd.conf)로 덮어씁니다. 이를 통해 웹 서버의 설정을 커스터마이징할 수 있습니다.
여러가지 새로운 옵션들을 알게됐다.
--rm : 컨테이너 중지 시 삭제가 실행된다.
위의 과정을 거치면 my-httpd.conf가 로컬에 생성된다.
-ro : readonly
읽기 전용으로 파일에 -v 옵션을 적용한다.
ex)
$ docker run -dit --name my-running-app -p 8949:80 \
-v "$PWD":/usr/local/apache2/blog/:ro \
--rm my-apache2
다음 ngnix 디렉토리의 파일들에 대한 설명이다.
-Dockerfile
FROM nginx:1.25.1
RUN ls
COPY ["default.conf", "/etc/nginx/conf.d"]
-default.conf
upstream blog_servers {
server blog-1:80;
server blog-2:80;
}
server {
listen 80;
location / {
proxy_pass http://blog_servers;
}
}
위의 ngnix 도커 파일을 빌드하기 위해 필요한 조건이 있다.
바로 server로 선언해놓은 blog-1, blog-2가 빌드 및 실행되고 있는 상태여야한다는 것 이다.
$ docker build -t blog docker/httpd/
$ docker run -d --name blog-1 --rm blog
$ docker run -d --name blog-2 --rm blog
그리고 다음과 같이 ngnix 서버를 구동시킨다.
여기서 --link를 통해 blog-1, blog-2를 연결시켜준다.
$ docker build -t lb docker/ngnix/
$ docker run -d --name ngix_lb -p 8949:80 --link blog-1 --link blog-2 --rm lb
$ curl http://localhost:8949
로 테스트하면 blog-1과 blog-2로그에 번갈아가며 200 OK 가 뜨는 것을 확인할 수 있다(하지만 50%의 확률은 아님)
ngnix의 default.conf를 다시 보면
server blog-1:80;
server blog-2:80;
이런 부분이 있다. 쿠버네틱스가 없을 때 수동으로 설정하는 부분이라고 생각하면 된다(고 한다.)
*Kubernetes(쿠버네틱스)
쿠버네틱스(Kubernetes)**는 컨테이너화된 애플리케이션을 자동으로 배포하고, 확장하며, 운영하는 오픈 소스 플랫폼입니다. 주로 컨테이너 오케스트레이션 도구로 사용되며, 여러 서버에서 동작하는 많은 컨테이너를 쉽게 관리할 수 있게 해 줍니다. Google에서 처음 개발하였고, 현재는 **클라우드 네이티브 컴퓨팅 재단(CNCF)**에서 관리하고 있습니다.
'playdata > daily' 카테고리의 다른 글
17주차 : Day 3 (10/30) (1) | 2024.10.31 |
---|---|
17주차 : Day 2 (10/29) (2) | 2024.10.29 |
16주차 : Day 1 (10/21) (1) | 2024.10.21 |
12주차 : Day 5 (9/27) (1) | 2024.09.30 |
12주차 : Day 4 (9/26) (0) | 2024.09.30 |