{"id":16179309,"url":"https://github.com/jonashackt/ansible-windows-talk","last_synced_at":"2026-02-20T17:30:51.857Z","repository":{"id":147269209,"uuid":"93338428","full_name":"jonashackt/ansible-windows-talk","owner":"jonashackt","description":"Talk materials for 'Running Spring Boot Apps on Docker Windows Containers with Ansible'","archived":false,"fork":false,"pushed_at":"2018-02-22T12:24:46.000Z","size":11468,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-27T23:02:00.032Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jonashackt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-04T20:05:43.000Z","updated_at":"2018-01-12T09:30:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"5c554a95-a264-4a65-948f-15f06e41fc0e","html_url":"https://github.com/jonashackt/ansible-windows-talk","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jonashackt/ansible-windows-talk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonashackt%2Fansible-windows-talk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonashackt%2Fansible-windows-talk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonashackt%2Fansible-windows-talk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonashackt%2Fansible-windows-talk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonashackt","download_url":"https://codeload.github.com/jonashackt/ansible-windows-talk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonashackt%2Fansible-windows-talk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29658364,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T16:33:43.953Z","status":"ssl_error","status_checked_at":"2026-02-20T16:33:43.598Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T05:26:48.417Z","updated_at":"2026-02-20T17:30:51.838Z","avatar_url":"https://github.com/jonashackt.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# ansible-windows-talk\nTalk materials, links, snippets and a simple ansible playbook as showcase\n\nLink to the Slides: [Running Spring Boot Apps on Docker Windows Containers with Ansible.pdf](https://github.com/jonashackt/ansible-windows-talk/blob/master/Running%20Spring%20Boot%20Apps%20on%20Docker%20Windows%20Containers%20with%20Ansible.pdf)\n\n### Repositories needed throughout the talk\n\nhttps://github.com/jonashackt/ansible-windows-docker-springboot\n\nhttps://github.com/jonashackt/cxf-spring-cloud-netflix-docker\n\n### Links to dive in deeper\n\nhttps://blog.codecentric.de/en/2017/01/ansible-windows-spring-boot/\n\nhttps://blog.codecentric.de/en/2017/04/ansible-docker-windows-containers-spring-boot/\n\nhttps://blog.codecentric.de/en/2017/05/ansible-docker-windows-containers-scaling-spring-cloud-netflix-docker-compose/\n\nhttps://www.heise.de/developer/artikel/Docker-Windows-Container-mit-Ansible-managen-1-2-3824736.html\n\nhttps://www.heise.de/developer/artikel/Docker-Windows-Container-mit-Ansible-managen-2-2-3838642.html\n\nhttps://docs.microsoft.com/en-us/virtualization/windowscontainers/index\n\nhttps://blog.codecentric.de/en/2017/09/taming-hybrid-swarm-init-mixed-os-docker-swarm-vagrant-ansible/\n\nhttps://www.heise.de/developer/artikel/Die-hybride-Cloud-mit-Docker-Swarm-und-Ansible-Teil-1-3894131.html\n\nhttps://www.heise.de/developer/artikel/Die-hybride-Cloud-mit-Docker-Swarm-und-Ansible-2-2-3929312.html\n\n# Talk snippets\n\n## Prerequisites (1. Windows box)\n\n\u003e This is a step that requires to download ~10GB and takes quite long to complete - if you want to follow the demo live @ the talk, you should prepare the hole step at home.\n\n#### a) install Virtual Box, Vagrant and Packer\n\n###### if you´re on a Mac, this can easily be accomplished via [brew](https://brew.sh/index_de.html)\n* `brew cask install virtualbox` \n* `brew cask install vagrant`\n* `brew install packer`\n* (Java part only) `brew install maven`\n\n###### on Windows, take [chocolatey](https://chocolatey.org/)\n* `choco install virtualbox`\n* `choco install vagrant`\n* `choco install packer`\n* (Java part only) `choco install maven` \n\n###### on Linux - just use your favourite package manager\n\n#### b) Download ISO\n\nhttps://www.microsoft.com/de-de/evalcenter/evaluate-windows-server-2016 (registration needed)\n\n#### c) Build your Vagrant Box with Packer\n\nClone this GitHub repo [ansible-windows-docker-springboot](https://github.com/jonashackt/ansible-windows-docker-springboot), cd into it and the subfolder `step0-packer-windows-vagrantbox`. Then run:\n\n```\npacker build -var iso_url=14393.0.161119-1705.RS1_REFRESH_SERVER_EVAL_X64FRE_EN-US.ISO -var iso_checksum=70721288bbcdfe3239d8f8c0fae55f1f windows_server_2016_docker.json\n```\n\n#### d) Add the Vagrant box and run it\n```\nvagrant init windows_2016_docker_virtualbox.box \n```\n\nNow fire up your Windows Server 2016 box:\n```\nvagrant up\n```\n\n\u003e You can check if everything is ok as a last step if you cd into [ansible-windows-simple](https://github.com/jonashackt/ansible-windows-docker-springboot/tree/master/step0-packer-windows-vagrantbox/ansible-windows-simple) and run a `ansible windows-dev -i hostsfile -m win_ping` - which should give an `SUCCESS` \n\nFind more info here: https://github.com/jonashackt/ansible-windows-docker-springboot#build-your-windows-server-2016-vagrant-box\n\n\n## 2. Ansible provisions Windows\n\ncd into [ansible-windows-simple](https://github.com/jonashackt/ansible-windows-docker-springboot/tree/master/step0-packer-windows-vagrantbox/ansible-windows-simple) and test the connection first:\n\n```\nansible windows-dev -i hostsfile -m win_ping\n```\n\nThen run the playbook:\n\n```\nansible-playbook -i hostsfile windows-playbook.yml --extra-vars \"host=windows-dev\"\n```\n\n\n## 3. Prepare Docker on Windows\n\ncd into [step1-prepare-docker-windows](https://github.com/jonashackt/ansible-windows-docker-springboot/blob/master/step1-prepare-docker-windows/)\n\n```\nansible-playbook -i hostsfile prepare-docker-windows.yml --extra-vars \"host=ansible-windows-docker-springboot-dev\"\n```\n\n```\ndocker run --name dotnetbot microsoft/dotnet-samples:dotnetapp-nanoserver\n```\n\n## 4. Run Spring Boot App on Docker Windows Container\n\nClone example application´s repository [cxf-spring-cloud-netflix-docker](https://github.com/jonashackt/cxf-spring-cloud-netflix-docker), cd into [weatherbackend](https://github.com/jonashackt/cxf-spring-cloud-netflix-docker/tree/master/weatherbackend) \u0026 do a:\n```\nmvn clean package\n```\n\nThen cd into weatherbackend/target\n\n```\njava -jar weatherbackend-0.0.1-SNAPSHOT.jar\n```\n\nGo to [localhost:8090/swagger-ui.html](http://localhost:8090/swagger-ui.html) and do a __GET__ onto __weather-backend-controller__ `/weather/{name}`\n\ncd into [step2-single-spring-boot-app](https://github.com/jonashackt/ansible-windows-docker-springboot/blob/master/step2-single-spring-boot-app/) and run the playbook:\n\n```\nansible-playbook -i hostsfile ansible-windows-docker-springboot.yml --extra-vars \"host=ansible-windows-docker-springboot-dev app_name=weatherbackend jar_input_path=../../cxf-spring-cloud-netflix-docker/weatherbackend/target/weatherbackend-0.0.1-SNAPSHOT.jar\"\n```\n\n#### Inside the Vagrant Windows box:\n\n###### Check running webserver inside container\n\nShow running Docker containers:\n\n```\ndocker ps -a \n```\n\nShow logs of running container:\n\n```\ndocker logs simpleapp_weatherbackend\n```\n\nConnect into running container with Powershell:\n\n```\ndocker exec -it simpleapp_weatherbackend powershell\n```\n\nShow some environment variables:\n\n```\nGet-ChildItem Env:\n```\n\nCall webserver:\n```\niwr http://localhost:8090/swagger-ui.html -UseBasicParsing\n```\n\n###### Call webserver from Windows Docker Host:\n\nFind container´s IP:\n\n```\ndocker network inspect nat\n```\n\nGo to [containerIP:8088/swagger-ui.html](http://containerIP:8088/swagger-ui.html) and try it out again!\n\n\n\n## 5. Scale Spring Boot Apps\n\nExample project [cxf-spring-cloud-netflix-docker](https://github.com/jonashackt/cxf-spring-cloud-netflix-docker)\n\nMore info on this blog post https://blog.codecentric.de/en/2017/05/ansible-docker-windows-containers-scaling-spring-cloud-netflix-docker-compose/\n\n#### Run playbook\n\ncd into [step3-multiple-spring-boot-apps-docker-compose](https://github.com/jonashackt/ansible-windows-docker-springboot/blob/master/step3-multiple-spring-boot-apps-docker-compose/)\n\n```\nansible-playbook -i hostsfile ansible-windows-docker-springboot.yml --extra-vars \"host=ansible-windows-docker-springboot-dev\"\n```\n\nShow running Docker containers:\n\n```\ndocker ps -a \n```\n\n#### Eureka - Service Registry\n\nLook for eureka-serviceregistry Container´s IP\n\n```\ndocker network inspect nat\n```\n\nand go to [eurekaIP:8761](http://eurekaIP:8761)\n\n\n#### Zuul - Dynamic Proxy \u0026 Routing\n\nGo to http://localhost:48080/routes on your VirtualBox Host machine\n\n\n#### Scaling\n\nInside the Vagrant Box, on Powershell cd into `c:\\springboot` and run:\n\n```\ndocker-compose scale weatherbackend=3\n```\n\n\n#### Testing the complete route - with the weatherclient app\n\ncd into [weatherclient](https://github.com/jonashackt/cxf-spring-cloud-netflix-docker/tree/master/weatherclient) and run\n\n```\njava -jar target/weatherclient-0.0.1-SNAPSHOT.jar\n```\n\nInside the Vagrant Windows Box: Open 2 Powershells and connect to the logs:\n\n```\ndocker logs springboot_weatherservice_1 --follow\ndocker logs springboot_weatherbackend_1 --follow\n```\n\nOn your Computer:\n\nGo to [localhost:8087/swagger-ui.html](http://localhost:8087/swagger-ui.html) and do a __GET__ on `/forecast/{zip}`\n\n\n## X. One more thing...\n\n#### Prepare:\n\ncd into [step4-windows-linux-multimachine-vagrant-docker-swarm-setup](https://github.com/jonashackt/ansible-windows-docker-springboot/blob/master/step4-windows-linux-multimachine-vagrant-docker-swarm-setup/) and run\n\n```\nvagrant up\n\nansible-playbook -i hostsfile prepare-docker-nodes.yml\n\nansible-playbook -i hostsfile initialize-docker-swarm.yml\n```\n\nHave a look into Portainer UI on your Vagrant host:\n\nhttp://localhost:49000/\n\n\n#### Deploy Apps:\n\ncd into [step5-deploy-multiple-spring-boot-apps-to-mixed-os-docker-swarm](https://github.com/jonashackt/ansible-windows-docker-springboot/blob/master/step5-deploy-multiple-spring-boot-apps-to-mixed-os-docker-swarm/) and run\n\n```\nansible-playbook -i hostsfile build-and-deploy-apps-2-swarm.yml\n```\n\nNow have a look into the Traefik UI:\n\nhttp://localhost:48080/dashboard/\n\nAll the services should be available through Docker Swarm routing mesh / ingress networking - on your Vagrant host:\n\n__weatherbackend__: http://localhost:8090/swagger-ui.html\n\n__weatherservice__: http://localhost:8095/soap\n\n__Eureka__: http://localhost:8761/\n\n__Spring Boot Admin__: http://localhost:8092/\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonashackt%2Fansible-windows-talk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonashackt%2Fansible-windows-talk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonashackt%2Fansible-windows-talk/lists"}