playdata/daily

17주차 : Day 1 (10/28)

soojin1 2024. 10. 28. 21:02

 


지금까지 배웠던 시스템(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