Server/NGINX

NGINX 서버 구성-도커 alpine이미지로 작은 서버구성하기

juhpark 2024. 4. 23. 23:51
반응형

Alpine Linux 이미지는 약 5MB의 사이즈 정도되는 정말 작은 경량의 리눅스 서버이다. NGINX를 구동하기 위한 최소한의 환경을 셋팅하고 활요하는 방법에 대해 설명하고자 한다.

 

Alpine리눅스 PULL

도커에서 다음의 명령어로 latest 태그를 가진 이미지를 다운로드 받는다.  사이즈는 약 7MB로 여기에 필요한 패키지들을 설치하여 경량의 NGINX 서버를 구성할 예정이다.

docker pull alpine

# 이미지 확인
docker images

 

Dockerfile 구성 및 이미지 생성

# 필요한 태그로 변경하여 원하는 이미지 다운로드
FROM alpine:edge                    

# 필요한 프로그램 설치
RUN apk add --no-cache vim nginx ca-certificates wget    

# 한글을 사용하기 위한 관련 패키지 설치 등
ARG GLIBC_VER="2.35-r1"
ARG ALPINE_GLIBC_REPO="https://github.com/sgerrand/alpine-pkg-glibc/releases/download"
ARG SGERRAND_RSA_SHA256="823b54589c93b02497f1ba4dc622eaef9c813e6b0f0ebbb2f771e32adf9f4ef2"
RUN apk add --no-cache --virtual .build-deps curl binutils zstd gcompat && \
    curl -LfsS https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub && \
    echo "${SGERRAND_RSA_SHA256} */etc/apk/keys/sgerrand.rsa.pub" | sha256sum -c - && \
    curl -LfsS ${ALPINE_GLIBC_REPO}/${GLIBC_VER}/glibc-${GLIBC_VER}.apk > /tmp/glibc-${GLIBC_VER}.apk && \
    apk add --force-overwrite --no-cache /tmp/glibc-${GLIBC_VER}.apk && \
    apk del gcompat && \
    curl -LfsS ${ALPINE_GLIBC_REPO}/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk > /tmp/glibc-bin-${GLIBC_VER}.apk && \
    apk add --no-cache /tmp/glibc-bin-${GLIBC_VER}.apk && \
    curl -Ls ${ALPINE_GLIBC_REPO}/${GLIBC_VER}/glibc-i18n-${GLIBC_VER}.apk > /tmp/glibc-i18n-${GLIBC_VER}.apk && \
    apk add --no-cache /tmp/glibc-i18n-${GLIBC_VER}.apk
RUN /usr/glibc-compat/bin/localedef -i ko_KR -f UTF-8 ko_KR.UTF-8
ENV LC_ALL=ko_KR.UTF-8
ENV LANG=ko_KR.UTF-8
ENV LANGUAGE=ko_KR.UTF-8

# nginx 데몬 실행
CMD ["nginx", "-g", "daemon off;"]

 

위 dockerfile 을 사용해서 이미지를 만들어 보자

docker build -t inginx:1.0 .

 

vim과 nginx를 설치한 이미지를 inginx:1.0 으로 생성되면 아래와 같이 확인이 가능하다. 7MB였던 사이즈가 38MB까지 증가 하였다.

 

컨테이너 실행하기

# 컨테이너 실행(-d: 데몬으로 실행, -p <외부포트>:<내부포트>)
docker run -it --name nginx -p 80:80 -d inginx:1.0

# 컨테이너 접속(bash는 설치를 안해서 sh로 접속)
docker exec -it nginx bash

 

웹브라우저에서 localhost 를 호출하면 404 Not Found 페이지가 호출되면 정상적으로 nginx 데몬이 실행된 것이다.

 

(환경설정) 도큐먼트 루트 설정하기

/etc/nginx/nginx.conf 파일의 설정을 살펴보면 웹루트에 대한 설정은 아래의 내용과 같이 /etc/nginx/conf.d 디렉토리 밑에 .conf로 끝나는 모든 화일을 읽게 되어 있다.

# Include files with config snippets into the root context.
include /etc/nginx/conf.d/*.conf;

 

해당 디렉토리 안에 보면 default.conf 파일이 존재하며 여기에서 웹루트 디렉토리를 아래와 같이 변경 가능하다.  location / 부분에 root 경로와 index 정보를 지정해 준다.

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # Everything is a 404
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

        # You may need this to prevent return 404 recursion.
        location = /404.html {
                internal;
        }
}

 

이후, default.conf 파일에 입력된 root 폴더(/usr/share/nginx/html) 아래에 Hello, World ! 텍스트를 가진 index.html 파일을  생성한다. 이후 아래 명령을 통해 환경설정을 다시 읽어 온다.

# 환경설정 리로드
nginx -s reload

 

아래와 같이  Hello, World ! 페이지를 정상적으로 보여주게 되면 성공 !!!

반응형