|  | 
|  | 1 | +# Docker | 
|  | 2 | + | 
|  | 3 | +## Development in docker | 
|  | 4 | + | 
|  | 5 | +You can use `run-in-docker.sh` to do all development. This script maps your local repository to `/gen` | 
|  | 6 | +in the docker container. It also maps `~/.m2/repository` to the appropriate container location. | 
|  | 7 | + | 
|  | 8 | +To execute `mvn package`: | 
|  | 9 | + | 
|  | 10 | +```sh | 
|  | 11 | +git clone https://github.com/swagger-api/swagger-codegen | 
|  | 12 | +cd swagger-codegen | 
|  | 13 | +./run-in-docker.sh mvn package | 
|  | 14 | +``` | 
|  | 15 | + | 
|  | 16 | +Build artifacts are now accessible in your working directory. | 
|  | 17 | + | 
|  | 18 | +Once built, `run-in-docker.sh` will act as an executable for swagger-codegen-cli. To generate code, you'll need to output to a directory under `/gen` (e.g. `/gen/out`). For example: | 
|  | 19 | + | 
|  | 20 | +```sh | 
|  | 21 | +./run-in-docker.sh help # Executes 'help' command for swagger-codegen-cli | 
|  | 22 | +./run-in-docker.sh langs # Executes 'langs' command for swagger-codegen-cli | 
|  | 23 | +./run-in-docker.sh /gen/bin/go-petstore.sh  # Builds the Go client | 
|  | 24 | +./run-in-docker.sh generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml \ | 
|  | 25 | +    -l go -o /gen/out/go-petstore -DpackageName=petstore # generates go client, outputs locally to ./out/go-petstore | 
|  | 26 | +``` | 
|  | 27 | + | 
|  | 28 | +## Standalone generator Development in docker | 
|  | 29 | + | 
|  | 30 | +See [standalone generator development](https://github.com/swagger-api/swagger-codegen/blob/3.0.0/standalone-gen-dev/standalone-generator-development.md) | 
|  | 31 | + | 
|  | 32 | +## Run Docker in Vagrant | 
|  | 33 | + | 
|  | 34 | +Prerequisite: install [Vagrant](https://www.vagrantup.com/downloads.html) and [VirtualBox](https://www.virtualbox.org/wiki/Downloads). | 
|  | 35 | + | 
|  | 36 | + ```sh | 
|  | 37 | +git clone http://github.com/swagger-api/swagger-codegen.git | 
|  | 38 | +cd swagger-codegen | 
|  | 39 | +vagrant up | 
|  | 40 | +vagrant ssh | 
|  | 41 | +cd /vagrant | 
|  | 42 | +./run-in-docker.sh mvn package | 
|  | 43 | + ``` | 
|  | 44 | + | 
|  | 45 | +## Public Pre-built Docker images | 
|  | 46 | + | 
|  | 47 | +- [Official web service](https://hub.docker.com/r/swaggerapi/swagger-generator-v3/) | 
|  | 48 | +- [Official web service with "standard" user](https://hub.docker.com/r/swaggerapi/swagger-generator-v3-root/) | 
|  | 49 | +- [official minimal web service](https://hub.docker.com/r/swaggerapi/swagger-generator-v3-minimal/) | 
|  | 50 | +- [official CLI](https://hub.docker.com/r/swaggerapi/swagger-codegen-cli-v3/) | 
|  | 51 | + | 
|  | 52 | +### Swagger Generator Docker Image | 
|  | 53 | + | 
|  | 54 | +The Swagger Generator image provides a ready to use web application (swagger-generator) providing code generation services. | 
|  | 55 | + | 
|  | 56 | +Image accepts the following env variables: | 
|  | 57 | + | 
|  | 58 | +- `JAVA_MEM` e.g. `1024m` | 
|  | 59 | +- `HTTP_PORT` e.g. `8080` | 
|  | 60 | +- `HIDDEN_OPTIONS_PATH` (alternative to `HIDDEN_OPTIONS`): useful if attaching a volume containing a `hiddenOptions.yaml` file definining which languages to hide. e.g. `/data/hiddenOptions.yaml` | 
|  | 61 | +- `HIDDEN_OPTIONS` (alternative to `HIDDEN_OPTIONS_PATH`): allows to pass hidden options as an env variable, in the format `{category}:{language},{language},{language}|{category}:{language},{language},{language}` | 
|  | 62 | +e.g. `servers:foo,bar|clientsV3:wtf,isthis` where category can be `clients`, `servers`, `clientsV3`, `serversV3` | 
|  | 63 | + | 
|  | 64 | +An example of running the container: | 
|  | 65 | + | 
|  | 66 | +`docker pull swaggerapi/swagger-generator-v3` | 
|  | 67 | + | 
|  | 68 | +`docker run -e "HIDDEN_OPTIONS=servers:foo,bar|clientsV3:fgf,sdsd" -e "JAVA_MEM=1024m" -e "HTTP_PORT=80" -p 80:80 --name swagger-generator-v3 -v /tmp:/jetty_home/lib/shared swaggerapi/swagger-generator-v3` | 
|  | 69 | + | 
|  | 70 | +or | 
|  | 71 | + | 
|  | 72 | +`docker run -e "HIDDEN_OPTIONS_PATH=/hiddenOptions.yaml" -e "JAVA_MEM=1024m" -e "HTTP_PORT=80" -p 80:80 --name swagger-generator-v3  -v /tmp:/jetty_home/lib/shared swaggerapi/swagger-generator-v3` | 
|  | 73 | + | 
|  | 74 | +This docker image supports custom generators by dropping the generator jar into `/jetty_home/lib/shared` directory (typically via a docker volume); e.g having on host `/my/custom/coolgenerator.jar` and `/my/custom/weirdgenerator.jar`  the following would have them added to generator service generators: | 
|  | 75 | + | 
|  | 76 | +`docker run -e "HIDDEN_OPTIONS_PATH=/hiddenOptions.yaml" -e "JAVA_MEM=1024m" -e "HTTP_PORT=80" -p 80:80 --name swagger-generator-v3 -v /my/custom:/jetty_home/lib/shared swaggerapi/swagger-generator-v3` | 
|  | 77 | + | 
|  | 78 | +Please note that up to version 3.0.20 you need to provide`-v /{WHATEVER_DIR}:/jetty_home/lib/shared` even if not using custom generators. | 
|  | 79 | + | 
|  | 80 | +See also [online generators](./online-generators.md). | 
|  | 81 | + | 
|  | 82 | +### Swagger Generator "Minimal" Docker Image | 
|  | 83 | + | 
|  | 84 | +The Swagger Generator "Minimal" image can act as a self-hosted web application and API for generating code. | 
|  | 85 | + | 
|  | 86 | +This container can be incorporated into a CI pipeline, and requires some docker orchestration to access generated code. | 
|  | 87 | + | 
|  | 88 | +Example usage: | 
|  | 89 | + | 
|  | 90 | +```sh | 
|  | 91 | +# Start container and save the container id | 
|  | 92 | +CID=$(docker run -d swaggerapi/swagger-generator-v3-minimal) | 
|  | 93 | +# allow for startup | 
|  | 94 | +sleep 5 | 
|  | 95 | +# Get the IP of the running container | 
|  | 96 | +GEN_IP=$(docker inspect --format '{{.NetworkSettings.IPAddress}}'  $CID) | 
|  | 97 | +# Execute an HTTP request and store the download link | 
|  | 98 | +curl -X POST \ | 
|  | 99 | +           http://localhost:8080/api/generate \ | 
|  | 100 | +           -H 'content-type: application/json' \ | 
|  | 101 | +           -d '{ | 
|  | 102 | +           "specURL" : "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/petstore.yaml", | 
|  | 103 | +           "lang" : "jaxrs-jersey", | 
|  | 104 | +           "type" : "SERVER", | 
|  | 105 | +           "codegenVersion" : "V3" | 
|  | 106 | +         }' > result.zip | 
|  | 107 | +# Shutdown the swagger generator image | 
|  | 108 | +docker stop $CID && docker rm $CID | 
|  | 109 | +``` | 
|  | 110 | + | 
|  | 111 | +In the example above, `result.zip` will contain the generated client. | 
|  | 112 | + | 
|  | 113 | +See also [online generators](../README.md#online-generators). | 
|  | 114 | + | 
|  | 115 | +### Swagger Codegen CLI Docker Image | 
|  | 116 | + | 
|  | 117 | +The Swagger Codegen image acts as a standalone executable. It can be used as an alternative to installing via homebrew, or for developers who are unable to install Java or upgrade the installed version. | 
|  | 118 | + | 
|  | 119 | +To generate code with this image, you'll need to mount a local location as a volume. | 
|  | 120 | + | 
|  | 121 | +Example: | 
|  | 122 | + | 
|  | 123 | +```sh | 
|  | 124 | +docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli-v3 generate \ | 
|  | 125 | +    -i http://petstore.swagger.io/v2/swagger.json \ | 
|  | 126 | +    -l go \ | 
|  | 127 | +    -o /local/out/go | 
|  | 128 | +``` | 
|  | 129 | + | 
|  | 130 | +The generated code will be located under `./out/go` in the current directory. | 
0 commit comments