объем для локальной стадии разработки - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь добавить 2 тома для локального этапа разработки . Если я не нацеливаюсь на стадию разработки и просто оставляю ее по умолчанию на производстве, она работает нормально, даже копируя каталог сборки в контейнер Nginx, но это всего лишь CRA, поскольку он выходит из коробки

Появляется анонимный том для пустых узловых модулей , и я попытался удалить его, чтобы убедиться, что он продолжает воссоздавать его при каждом запуске ... но я никогда не вижу, чтобы он оставлял React Установка в локальный том. Если я прикрепляю оболочку к тому же изображению, она там. Но когда он пытается запустить сервер разработки, он сообщает, что не может найти пакет . json. Какой вид имеет смысл, если в текущем каталоге его нет и он сопоставлен с тем, что было бы в контейнере, он должен скрывать пакет. json вместе со всем остальным в этом же каталоге.

Я добавил скриншоты внизу из обоих контейнеров .. Один из docker -compose сообщает мне, что не может найти пакет. json Тот, что прямо из изображения показывает, что он там. Поэтому я считаю, что это должно быть отображение тома поверх него.

Чего я не понимаю, так это почему он не оставляет установку в локальном каталоге? Я знаю, что кое-что не переносится с одного этапа на другой, но он даже не начинает устанавливать CRA до второго этапа, и он не отображается в моем локальном каталоге. способ узловых модулей .

. В большинстве уроков рекомендуется сначала запускать CRA локально, поэтому в нем есть пакет. json для копирования, но я пытаюсь запустите все это в контейнере, чтобы не было узлов и модулей на моей локальной машине. Просто запустите установки в контейнере и храните артефакт установки локально.

https://github.com/TurtleWolf/DockerReact/issues/3

docker -compose.yml

version: "2.4"

services:
  client:
    # image: turtlewolfe/docker_react:nginxproduction
    image: turtlewolfe/docker_react:dev
    build:
      context: .
      target: dev
    container_name: client
    environment:
      NODE_ENV: development
    ports:
      - "80:80"
    volumes:
      - .:/client/this_app
      - /client/this_app/node_modules
    # - ./client:/client/app
    # - /client/app/node_modules
    # networks:
    #   - traefik-public
    labels:
      - org.opencontainers.image.authors=TurtleWolfe.com
      # - org.opencontainers.image.created=$CREATED_DATE
      # - org.opencontainers.image.revision=$SOURCE_COMMIT
      - org.opencontainers.image.title="DockerReact"
      - org.opencontainers.image.url=https://hub.docker.com/TurtleWolfe/DockerReact
      - org.opencontainers.image.source=https://github.com/TurtleWolf/DockerReact
      - org.opencontainers.image.licenses=MIT
      # - com.TurtleWolfe.nodeversion=$NODE_VERSION
    tty: true
    # stdin_open: true
    # command: dlv debug --accept-multiclient --continue --headless --listen=:2345 --api-version=2 --log ./cmd/api/

Dockerfile

####################################################################
########            Stage 1 (production base)         ##############
####################################################################

# 1. Use the node apline image as the base stage of a multi-stage routine
# FROM node:13.7.0-alpine as base
FROM node:12.16.1-stretch-slim as base
# This gets our prod dependencies installed and out of the way

# 7. Provide meta data about the port the container must expose
# set this with shell variables at build-time.
# If they aren't set, then not-set will be default.
ARG CREATED_DATE=April2020
ARG SOURCE_COMMIT=not-set
# labels from https://github.com/opencontainers/image-spec/blob/master/annotations.md
LABEL org.opencontainers.image.authors=TurtleWolfe.com
LABEL org.opencontainers.image.created=$CREATED_DATE
LABEL org.opencontainers.image.revision=$SOURCE_COMMIT
LABEL org.opencontainers.image.title="DockerReact"
LABEL org.opencontainers.image.url=https://hub.docker.com/TurtleWolfe/DockerReact
LABEL org.opencontainers.image.source=https://github.com/TurtleWolf/DockerReact
LABEL org.opencontainers.image.licenses=MIT
LABEL com.TurtleWolfe.nodeversion=$NODE_VERSION
EXPOSE 3000
COPY .bashrc /home/node

# 2. Set the working directory to /client
WORKDIR /client

# # 3. Copy both package.json and package-lock.json into /client in the image's filesystem
# COPY package*.json ./
# COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]

# # 4. Install only the production node_modules and clean up the cache
# RUN npm ci \
#     && npm cache clean --force

RUN apt-get update \
    && mkdir this_app \
    && chown -R node:node . \
    && apt-get install curl -y \
    && npm config list
# node comes with a default user
# USER node
# we use npm ci here so only the package-lock.json file is used
RUN npm config list \
    # && npm ci \
    && npx create-react-app this_app \
    && npm cache clean --force
WORKDIR /client/this_app


####################################################################
########                  Development STAGE                 ########
####################################################################
## Stage 2 (development)
# we don't COPY in this stage because for dev you'll bind-mount anyway
# this saves time when building locally for dev via docker-compose
# 5. Extend the base stage and create a new stage named dev
FROM base as dev

# 6. Set the NODE_ENV and PATH Environment variables
ENV NODE_ENV=development
ENV PATH /client/this_app/node_modules/.bin:$PATH
# ENV PATH /client/this_app/node_modules/.bin:$PATH


# 8. Create a new /app directory in /client
# RUN mkdir /client/this_app

# 9. Install development dependencies
# RUN npm install --only=development --silent
RUN npm i --only=development \
    && npm cache clean --force

# 24. Patch create-react-app bug preventing self-signed certificate usage
# https://github.com/facebook/create-react-app/issues/8075
# COPY patch.js /client/node_modules/react-dev-utils/webpackHotDevClient.js

# 24. Print npm configuration for debugging purposes
RUN npm config list

# 12. Set the working directory to /client/app
WORKDIR /client/this_app

# ENTRYPOINT [ "/sbin/tini", "--"]
# 13. Provide the default command for the development container
CMD ["npm", "run", "start"]
# CMD ["npm", "run", "start", "--inspect=0.0.0.0:9229"]



####################################################################
########                  Source STAGE                  ############
####################################################################
## Stage 3 (copy in source)
# This gets our source code into builder for use in next two stages
# It gets its own stage so we don't have to copy twice
# this stage starts from the first one and skips the last two
FROM base as source
WORKDIR /client/this_app
# COPY . .
# RUN rm -r proxy

# 14. Extend the dev stage and create a new stage called test
FROM dev as test

# 15. Copy the remainder of the client folder source code into the image's filesystem
COPY . .

# 16. Run node_module vulnerability checks
# RUN npm audit

# 17. Run unit tests in CI
RUN CI=true npm test --env=jsdom


####################################################################
########                  Testing STAGE                  ###########
####################################################################
# ## Stage 4 (testing)
# # use this in automated CI
# # it has prod and dev npm dependencies
# # In 18.09 or older builder, this will always run
# # In BuildKit, this will be skipped by default 
# FROM source as test
# ENV NODE_ENV=development
# ENV PATH=/opt/node_modules/.bin:$PATH
# # this copies all dependencies (prod+dev)
# COPY --from=dev /opt/node_modules /opt/node_modules
# # run linters as part of build
# # be sure they are installed with devDependencies
# RUN eslint . 
# # run unit tests as part of build
# RUN npm test
# # run integration testing with docker-compose later
# WORKDIR /opt/this_app
# CMD ["npm", "run", "int-test"] 


####################################################################
########                  Security STAGE                  ##########
####################################################################
# ## Stage 5 (security scanning and audit)
# FROM test as audit
# RUN npm audit
# # aqua microscanner, which needs a token for API access
# # note this isn't super secret, so we'll use an ARG here
# # https://github.com/aquasecurity/microscanner
# ARG MICROSCANNER_TOKEN
# ADD https://get.aquasec.com/microscanner /
# RUN chmod +x /microscanner
# RUN apk add --no-cache ca-certificates && update-ca-certificates
# RUN /microscanner $MICROSCANNER_TOKEN --continue-on-failure


####################################################################
########                   BUILD STAGE                       #######
####################################################################
# 18. Extend the test stage and create a new stage named build-stage
FROM test as build-stage

# 19. Build the production static assets
RUN npm run build

# 20. Install aquasecurity's trivy for robust image scanning
FROM aquasec/trivy:0.4.3 as trivy

# 21. Scan the nginx alpine image before production use
RUN trivy nginx:1.17-alpine && \
    echo "No image vulnerabilities" > result

####################################################################
########                  PRODUCTION STAGE                  ########
####################################################################
# ## Stage 6 (default, production)
# # this will run by default if you don't include a target
# # it has prod-only dependencies
# # In BuildKit, this is skipped for dev and test stages

# 22. Extend the nginx apline image and create a new stage named prod
FROM nginx:1.17-alpine as prod

# 23. Copy only the files we want from a few stages into the prod stage
COPY --from=trivy result secure
COPY --from=build-stage /client/this_app/build /usr/share/nginx/html
# COPY .bashrc /home/node

# 24. Copy non-root user nginx configuration
# https://hub.docker.com/_/nginx
# COPY --from=build-stage /client/this_app/nginx /etc/nginx/

# 25. Provide meta data about the port the container must expose
EXPOSE 80

# 26. Define how Docker should test the container to check that it is still working
# HEALTHCHECK CMD [ "wget", "-q", "0.0.0.0:80" ]
CMD ["nginx", "-g", "daemon off;"]

Screenshot from 2020-05-03 10-53-48 (copy) Screenshot from 2020-05-03 10-54-14 (copy) вы можете увидеть его, добавив node_modules, , где находится пакет . json и остальные React App ? Screenshot from 2020-05-03 10-47-14

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...