16강에서부터 이어진 내용이므로 ex03/webapp, ex03/conf 디렉토리 생성되어있는 것을 가정한다.

1. Dockerfile 작성

 1 FROM nginx
 2
 3 #COPY webapp /usr/share/nginx/html
 4 #COPY conf/nginx.conf /etc/nginx/conf.d/default.conf
 5
 6 ENTRYPOINT ["nginx", "-g", "daemon off;"]

아직 webapp과 conf에 들어갈 내용이 없으니까 일단 주석 처리 해주자.

 

2. Dockerfile build 및 컨테이너 실행

docker build -t nginx-server ./
docker run -d -p 8080:80 --name some-nginx nginx-server

 

3. default.conf 내용 가져오기

우리가 건드려야할 conf파일을 확인 후 base될 내용을 가져오자.

docker exec -it [CONTAINER ID] bash

실행한 컨테이너의 터미널에 접속한다.

cd /etc/nginx/conf.d

컨테이너의 터미널에 접속했으면 nginx의 default config파일이 있는 곳으로 이동한다.

cat default.conf

 

우리는 default.conf를 base로 하여 설정을 건드려야하므로 해당 내용을 복사해서 만들어둔 호스트의 conf 폴더로 가져오자.

server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

해당 내용을 복사 → 컨테이너 터미널 종료 → HOST의 conf디렉토리에 nginx.conf 파일을 생성한 후 복사한 내용을 붙여넣기한다.

 

이전 15 RUN명령어 강의에서 기본으로 제공되는 html을 바꾸기 위해서 ./index.nginx-debian.html 이렇게 변경하였는데 그때는 config 파일에 다르게 설정되어있어있어서 그렇다고 하심.

 

4. 기본페이지, 에러페이지 변경하기

우리가 참고할 설정들은 기본 location과 error가 발생했을 때 보여줄 location 이다.

해당 설정을 위해서는 설정파일의 7,17 번째 줄을 변경하면 된다.

에러페이지용 index는 17번째 줄을 보면 50x.html 이름으로 설정되어있고, 기본 location은 index.html로 설정되어있으므로 webapp에 index.html과 50x.html을 생성해준다. (둘다 경로는 /usr/share/nginx/html 로 동일한 것을 볼 수 있다.)

<h1>Error Page!!</h1>

50x.html

<h1>Welcome Nginx!!</h1>

index.html

 

5. Dockerfile 수정 및 재빌드

주석 처리해둔 COPY 명령어 부분을 주석해제 한 후 빌드를 다시 해주자.

  1 FROM nginx
  2
  3 COPY webapp /usr/share/nginx/html
  4 COPY conf/nginx.conf /etc/nginx/conf.d/default.conf
  5
  6 ENTRYPOINT ["nginx", "-g", "daemon off;"]

Dockerfile

 

docker build -t nginx-server:2.0 ./

빌드

 

docker run -d -p 8080:80 --name some-nginx nginx-server:2.0

실행

 

버그발생

docker ps -a  확인 결과 컨테이너가 강제 종료되는 현상

docker logs [CONTAINER ID] : 명령어로 로그를 보니 아래와 같은 로그가 출력되어있었다.

conf에 있는 nginx.conf 에 오타가 나와있어서 수정함!

 

다시 빌드해서 다시 실행시켜 보면 설정한 대로 동작하는 것을 볼 수 있다.

아직 50x 에러를 발생시킬 수 없어서 보여줄 수가 없다.

기본 페이지는 설정한 대로 제대로 뜬다.

 

컨테이너에 터미널로 접속해서 확인해봐도 설정한대로 잘 복사되었다.

설정파일도 제대로 복사된것을 알 수 있다.(/etc/nginx/conf.d/default.conf)

+ Recent posts