Prechádzať zdrojové kódy

nginx-flask-mongo: add dev envs support (#268)

Signed-off-by: Milas Bowman <milas.bowman@docker.com>
Milas Bowman 3 rokov pred
rodič
commit
c172cd7f01

+ 27 - 0
nginx-flask-mongo/.docker/docker-compose.yaml

@@ -0,0 +1,27 @@
+services:
+  web:
+    image: nginx
+    volumes:
+      - ./nginx/nginx.conf:/tmp/nginx.conf
+    environment: 
+      - FLASK_SERVER_ADDR=backend:9091  
+    command: /bin/bash -c "envsubst < /tmp/nginx.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" 
+    ports:
+      - 80:80
+    depends_on:
+      - backend
+
+  backend:
+    build:
+      context: flask
+      target: dev-envs
+    stop_signal: SIGINT
+    environment:
+      - FLASK_SERVER_PORT=9091
+    volumes:
+      - /var/run/docker.sock:/var/run/docker.sock
+    depends_on:
+      -  mongo  
+
+  mongo:
+    image: mongo

+ 11 - 0
nginx-flask-mongo/README.md

@@ -69,3 +69,14 @@ Stop and remove the containers
 ```
 $ docker compose down
 ```
+
+## Use with Docker Development Environments
+
+You can use this sample with the Dev Environments feature of Docker Desktop.
+
+![Screenshot of creating a Dev Environment in Docker Desktop](../dev-envs.png)
+
+To develop directly on the services inside containers, use the HTTPS Git url of the sample:
+```
+https://github.com/docker/awesome-compose/tree/master/nginx-flask-mongo
+```

+ 9 - 2
nginx-flask-mongo/compose.yaml

@@ -10,13 +10,20 @@ services:
       - 80:80
     depends_on:
       - backend
+
   backend:
-    build: flask
-    environment: 
+    build:
+      context: flask
+      target: builder
+    # flask requires SIGINT to stop gracefully
+    # (default stop signal from Compose is SIGTERM)
+    stop_signal: SIGINT
+    environment:
       - FLASK_SERVER_PORT=9091
     volumes:
       - ./flask:/src
     depends_on:
       -  mongo  
+
   mongo:
     image: mongo

+ 24 - 3
nginx-flask-mongo/flask/Dockerfile

@@ -1,7 +1,28 @@
-FROM python:3.7
+# syntax=docker/dockerfile:1.4
+FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder
 
 WORKDIR /src
+COPY requirements.txt /src
+RUN --mount=type=cache,target=/root/.cache/pip \
+    pip3 install -r requirements.txt
+
 COPY . .
-RUN pip install -r requirements.txt --no-cache-dir
 
-CMD ["./server.py"]
+CMD ["python3", "server.py"]
+
+FROM builder as dev-envs
+
+RUN <<EOF
+apk update
+apk add git
+EOF
+
+RUN <<EOF
+addgroup -S docker
+adduser -S --shell /bin/bash --ingroup docker vscode
+EOF
+
+# install Docker tools (cli, buildx, compose)
+COPY --from=gloursdocker/docker / /
+
+CMD ["python3", "server.py"]