From 0afa084158e7e61e601270aef2241d65fa92e56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Franco=20Uechi?= Date: Tue, 21 Mar 2017 12:21:53 -0300 Subject: [PATCH] Add docker support to python flask (#5133) * added supporting files for Dockerfile and dockerignore generation for python-flask lang * documenting how to build the docker image and how to spin up a container * updating pet store sample --- .../languages/FlaskConnexionCodegen.java | 2 + .../flaskConnexion/Dockerfile.mustache | 31 ++++++++ .../resources/flaskConnexion/README.mustache | 12 ++++ .../flaskConnexion/dockerignore.mustache | 72 +++++++++++++++++++ .../petstore/flaskConnexion/.dockerignore | 72 +++++++++++++++++++ .../server/petstore/flaskConnexion/Dockerfile | 16 +++++ .../server/petstore/flaskConnexion/README.md | 12 ++++ .../swagger_server/swagger/swagger.yaml | 2 +- 8 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-codegen/src/main/resources/flaskConnexion/Dockerfile.mustache create mode 100644 modules/swagger-codegen/src/main/resources/flaskConnexion/dockerignore.mustache create mode 100644 samples/server/petstore/flaskConnexion/.dockerignore create mode 100644 samples/server/petstore/flaskConnexion/Dockerfile diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlaskConnexionCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlaskConnexionCodegen.java index 050f21b8eff9..de16d24b6c9a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlaskConnexionCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlaskConnexionCodegen.java @@ -107,6 +107,8 @@ public class FlaskConnexionCodegen extends DefaultCodegen implements CodegenConf supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh")); supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore")); supportingFiles.add(new SupportingFile("travis.mustache", "", ".travis.yml")); + supportingFiles.add(new SupportingFile("Dockerfile.mustache", "", "Dockerfile")); + supportingFiles.add(new SupportingFile("dockerignore.mustache", "", ".dockerignore")); cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "python package name (convention: snake_case).") .defaultValue("swagger_server")); diff --git a/modules/swagger-codegen/src/main/resources/flaskConnexion/Dockerfile.mustache b/modules/swagger-codegen/src/main/resources/flaskConnexion/Dockerfile.mustache new file mode 100644 index 000000000000..f040d41ad6ce --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/flaskConnexion/Dockerfile.mustache @@ -0,0 +1,31 @@ +{{#supportPython2}} +FROM python:2-alpine +{{/supportPython2}} +{{^supportPython2}} +FROM python:3-alpine +{{/supportPython2}} + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +COPY requirements.txt /usr/src/app/ + +{{#supportPython2}} +RUN pip install --no-cache-dir -r requirements.txt +{{/supportPython2}} +{{^supportPython2}} +RUN pip3 install --no-cache-dir -r requirements.txt +{{/supportPython2}} + +COPY . /usr/src/app + +EXPOSE {{serverPort}} + +{{#supportPython2}} +ENTRYPOINT ["python"] +{{/supportPython2}} +{{^supportPython2}} +ENTRYPOINT ["python3"] +{{/supportPython2}} + +CMD ["-m", "{{packageName}}"] \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/flaskConnexion/README.mustache b/modules/swagger-codegen/src/main/resources/flaskConnexion/README.mustache index e01093b6780e..b73b9e311b07 100644 --- a/modules/swagger-codegen/src/main/resources/flaskConnexion/README.mustache +++ b/modules/swagger-codegen/src/main/resources/flaskConnexion/README.mustache @@ -46,3 +46,15 @@ To launch the integration tests, use tox: sudo pip install tox tox ``` + +## Running with Docker + +To run the server on a Docker container, please execute the following from the root directory: + +```bash +# building the image +docker build -t {{packageName}} . + +# starting up a container +docker run -p {{serverPort}}:{{serverPort}} {{packageName}} +``` \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/flaskConnexion/dockerignore.mustache b/modules/swagger-codegen/src/main/resources/flaskConnexion/dockerignore.mustache new file mode 100644 index 000000000000..cdd823e64e7e --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/flaskConnexion/dockerignore.mustache @@ -0,0 +1,72 @@ +.travis.yaml +.swagger-codegen-ignore +README.md +tox.ini +git_push.sh +test-requirements.txt +setup.py + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ +venv/ +.python-version + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +#Ipython Notebook +.ipynb_checkpoints diff --git a/samples/server/petstore/flaskConnexion/.dockerignore b/samples/server/petstore/flaskConnexion/.dockerignore new file mode 100644 index 000000000000..cdd823e64e7e --- /dev/null +++ b/samples/server/petstore/flaskConnexion/.dockerignore @@ -0,0 +1,72 @@ +.travis.yaml +.swagger-codegen-ignore +README.md +tox.ini +git_push.sh +test-requirements.txt +setup.py + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ +venv/ +.python-version + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +#Ipython Notebook +.ipynb_checkpoints diff --git a/samples/server/petstore/flaskConnexion/Dockerfile b/samples/server/petstore/flaskConnexion/Dockerfile new file mode 100644 index 000000000000..eb5704f64144 --- /dev/null +++ b/samples/server/petstore/flaskConnexion/Dockerfile @@ -0,0 +1,16 @@ +FROM python:3-alpine + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +COPY requirements.txt /usr/src/app/ + +RUN pip3 install --no-cache-dir -r requirements.txt + +COPY . /usr/src/app + +EXPOSE 8080 + +ENTRYPOINT ["python3"] + +CMD ["-m", "swagger_server"] \ No newline at end of file diff --git a/samples/server/petstore/flaskConnexion/README.md b/samples/server/petstore/flaskConnexion/README.md index 9effb404b08f..000d12df5829 100644 --- a/samples/server/petstore/flaskConnexion/README.md +++ b/samples/server/petstore/flaskConnexion/README.md @@ -35,3 +35,15 @@ To launch the integration tests, use tox: sudo pip install tox tox ``` + +## Running with Docker + +To run the server on a Docker container, please execute the following from the root directory: + +```bash +# building the image +docker build -t swagger_server . + +# starting up a container +docker run -p 8080:8080 swagger_server +``` \ No newline at end of file diff --git a/samples/server/petstore/flaskConnexion/swagger_server/swagger/swagger.yaml b/samples/server/petstore/flaskConnexion/swagger_server/swagger/swagger.yaml index a12fa87d872c..92590b31bc1f 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/swagger/swagger.yaml +++ b/samples/server/petstore/flaskConnexion/swagger_server/swagger/swagger.yaml @@ -108,11 +108,11 @@ paths: type: "array" items: type: "string" - default: "available" enum: - "available" - "pending" - "sold" + default: "available" collectionFormat: "csv" responses: 200: