docker file - nginx 설정 복사
도커 허브의 다음 내용을 참고하여 Dockerfile을 작성한다.
전체 구조
- ex03/conf/nginx.conf
: 실제 nginx 컨테이너의 설정 파일을 복사해 커스텀한 파일 - ex03/webapp/50x.html
: 실제 nginx의 error_page 파일을 복사해 커스텀한 파일 - ex03/webapp/index.html
: nginx에 추가할 index.html 파일
nginx.conf
etc/nginx/nginx.conf
실제 동작하는 nginx 컨테이너의 설정파일 내용은 다음과 같다.
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
- include /etc/nginx/conf.d/*.conf;
: /etc/nginx/conf.d/ 디렉토리에 있는 모든 .conf 확장자를 가진 파일을 포함한다.- 이를 통해 사용자가 사용자 정의 설정을 추가할 수 있다.
/etc/nginx/conf.d/default.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;
#}
}
- server { ... }
: 서버 블록의 시작을 나타낸다.- 이 블록은 특정 서버의 설정을 정의한다.
- listen 80;
: 80번 포트에서 들어오는 HTTP 요청을 처리한다. - server_name localhost;
: 해당 서버 블록이 처리할 호스트 이름을 지정한다.- 여기서는 "localhost"로 설정되어 있다.
- location / { ... }
: "/" 경로에 대한 설정을 지정한다.- 이 부분에서는 정적 파일 제공과 관련된 설정이 이루어진다.
- root /usr/share/nginx/html;
: 정적 파일들의 기본 디렉토리를 지정한다.- 여기서는 "/usr/share/nginx/html"로 설정되어 있다.
- index index.html index.htm;
: 디렉토리 내에서 기본으로 제공될 파일의 우선순위를 지정한다.- 여기서는 "index.html" 또는 "index.htm" 파일을 우선적으로 제공하도록 설정되어 있다.
- error_page 500 502 503 504 /50x.html;
: 500, 502, 503, 504 에러가 발생할 경우 "/50x.html" 페이지로 리다이렉트한다. - location = /50x.html { ... }
: "/50x.html" 경로에 대한 설정을 지정한다. - root /usr/share/nginx/html;
: 해당 경로에서 "/50x.html" 파일을 제공한다. - 주석 처리된 부분들
: PHP 스크립트를 처리하거나 .htaccess 파일에 대한 설정 등을 담고 있다.- 주석 처리되어 있어 해당 설정들은 현재 사용되지 않는다.
위의 설정을 통해 해당 서버는 80번 포트에서 들어오는 요청을 처리하며, "/" 경로에 대해 정적 파일을 제공하고 있다.
또한, 특정 에러 상황에서는 리다이렉트가 수행될 수 있다.
추가적인 PHP 스크립트 처리나 .htaccess 파일 관련 설정은 주석 처리되어 있어 현재 사용되지 않는다.
nginx 설정 파일을 복사하기 위해서는 default.conf 파일을 복사해야 한다.
직접 생성한 nginx.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;
}
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
}
webapp
50x.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Error Page</h1>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Welcome Nginx</h1>
</body>
</html>
Dockerfile
위 내용들을 토대로 Dockerfile을 다음과 같이 작성한다.
FROM nginx
COPY webapp /usr/share/nginx/html
COPY conf/nginx.conf /etc/nginx/conf.d/default.conf
ENTRYPOINT ["nginx", "-g", "daemon off;"]
실행
'Docker' 카테고리의 다른 글
docker file - nginx 게이트웨이 사용하기 (0) | 2023.06.25 |
---|---|
docker file - nginx를 로비 서버로 활용하기 (0) | 2023.06.25 |
docker file - nginx 내부구성 (0) | 2023.06.24 |
docker file - RUN 명령어 (0) | 2023.06.24 |
docker file - Entrypoint & Work (0) | 2023.06.23 |