Я новичок в докере, и я работаю над докеризацией и развертыванием моего приложения на внутреннем сервере на работе.
Структура состоит в том, что у меня есть Dockerfile для моего сервера реагирования + nginx и флягибэкенд. Затем я использую docker-compose для объединения этих Dockerfiles. Я следовал формату, который ранее написали другие люди на моей работе, поэтому я не до конца понимаю все аспекты. Меня особенно смущает роль nginx. Dockerfile, который содержит и response, и nginx, выглядит следующим образом:
FROM node:latest as building
RUN npm config set proxy <proxy for my company>
RUN npm config set https-proxy <proxy for my company>
WORKDIR /app
ENV PATH /node_modules/.bin:$PATH
COPY package.json /app/
COPY ./ /app/
RUN npm install
RUN npm install react-scripts@3.0.1 -g
RUN npm run build
FROM nginx
RUN rm -rf /etc/nginx/conf.d
COPY deployment/nginx.conf /etc/nginx/nginx.conf
COPY --from=building /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
, а мой настроенный файл nginx.conf выглядит как
user root;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
server {
server_name <internal_server_box>
;
listen [::]:80;
listen 80;
root /usr/share/nginx/html;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
location /v1 {
proxy_pass <backend_container>:5000;
}
}
client_max_body_size 2M;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr [$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;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
Я не уверен, что nginx делает здесь, потому что я все еще могусделайте это приложение доступным извне, просто установив приложение реакции без nginx. Я где-то читал, что это может быть своего рода шлюзом, но мне это было непонятно. Было бы здорово, если бы кто-нибудь мог объяснить, почему нам нужен nginx для настройки сервера, а мы можем просто его установить (сделать его доступным вне коробки внутреннего сервера) без него.