├── .gitattributes ├── .gitignore ├── DemoNotes.md ├── Dockerfile ├── Makefile ├── README.md ├── TODO.md ├── background-fr.md ├── circle.yml ├── configs ├── entrypoint.sh ├── firefox.desktop ├── idea.desktop ├── idea.png ├── lxde-main-panel ├── sessions ├── settings.xml ├── user-env.sh └── x2go.list ├── demoMaterial └── setupDemo.sh ├── docker-compose.yml ├── slides ├── fonts │ ├── 0AKsP294HTD-nvJgucYTaCwlidHJgAgmTjOEEzwu1L8.ttf │ ├── 0AKsP294HTD-nvJgucYTaJ0EAVxt0G0biEntp43Qt6E.ttf │ ├── KAKuHXAHZOeECOWAHsRKA-LrC4Du4e_yfTJ8Ol60xk0.ttf │ ├── QQt14e8dY39u-eYBZmppwTdGNerWpg2Hn6A-BxWgZ_I.ttf │ ├── QQt14e8dY39u-eYBZmppwZ_TkvowlIOtbR7ePgFOpF4.ttf │ ├── ViZhet7Ak-LRXZMXzuAfkZ0EAVxt0G0biEntp43Qt6E.ttf │ ├── YDAoLskQQ5MOAgvHUQCcLXH4RvoIgd8UGj-uxFsyfXs.ttf │ ├── YDAoLskQQ5MOAgvHUQCcLbvy90DtE_Pg_qiF9bHvTzw.ttf │ ├── ceqTZGKHipo8pJj4molytp_TkvowlIOtbR7ePgFOpF4.ttf │ └── cj2hUnSRBhwmSPr9kS589-LrC4Du4e_yfTJ8Ol60xk0.ttf ├── index.html ├── mixit-2015-devbox-docker.pdf ├── pictures │ ├── Ancien_logo_Captain_Iglo.gif │ ├── GNU_make.jpg │ ├── b2d.jpg │ ├── belgianBeers.jpg │ ├── bruxelles_brussels.jpg │ ├── chokotoff2.jpg │ ├── continuousintegrationcycle.png │ ├── dduportal.jpg │ ├── defile20106.jpg │ ├── demo1.png │ ├── demo2.png │ ├── devops_everywhere.html │ ├── docker.png │ ├── eliminates-matrix-from-hell.png │ ├── git-pr.png │ ├── gitflow.jpg │ ├── github-logo.jpg │ ├── github_flow.png │ ├── images.jpg │ ├── iterate.png │ ├── mouskif.jpg │ ├── scms.png │ ├── sortieDePiste.png │ ├── toolbox.png │ └── vitr.jpg ├── raws │ ├── BRAINSTORM.md │ ├── Jmm's notes on DEVBOX.mm │ ├── schemas.pptx │ └── sortieDePiste.xcf ├── scripts │ └── remark-latest.min.js ├── slides.md └── styles │ ├── google-font-Droid+Serif.css │ ├── google-font-Ubuntu+Mono.css │ ├── google-font-Yanone+Kaffeesatz.css │ └── presentation.css └── tests └── bats └── devbox-comon.bats /.gitattributes: -------------------------------------------------------------------------------- 1 | # Force checkout as Unix endline style 2 | text eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vagrant 2 | .DS_Store 3 | *gz 4 | *tgz 5 | *zip -------------------------------------------------------------------------------- /DemoNotes.md: -------------------------------------------------------------------------------- 1 | # Demo notes 2 | 3 | - download the demo program with `git clone https://github.com/jmMeessen/SpringBootDemo.git demo` while being in data. 4 | 5 | - move to demo directory and launch compile with `mvn install` 6 | 7 | - launch the demo server with the command `java -jar target/myproject-0.0.1-SNAPSHOT.jar` 8 | 9 | - start the X2GO client and launch the web browser. Point it to `http://localhost:8080`. It will display the message "Hello MIX-IT, Happy to be in Lyon" -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:jessie 2 | MAINTAINER Damien DUPORTAL 3 | MAINTAINER Jean-Marc MEESSEN 4 | 5 | ENV DEBIAN_FRONTEND noninteractive 6 | ENV IDEA_VERSION=2016.1.4 7 | ENV MAVEN_VERSION=3.3.9 8 | ENV FIREFOX_VERSION=48.0.1 9 | 10 | COPY configs/x2go.list /etc/apt/sources.list.d/x2go.list 11 | COPY configs/idea.desktop /usr/share/applications/idea.desktop 12 | COPY configs/idea.png /opt/idea/idea.png 13 | COPY configs/entrypoint.sh /usr/local/bin/entrypoint.sh 14 | COPY configs/user-env.sh /etc/profile.d/user-env.sh 15 | COPY configs/firefox.desktop /usr/share/applications/firefox.desktop 16 | COPY configs/idea.desktop /usr/share/applications/idea.desktop 17 | COPY configs/idea.png /opt/idea/idea.png 18 | 19 | RUN apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E \ 20 | && apt-get -q update \ 21 | && apt-get install -q -y --no-install-recommends \ 22 | aptitude \ 23 | byobu \ 24 | build-essential \ 25 | curl \ 26 | git \ 27 | htop \ 28 | libasound2 \ 29 | libdbus-glib-1-2 \ 30 | libgtk2.0-0 \ 31 | libpango1.0-0 \ 32 | libxt6 \ 33 | libXrender1 \ 34 | lxde \ 35 | openjdk-7-jdk \ 36 | openssh-server \ 37 | software-properties-common \ 38 | sudo \ 39 | vim \ 40 | wget \ 41 | x2goserver \ 42 | x2golxdebindings \ 43 | x2goserver-xsession \ 44 | x2go-keyring 45 | 46 | RUN apt-get remove -q -y iceweasel \ 47 | && echo "root:root" | chpasswd \ 48 | && adduser --disabled-password --gecos "" dockerx \ 49 | && adduser dockerx sudo \ 50 | && echo "dockerx:dockerx" | chpasswd \ 51 | && adduser dockerx x2gouser \ 52 | && echo "dockerx ALL = NOPASSWD: ALL" > /etc/sudoers.d/dockerx \ 53 | && mkdir -p /var/run/sshd /opt/maven /home/dockerx/.ssh /data /home/dockerx/.config/lxpanel/LXDE/panels /home/dockerx/.m2 \ 54 | && sed -i "s/UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config \ 55 | && sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config \ 56 | && sed -i "s/PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config \ 57 | && sed -i "s/#PasswordAuthentication/PasswordAuthentication/g" /etc/ssh/sshd_config \ 58 | && sed -i "s/#AuthorizedKeysFile/AuthorizedKeysFile/g" /etc/ssh/sshd_config \ 59 | && curl -L -o /tmp/idea.tgz https://download.jetbrains.com/idea/ideaIC-${IDEA_VERSION}.tar.gz \ 60 | && tar -xzf /tmp/idea.tgz -C /opt/ \ 61 | && cp -r /opt/idea-*/* /opt/idea/ \ 62 | && ln -s /opt/idea/bin/idea.sh /usr/local/bin/ \ 63 | && curl -L -o /tmp/maven.tgz http://apache.belnet.be/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \ 64 | && tar xzf /tmp/maven.tgz -C /opt/maven \ 65 | && ln -s "/opt/maven/apache-maven-${MAVEN_VERSION}" /opt/maven/maven-latest \ 66 | && ln -s /opt/maven/maven-latest/bin/mvn /usr/local/bin/ \ 67 | && curl -L -o /tmp/firefox.tar.bz2 http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 \ 68 | && tar jxf /tmp/firefox.tar.bz2 -C /opt/ \ 69 | && ln -s /opt/firefox/firefox /usr/local/bin/ \ 70 | && echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" \ 71 | > /home/dockerx/.ssh/authorized_keys \ 72 | && chmod 1777 /dev/shm \ 73 | && chown -R dockerx:dockerx /data /home/dockerx \ 74 | && chmod -R 0750 /data /home/dockerx \ 75 | && chmod 0700 /home/dockerx/.ssh \ 76 | && chmod 0600 /home/dockerx/.ssh/authorized_keys \ 77 | && chmod a+x /usr/local/bin/entrypoint.sh \ 78 | && apt-get -qy autoremove \ 79 | && apt-get -qy purge \ 80 | && rm -rf /tmp/* /var/lib/apt/lists/* /var/cache/* /opt/idea-* 81 | 82 | USER dockerx 83 | COPY configs/lxde-main-panel /home/dockerx/.config/lxpanel/LXDE/panels/panel 84 | COPY configs/settings.xml /home/dockerx/.m2/settings.xml 85 | COPY demoMaterial/setupDemo.sh /data/setupDemo.sh 86 | 87 | # Define working directory. 88 | WORKDIR /data 89 | 90 | # Mark as data volumes those folder 91 | VOLUME ["/data","/var/log","/tmp","/var/cache"] 92 | 93 | EXPOSE 22 94 | 95 | CMD ["/usr/local/bin/entrypoint.sh"] 96 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: build shell test all presentation start clean backup prepare 2 | 3 | WEB_SRV_NAME = app_devbox_1 4 | 5 | all: build test 6 | 7 | build: prepare 8 | docker-compose -p app build 9 | mkdir -p ~/.x2goclient 10 | cp -f configs/sessions ~/.x2goclient/ 11 | 12 | start: 13 | mkdir -p ~/work/mavenRepo/docker 14 | docker-compose -p app up -d 15 | 16 | shell: 17 | docker exec -ti app_devbox_1 bash -l 18 | 19 | gui: start 20 | /Applications/x2goclient.app/Contents/MacOS/x2goclient \ 21 | --session=devbox 22 | 23 | presentation: 24 | @docker kill $(WEB_SRV_NAME) >/dev/null || : 25 | @docker rm $(WEB_SRV_NAME) >/dev/null || : 26 | @docker run -d --name $(WEB_SRV_NAME) -v $(CURDIR)/slides:/www -p 80:80 fnichol/uhttpd >/dev/null 27 | @echo http://$$(boot2docker ip 2>/dev/null):80 28 | 29 | test: 30 | docker run \ 31 | -v $(CURDIR):/app \ 32 | -v $$(which docker):$$(which docker) \ 33 | -v /var/run/docker.sock:/var/run/docker.sock \ 34 | -e DOCKER_HOST=unix:///var/run/docker.sock \ 35 | dduportal/bats:0.4.0 \ 36 | /app/tests/bats/ 37 | 38 | backup: 39 | docker-compose -p app run devbox tar czf /tmp/bkp-data-latest.tgz /data/ 40 | 41 | clean: 42 | docker-compose -p app kill 43 | docker-compose -p app rm -f -v 44 | 45 | prepare: 46 | if [ "$$CIRCLECI" = "true" ]; then curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /home/ubuntu/bin/docker-compose && chmod +x /home/ubuntu/bin/docker-compose;fi 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # devbox 2 | Building a portable docker based developer toolbox 3 | 4 | * a versioned building block, 5 | * continuously tested, 6 | * extensible, 7 | * portable, 8 | * sharable. 9 | 10 | For a more detailed discussion about the motivations and the background, see [background-fr.md](background-fr.md) 11 | 12 | Note: It is assumed that you have a Docker environment installed (or alternatively Boot2Docker). A good test is whether "docker ps" shows no errors. 13 | You will also need `docker-compose`. 14 | 15 | ## How to use the Devbox 16 | 17 | To use the Devbox a X client is needed. We chose "X2GO". The client part must be available on your machine. 18 | 19 | Start the Devbox container with : 20 | ```bash 21 | $ make start 22 | ``` 23 | 24 | ### Use the GUI 25 | 26 | To start the Graphical User Interface to the DEVBOX, just do 27 | 28 | ``` 29 | make gui 30 | ``` 31 | 32 | And, tadahh, X2GO starts and you are in business, connected to the GUI of your Devbox. 33 | 34 | #### manual startup of the GUI 35 | 36 | On certain configurations, the startup with `make` fails. You can start it by hand. 37 | 38 | Start X2GO. If you built the DEVBOX with "make", a session is automatically created. Just double click on it. Should there be an opened session (remains of a failed `make gui`tentative), just delete it and create a new session by clicking on "new". 39 | 40 | 41 | 42 | 43 | 44 | ### Use the command line 45 | 46 | You also access the devbox in command line with 2 solutions : 47 | 48 | * Use docker to spawn a new bash shell inside the devbox : 49 | ```bash 50 | $ make shell 51 | ``` 52 | * Use SSH to access the devbox : 53 | ```bash 54 | $ ssh dockerx@$(boot2docker ip 2>/dev/null) -p 2200 55 | ``` 56 | 57 | 58 | ## Advanced using : how to build/test/etc. the Devbox ? 59 | 60 | After getting the latest version of the box by cloning the Git repository, position yourself in the root of directory structure so that run the various commands. 61 | 62 | * The full build and test workflow to create the Devbox : 63 | ```bash 64 | $ make 65 | ``` 66 | 67 | * To only rebuild image : 68 | ```bash 69 | $ make build 70 | ``` 71 | 72 | * To run the tests only, execute : 73 | ```bash 74 | $ make test 75 | ``` 76 | 77 | * To connect interactively to the Devbox, just execute : 78 | ```bash 79 | $ make shell 80 | ``` 81 | 82 | * To delete your local devbox (and ERASE all your data...) : 83 | ```bash 84 | $ make clean 85 | ``` 86 | 87 | 88 | ## How to run the presentation 89 | 90 | (With Docker of course) 91 | 92 | To start a containerized web server that will generate and serve the presentation locally : 93 | 94 | ```bash 95 | $ make presentation 96 | ``` 97 | 98 | To display it, start your favourite browser and point it to the address echoed on the screen, once the container is started. 99 | 100 | 101 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | # Todo ? 2 | 3 | * [x] Sudoes no passwd 4 | * [x] Data volume à appliquer (/data, /tmp, logs, etc.) pour perfs I/O 5 | 6 | * [x] Script shell de lancement de la devbox (avec partage docker socket + docker bin) 7 | * [ ] Script de "backup" du workspace (docker run --volume-from=devbox debian:wheezy -v /vagrant:/backup tar czf /data /backup/$(date).tgz ou truc du genre) 8 | * [ ] make clean : utiliser la variable globale + confirmation 9 | 10 | * [x] LXDE raccourci pour IntelliJ avec image 11 | * [x] LXDE IntelliJ dans main taskbar 12 | * [x] Main taskbar en haut de l'écran 13 | 14 | * [x] Ajout d'un navigateur web 15 | * [x] Ajout d'un raccourci pour le terminal dans la taskbar 16 | 17 | * [x] Attention, les ENV du Dockerfile ne sont pas appliqués au user dockerx => /etc/default, profile, etc... 18 | 19 | * [x] Delete ISSUES.md (Use github Issues instead) 20 | 21 | * [x] Use docker inside the VM (Docker host with IP ?) 22 | 23 | * [x] Faire une démo d'un dévelopement (spring boot) 24 | * [x] depot Github séparé 25 | * [x] configurer maven 26 | * [x] faire fonctionner le build maven depuis la ligne de commande 27 | * [x] faire fonctionner/intégrer ce projet Maven dans Intellij 28 | 29 | * [x] remove docker-bats directory 30 | * [x] mvn in concrete path (sym link) 31 | 32 | ## Slide related TODO 33 | 34 | * [x] make presentation est idempotent 35 | * [x] faire le plan 36 | * [x] clarifier ce qu'on veut que les auditeurs "ramènent chez eux" 37 | 38 | * [x] Est-ce que le slide show fonctionne aussi off-line ? Maintenant Oui (remark min JS + fonts googles avec css font google) 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /background-fr.md: -------------------------------------------------------------------------------- 1 | #Background 2 | 3 | Tu l'as sûrement deja vécu, ami développeur/Full stack Engineer. Lors de l'accueil un nouveau collègue ou un stagiaire, il te faut consacrer 2 jours et une énergie sans précédent avant qu'il puisse "vraiment" travailler sur le projet. 4 | 5 | Mettre au point et surtout maintenir un environnement de développement efficace et adapté a l'écosystème de votre équipe met du temps. Mais son apprentissage par le nouvel arrivant aussi. Et de plus la courbe d'apprentissage n'est pas linéaire. Conséquences: démotivation, planning décalé, frustration. 6 | 7 | Et si on repensait tout cela avec les outils de notre métier ? L’environnement de développement comme une brique logicielle ? 8 | 9 | * une brique versionnée, 10 | * testée continuellement, 11 | * Extensible, 12 | * Portable, 13 | * Partageable. 14 | 15 | L'outil Docker, capable de solutionner ce type de problèmes pour les applications classiques, ouvre la voie à des approches novatrices: pourquoi ne pas mettre son environnement de développement dans un container portable ? 16 | 17 | Au travers d'un workflow "classique" de développement, cette session présente : 18 | 19 | * Comment assembler un environnement de dév. graphique dans un containeur Docker 20 | * Comment l'utiliser efficacement 21 | * Comment le partager sur un autre OS (Mac -> Linux) à un autre dévelopeur 22 | * Des paradigmes nouveaux permis par Docker : "devbox in the cloud", "continously testing my devbox", etc. 23 | 24 | 25 | Je peux monter ma propre devbox dans un Dockerfile dès maintenant 26 | Je peux partager ma devbox avec mes collègues, indépendamment de leur PC de dév (Mac, Linux, Windows...) 27 | Je peux appliquer mon processus de développement (SCM, TDD/BDD, Continous*) à ma devbox 28 | Je ne vais plus vivre l'"onboarding" et le "project switching" comme des contraintes -------------------------------------------------------------------------------- /circle.yml: -------------------------------------------------------------------------------- 1 | machine: 2 | services: 3 | - docker 4 | dependencies: 5 | override: 6 | - make build 7 | test: 8 | override: 9 | - make test 10 | -------------------------------------------------------------------------------- /configs/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Entrypoint for devbox 4 | 5 | # This command will write docker's env now to a profile file 6 | env | awk '{print "export " $0}' | sudo tee -a /etc/profile.d/user-env.sh 7 | 8 | # Main process 9 | sudo /usr/sbin/sshd -D 10 | -------------------------------------------------------------------------------- /configs/firefox.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Mozilla Firefox 3 | Comment=A modern web browser 4 | Icon=/opt/firefox/browser/icons/mozicon128.png 5 | Exec=/usr/local/bin/firefox 6 | Type=Application 7 | Terminal=false 8 | Categories=Network;WebBrowser; -------------------------------------------------------------------------------- /configs/idea.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=IntelliJ IDEA Community 3 | Comment=A Java IDE 4 | Icon=/opt/idea/idea.png 5 | Exec=/opt/idea/bin/idea.sh 6 | Type=Application 7 | Terminal=false 8 | Categories=GNOME;GTK;Development; -------------------------------------------------------------------------------- /configs/idea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/configs/idea.png -------------------------------------------------------------------------------- /configs/lxde-main-panel: -------------------------------------------------------------------------------- 1 | # lxpanel config file. Manually editing is not recommended. 2 | # Use preference dialog in lxpanel to adjust config when you can. 3 | 4 | Global { 5 | edge=top 6 | allign=left 7 | margin=0 8 | widthtype=percent 9 | width=100 10 | height=26 11 | transparent=0 12 | tintcolor=#000000 13 | alpha=0 14 | setdocktype=1 15 | setpartialstrut=1 16 | usefontcolor=1 17 | fontcolor=#ffffff 18 | background=1 19 | backgroundfile=/usr/share/lxpanel/images/background.png 20 | } 21 | 22 | Plugin { 23 | type = space 24 | Config { 25 | Size=2 26 | } 27 | } 28 | 29 | Plugin { 30 | type = menu 31 | Config { 32 | image=/usr/share/lxde/images/lxde-icon.png 33 | system { 34 | } 35 | separator { 36 | } 37 | item { 38 | command=run 39 | } 40 | separator { 41 | } 42 | item { 43 | image=gnome-logout 44 | command=logout 45 | } 46 | } 47 | } 48 | 49 | Plugin { 50 | type = launchbar 51 | Config { 52 | Button { 53 | id=pcmanfm.desktop 54 | } 55 | Button { 56 | id=lxterminal.desktop 57 | } 58 | Button { 59 | id=firefox.desktop 60 | } 61 | Button { 62 | id=idea.desktop 63 | } 64 | } 65 | } 66 | 67 | Plugin { 68 | type = space 69 | Config { 70 | Size=4 71 | } 72 | } 73 | 74 | Plugin { 75 | type = wincmd 76 | Config { 77 | Button1=iconify 78 | Button2=shade 79 | } 80 | } 81 | 82 | Plugin { 83 | type = space 84 | Config { 85 | Size=4 86 | } 87 | } 88 | 89 | Plugin { 90 | type = pager 91 | } 92 | 93 | Plugin { 94 | type = space 95 | Config { 96 | Size=4 97 | } 98 | } 99 | 100 | Plugin { 101 | type = taskbar 102 | expand=1 103 | Config { 104 | tooltips=1 105 | IconsOnly=0 106 | AcceptSkipPager=1 107 | ShowIconified=1 108 | ShowMapped=1 109 | ShowAllDesks=0 110 | UseMouseWheel=1 111 | UseUrgencyHint=1 112 | FlatButton=0 113 | MaxTaskWidth=150 114 | spacing=1 115 | } 116 | } 117 | 118 | Plugin { 119 | type = cpu 120 | } 121 | 122 | Plugin { 123 | type = tray 124 | } 125 | 126 | Plugin { 127 | type = dclock 128 | Config { 129 | ClockFmt=%R 130 | TooltipFmt=%A %x 131 | BoldFont=0 132 | } 133 | } 134 | 135 | Plugin { 136 | type = launchbar 137 | Config { 138 | Button { 139 | id=lxde-screenlock.desktop 140 | } 141 | Button { 142 | id=lxde-logout.desktop 143 | } 144 | } 145 | } 146 | 147 | -------------------------------------------------------------------------------- /configs/sessions: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20150416193951680.applications 6 | 7 | WWWBROWSER 8 | MAILCLIENT 9 | OFFICE 10 | TERMINAL 11 | 12 | 20150416193951680.autologin 13 | 14 | 20150416193951680.clipboard 15 | both 16 | 20150416193951680.command 17 | LXDE 18 | 20150416193951680.defsndport 19 | 20 | 20150416193951680.display 21 | 1 22 | 20150416193951680.dpi 23 | 72 24 | 20150416193951680.export 25 | 26 | 20150416193951680.fstunnel 27 | 28 | 20150416193951680.fullscreen 29 | 30 | 20150416193951680.height 31 | 600 32 | 20150416193951680.host 33 | 192.168.59.103 34 | 20150416193951680.icon 35 | :icons/128x128/x2gosession.png 36 | 20150416193951680.iconvfrom 37 | UTF-8 38 | 20150416193951680.iconvto 39 | UTF-8 40 | 20150416193951680.key 41 | ~/.vagrant.d/insecure_private_key 42 | 20150416193951680.krbdelegation 43 | 44 | 20150416193951680.krblogin 45 | 46 | 20150416193951680.multidisp 47 | 48 | 20150416193951680.name 49 | devbox 50 | 20150416193951680.pack 51 | 16m-jpeg 52 | 20150416193951680.print 53 | 54 | 20150416193951680.published 55 | 56 | 20150416193951680.quality 57 | 9 58 | 20150416193951680.rdpoptions 59 | 60 | 20150416193951680.rdpserver 61 | 62 | 20150416193951680.rootless 63 | 64 | 20150416193951680.setdpi 65 | 66 | 20150416193951680.sndport 67 | 16001 68 | 20150416193951680.sound 69 | 70 | 20150416193951680.soundsystem 71 | esd 72 | 20150416193951680.soundtunnel 73 | 74 | 20150416193951680.speed 75 | 4 76 | 20150416193951680.sshport 77 | 2200 78 | 20150416193951680.sshproxyautologin 79 | 80 | 20150416193951680.sshproxyhost 81 | 82 | 20150416193951680.sshproxykeyfile 83 | 84 | 20150416193951680.sshproxykrblogin 85 | 86 | 20150416193951680.sshproxyport 87 | 22 88 | 20150416193951680.sshproxysamepass 89 | 90 | 20150416193951680.sshproxysameuser 91 | 92 | 20150416193951680.sshproxytype 93 | SSH 94 | 20150416193951680.sshproxyuser 95 | 96 | 20150416193951680.startsoundsystem 97 | 98 | 20150416193951680.type 99 | auto 100 | 20150416193951680.useiconv 101 | 102 | 20150416193951680.usekbd 103 | 104 | 20150416193951680.user 105 | dockerx 106 | 20150416193951680.usesshproxy 107 | 108 | 20150416193951680.width 109 | 800 110 | 20150416193951680.xdmcpserver 111 | localhost 112 | 20150416193951680.xinerama 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /configs/settings.xml: -------------------------------------------------------------------------------- 1 | 2 | /data/mavenRepo 3 | -------------------------------------------------------------------------------- /configs/user-env.sh: -------------------------------------------------------------------------------- 1 | export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 2 | export M3_HOME=/opt/maven/maven-latest 3 | export M3=$M3_HOME/bin 4 | export PATH=$M3:$PATH -------------------------------------------------------------------------------- /configs/x2go.list: -------------------------------------------------------------------------------- 1 | # X2Go Repository (release builds) 2 | deb http://packages.x2go.org/debian jessie main 3 | # X2Go Repository (sources of release builds) 4 | deb-src http://packages.x2go.org/debian jessie main 5 | -------------------------------------------------------------------------------- /demoMaterial/setupDemo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | git clone https://github.com/jmMeessen/SpringBootDemo.git demo -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | data: 2 | image: debian:wheezy 3 | command: chmod -R 777 /proxy-cache 4 | volumes: 5 | - /data 6 | - /var/log 7 | - /proxy-cache 8 | - ~/work/mavenRepo/docker:/data/mavenRepo 9 | net: "none" 10 | proxy: 11 | image: clue/polipo 12 | command: proxyAddress=0.0.0.0 proxyPort=8123 diskCacheRoot=/proxy-cache logFile=/var/log/polipo.log 13 | expose: 14 | - "8123" 15 | volumes_from: 16 | - data 17 | devbox: 18 | build: ./ 19 | ports: 20 | - "2200:22" 21 | volumes_from: 22 | - data 23 | links: 24 | - proxy 25 | volumes: 26 | - /usr/local/bin/docker:/usr/local/bin/docker 27 | - /home/docker/.docker:/home/dockerx/.docker 28 | environment: 29 | - DOCKER_HOST=tcp://10.0.2.15:2376 30 | - DOCKER_TLS_VERIFY=1 31 | - http_proxy=http://proxy:8123 32 | - https_proxy=http://proxy:8123 33 | - no_proxy=localhost,127.0.0.1,10.0.2.15 34 | -------------------------------------------------------------------------------- /slides/fonts/0AKsP294HTD-nvJgucYTaCwlidHJgAgmTjOEEzwu1L8.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/0AKsP294HTD-nvJgucYTaCwlidHJgAgmTjOEEzwu1L8.ttf -------------------------------------------------------------------------------- /slides/fonts/0AKsP294HTD-nvJgucYTaJ0EAVxt0G0biEntp43Qt6E.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/0AKsP294HTD-nvJgucYTaJ0EAVxt0G0biEntp43Qt6E.ttf -------------------------------------------------------------------------------- /slides/fonts/KAKuHXAHZOeECOWAHsRKA-LrC4Du4e_yfTJ8Ol60xk0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/KAKuHXAHZOeECOWAHsRKA-LrC4Du4e_yfTJ8Ol60xk0.ttf -------------------------------------------------------------------------------- /slides/fonts/QQt14e8dY39u-eYBZmppwTdGNerWpg2Hn6A-BxWgZ_I.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/QQt14e8dY39u-eYBZmppwTdGNerWpg2Hn6A-BxWgZ_I.ttf -------------------------------------------------------------------------------- /slides/fonts/QQt14e8dY39u-eYBZmppwZ_TkvowlIOtbR7ePgFOpF4.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/QQt14e8dY39u-eYBZmppwZ_TkvowlIOtbR7ePgFOpF4.ttf -------------------------------------------------------------------------------- /slides/fonts/ViZhet7Ak-LRXZMXzuAfkZ0EAVxt0G0biEntp43Qt6E.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/ViZhet7Ak-LRXZMXzuAfkZ0EAVxt0G0biEntp43Qt6E.ttf -------------------------------------------------------------------------------- /slides/fonts/YDAoLskQQ5MOAgvHUQCcLXH4RvoIgd8UGj-uxFsyfXs.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/YDAoLskQQ5MOAgvHUQCcLXH4RvoIgd8UGj-uxFsyfXs.ttf -------------------------------------------------------------------------------- /slides/fonts/YDAoLskQQ5MOAgvHUQCcLbvy90DtE_Pg_qiF9bHvTzw.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/YDAoLskQQ5MOAgvHUQCcLbvy90DtE_Pg_qiF9bHvTzw.ttf -------------------------------------------------------------------------------- /slides/fonts/ceqTZGKHipo8pJj4molytp_TkvowlIOtbR7ePgFOpF4.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/ceqTZGKHipo8pJj4molytp_TkvowlIOtbR7ePgFOpF4.ttf -------------------------------------------------------------------------------- /slides/fonts/cj2hUnSRBhwmSPr9kS589-LrC4Du4e_yfTJ8Ol60xk0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/fonts/cj2hUnSRBhwmSPr9kS589-LrC4Du4e_yfTJ8Ol60xk0.ttf -------------------------------------------------------------------------------- /slides/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Devbox presentation 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /slides/mixit-2015-devbox-docker.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/mixit-2015-devbox-docker.pdf -------------------------------------------------------------------------------- /slides/pictures/Ancien_logo_Captain_Iglo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/Ancien_logo_Captain_Iglo.gif -------------------------------------------------------------------------------- /slides/pictures/GNU_make.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/GNU_make.jpg -------------------------------------------------------------------------------- /slides/pictures/b2d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/b2d.jpg -------------------------------------------------------------------------------- /slides/pictures/belgianBeers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/belgianBeers.jpg -------------------------------------------------------------------------------- /slides/pictures/bruxelles_brussels.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/bruxelles_brussels.jpg -------------------------------------------------------------------------------- /slides/pictures/chokotoff2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/chokotoff2.jpg -------------------------------------------------------------------------------- /slides/pictures/continuousintegrationcycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/continuousintegrationcycle.png -------------------------------------------------------------------------------- /slides/pictures/dduportal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/dduportal.jpg -------------------------------------------------------------------------------- /slides/pictures/defile20106.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/defile20106.jpg -------------------------------------------------------------------------------- /slides/pictures/demo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/demo1.png -------------------------------------------------------------------------------- /slides/pictures/demo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/demo2.png -------------------------------------------------------------------------------- /slides/pictures/devops_everywhere.html: -------------------------------------------------------------------------------- 1 | Résultats Google Recherche d'images correspondant à http://stackengine.com/wp-content/uploads/2014/11/devops-everywhere1.jpg
Avertissement de redirection
 La page que vous consultiez essaie de vous rediriger vers http://stackengine.com/devops-road-show/.

 Si vous ne souhaitez pas consulter cette page, vous pouvez revenir à la page précédente.


-------------------------------------------------------------------------------- /slides/pictures/docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/docker.png -------------------------------------------------------------------------------- /slides/pictures/eliminates-matrix-from-hell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/eliminates-matrix-from-hell.png -------------------------------------------------------------------------------- /slides/pictures/git-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/git-pr.png -------------------------------------------------------------------------------- /slides/pictures/gitflow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/gitflow.jpg -------------------------------------------------------------------------------- /slides/pictures/github-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/github-logo.jpg -------------------------------------------------------------------------------- /slides/pictures/github_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/github_flow.png -------------------------------------------------------------------------------- /slides/pictures/images.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/images.jpg -------------------------------------------------------------------------------- /slides/pictures/iterate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/iterate.png -------------------------------------------------------------------------------- /slides/pictures/mouskif.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/mouskif.jpg -------------------------------------------------------------------------------- /slides/pictures/scms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/scms.png -------------------------------------------------------------------------------- /slides/pictures/sortieDePiste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/sortieDePiste.png -------------------------------------------------------------------------------- /slides/pictures/toolbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/toolbox.png -------------------------------------------------------------------------------- /slides/pictures/vitr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/pictures/vitr.jpg -------------------------------------------------------------------------------- /slides/raws/BRAINSTORM.md: -------------------------------------------------------------------------------- 1 | # Brainstorming pour la présentation 2 | 3 | ## Plan global (après travail de synthèse) 4 | 5 | ### Intro 6 | 7 | * Présentations (nom, prénom, mail, githu, twitter, etc.) : 8 | * Worldline (la minute corporate) 9 | * Toi 10 | * Moi 11 | * Remerciements (c'est important, c'est lié à nos personnalités) : 12 | * Mix It team 13 | * Docker people/ autre personnes nous ayant poussé sur ces pratiques 14 | * Public d'être là 15 | 16 | ### Why this talk ? 17 | 18 | * seen a lot in nearly 30 years in IT 19 | * victories / failures 20 | * great peoples 21 | * still as enthousiastic to learn/share 22 | * great stuff out there (admirative) 23 | * make people's life easier 24 | * I want to share why I am proud of what I do 25 | * hope to be able to continue even after retirement 26 | * BUT, one of my big frustration 27 | * Wasted (unfocused energy) at the start of a every new adventure 28 | 29 | ### What is the problem ? 30 | 31 | 32 | * Wasted High power moment (high energy) 33 | * Setup of a work environement takes lot of time (comme une sortie de piste, dans les graviers) 34 | * perte du focus 35 | * Necessite d'avoir l'environement de DEV le plus riche possible (state of the art). Pas de nivellement par le bas. 36 | * très rapide à déployer et du premier coup 37 | * et je ne parle pas de l'env d'integration 38 | * Maintenance d'un environnement de dévelopement == douleur 39 | * "Just In Time" : c'est au moment des "onboardings" qu'on a découvre les problèmes, comportement homogène dans le temps 40 | * Maintenance et maJ : montée de version de IDE / JDK / etc. 41 | * Coût : comment le mesurer pour l'anticiper voire le diminuer 42 | 43 | ### Solutions ? 44 | 45 | * j'ai connu 46 | * les terminaux sur le mainframe 47 | * les PC avec images (quid des utilisateurs nomades) 48 | * virtualisation avec Vagrant/VB par exemple 49 | 50 | * DEVBOX = TOOLBOX = Trousse à outils (=> trousse à outils + camion atelier) 51 | 52 | * Constat : même problèmes, donc mêmes solutions (on est "top marketeux", on fait des acronymes ah ah) 53 | * DaaT : Devbox as a Tool (comme avant) 54 | * DaaS : Devbox as a Software 55 | * DaaI : Devbox as an Infrastructure 56 | * DaaLt :Devbox as a Learning tool 57 | * Docker 58 | * Docker résouds le pb de Matrix of hell 59 | * Docker contractualise 60 | * Docker est rapide 61 | * Docker est "à la mode" 62 | * rend des choses qu'on fesait depuis longtemps tres bon marche 63 | * utilisation du GPS 64 | * nouveau produits/nouvelles utilisations 65 | 66 | * utiliser (naturellement) les recettes de l'ingénierie logicielle moderne 67 | 68 | ### We are "Full stack" Engineer, aren't we ? 69 | 70 | Que disent les pratiques d'ingénieurie logicielle (plus ou moins) modernes ? 71 | 72 | * (distributed) source management 73 | * The tests drive the development 74 | * TDD/BDD 75 | * Continous* 76 | * IC 77 | * Continuous testing 78 | * Continuous benchmarking 79 | * Continuous delivery 80 | 81 | * "Nouvelles" pratiques - soft skills 82 | * Agile (itération, proche du besoin, réactivité) 83 | * DevOps (dev2prod, prod2dev, tendre vers l'iso prod, efficience en continuité avec l'agile) 84 | * "Human stack" (continuous and linear learning, trust, transparency, droit à l'erreur) 85 | ** Compagnonage (on fabrique ses propres outils comme partie de l'apprentissage) 86 | ** Eat your own dog food 87 | 88 | ### Explication de la solution 89 | 90 | * Ce qui est necessaire pour comprendre la demo (sous forme de dessin) 91 | 92 | * Comment fonctionne l'environement (structure) 93 | * boot2docker 94 | * le Devbox container 95 | * le data container 96 | 97 | * Le processus de build et d'integration continue 98 | * comment BATS est appelé 99 | 100 | 101 | ### Démo 102 | 103 | ### Use cases 104 | 105 | * Onboarding 106 | * Developement simple basé sur Spring Boot 107 | * MaJ IDEA sans casser le dev workflow 108 | * Portabilité 109 | * ? Legacy (reprendre old applications) 110 | 111 | ### What did we learnt ? 112 | 113 | * Qu'as tu appris ? 114 | * qu'ai-je appris ? 115 | 116 | 117 | ### ce que j'ai appris (Jmm) 118 | 119 | * j'ai appris de nouvelles technos (amélioré ma pratique) 120 | * Docker 121 | * Test Driven SYSTEM development (DEVOPS) 122 | * Bash and Linux skills 123 | * the Gitlab/Github way 124 | * confirmation que de la conception à la production, le flux est continu (mort aux silos) 125 | * apprentissage du travail communautaire/ OSS (des valeurs qui me sont très proches) aussi à distance. 126 | 127 | * Notre intuition est correcte: 128 | * Encore rien rencontré de bloquant et très, très prometteur. 129 | * Il y a encore du travail 130 | * j'attend avec impatience l'épreuve du feu (situation réelle) 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | ## Damien 141 | 142 | 143 | 144 | ### Problème à résoudre 145 | 146 | * Maintenance d'un environnement de dévelopement == douleur 147 | * "Just In Time" : c'est au moment des "onboardings" qu'on a découvre les problèmes, comportement homogène dans le temps 148 | * Maintenance et maJ : montée de version de IDE / JDK / etc. 149 | * Coût : comment le mesurer pour l'anticiper voire le diminuer 150 | * Humain : frustration, les "faiseurs" voudrait toujours qque. chose à la pointe, les "font-faire" ne voient pas ceci comme prioritaire (investissement donc ROI moyen/long terme) 151 | 152 | ### "Full stack" Engineer 153 | 154 | Que disent les pratiques d'ingénieurie logicielle (plus ou moins) modernes ? 155 | 156 | #### SCM 157 | 158 | #### Testing 159 | 160 | * TDD/BDD 161 | 162 | #### Continous* 163 | 164 | * IC 165 | * Continuous testing 166 | * Continuous benchmarking 167 | * Continuous delivery 168 | 169 | #### "Nouvelles" pratiques 170 | 171 | * Agile (itération, proche du besoin, réactivité) 172 | * DevOps (dev2prod, prod2dev, tendre vers l'iso prod, efficience en continuité avec l'agile) 173 | * "Human stack" (continuous and linear learning, trust, transparency, droit à l'erreur) 174 | ** Compagnonage 175 | ** Eat your own dog food 176 | 177 | ### Que faire ? 178 | 179 | * Constat : même problèmes, donc mêmes solutions (on est "top marketeux", on fait des acronymes ah ah) 180 | * DaaT : Devbox as a Tool (comme avant) 181 | * DaaS : Devbox as a Software 182 | * DaaI : Devbox as an Infrastructure 183 | * DaaLt :Devbox as a Learning tool 184 | * Why not Docker ? 185 | * Docker résouds le pb de Matrix of hell 186 | * Docker contractualise 187 | * Docker est rapide 188 | * Docker est "à la mode" 189 | 190 | ### Démo 191 | 192 | ### Use cases 193 | 194 | * Onboarding 195 | * MaJ IDEA sans casser le dev workflow 196 | * Portabilité 197 | * Legacy (reprendre old applications) 198 | 199 | ### What did we learnt ? 200 | 201 | * Qu'as tu appris ? 202 | * qu'ai-je appris ? 203 | 204 | ## Jean-Marc 205 | 206 | 207 | 208 | 209 | ### Solutions 210 | 211 | * j'ai connu 212 | * les terminaux sur le mainframe 213 | * les PC avec images (quid des utilisateurs nomades) 214 | * virtualisation avec Vagrant/VB par exemple 215 | * Docker 216 | * rend des choses qu'on fesait depuis longtemps tres bon marche 217 | * utilisation du GPS 218 | * nouveau produits/nouvelles utilisations 219 | * utiliser (naturellement) les recettes de l'ingénierie logicielle 220 | 221 | ### Cristalisation 222 | 223 | * je rflechi beaucoup sur comment ameliorer notre travail au sein de WL 224 | * rencontre avec de jeunes collègues qui partagent ma vision de notre métier et de mes valeurs. 225 | * plus aventureux que moi 226 | * d'autres chemins d'expérience que moi 227 | * (Autant j'aime mes habitudes/certitudes), j'ai l'intuition que cette technologie pourraient nous aider 228 | * l'idee est novatrice et va a l'encontre de mes habitudes (c'est tjr tres interessant) 229 | * l'occasion d'apprendre cette nouvelle techno avec quelqu'un qui trempe dedans depuis plusieurs années. 230 | * me confronter à d'autres manieres de travailler 231 | 232 | ### ce que j'ai appris 233 | 234 | * j'ai appris de nouvelles technos (amélioré ma pratique) 235 | * Docker 236 | * Test Driven SYSTEM development (DEVOPS) 237 | * Bash and Linux skills 238 | * the Gitlab/Github way 239 | * confirmation que de la conception à la production, le flux est continu (mort aux silos) 240 | * apprentissage du travail communautaire/ OSS (des valeurs qui me sont très proches) 241 | 242 | * Notre intuition est correcte: 243 | * Encore rien rencontré de bloquant et très, très prometteur. 244 | * Il y a encore du travail 245 | * j'attend avec impatience l'épreuve du feu (situation réelle) 246 | 247 | 248 | -------------------------------------------------------------------------------- /slides/raws/Jmm's notes on DEVBOX.mm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | -------------------------------------------------------------------------------- /slides/raws/schemas.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/raws/schemas.pptx -------------------------------------------------------------------------------- /slides/raws/sortieDePiste.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmMeessen/devbox/935fd376c1bee2cf5ef8a539c6bb445ac4ceaaed/slides/raws/sortieDePiste.xcf -------------------------------------------------------------------------------- /slides/slides.md: -------------------------------------------------------------------------------- 1 | title: devbox 2 | name: inverse 3 | layout: true 4 | class: center, middle, inverse 5 | --- 6 | # Devbox in Docker 7 | 8 | --- 9 | 10 | # Access this presentation : 11 | 12 | ## Online version (HTML) : 13 | 14 | [http://dduportal.github.io/presentations/mixit-2015-devbox-docker](http://dduportal.github.io/presentations/mixit-2015-devbox-docker) 15 | 16 | Proudly powered by [RemarkJS](https://github.com/gnab/remark) 17 | 18 | ## Offline version (PDF) : 19 | 20 | [http://dduportal.github.io/presentations/mixit-2015-devbox-docker/mixit-2015-devbox-docker.pdf](http://dduportal.github.io/presentations/mixit-2015-devbox-docker/mixit-2015-devbox-docker.pdf) 21 | 22 | Proudly exported with [Deck2PDF](https://github.com/melix/deck2pdf) 23 | 24 | --- 25 | layout:false 26 | 27 | # Agenda : 28 | 29 | 1. Introduction 30 | 2. Pourquoi ce talk ? 31 | 3. "Full stack" Engineer 32 | 4. Demo time ! 33 | 34 | ??? 35 | (jmm) 36 | 37 | --- 38 | template: inverse 39 | 40 | # Introduction 41 | 42 | ??? 43 | (jmm) 44 | --- 45 | 46 | layout: false 47 | .left-column[ 48 | # Intro 49 | ## Qui sommes-nous ? 50 | ] 51 | .right-column[ 52 | 53 | # Nous venons de Belgique 54 | 55 | ] 56 | ??? 57 | Jmm 58 | 59 | --- 60 | layout: false 61 | .left-column[ 62 | # Intro 63 | ## Qui sommes-nous ? 64 | ] 65 | .right-column[ 66 | 67 | # Nous venons de Belgique 68 | 69 |   70 | 71 | **Le pays du chocolat...** 72 | 73 | .center[![Chokotoff](pictures/chokotoff2.jpg)] 74 | 75 | ] 76 | ??? 77 | Jmm 78 | 79 | --- 80 | layout: false 81 | .left-column[ 82 | # Intro 83 | ## Qui sommes-nous ? 84 | ] 85 | .right-column[ 86 | 87 | # Nous venons de Belgique 88 | 89 |   90 | 91 | **Le pays de la bière...** 92 | 93 | 94 | .center[![BièresBelges](pictures/belgianBeers.jpg)] 95 | 96 | 97 | ] 98 | 99 | ??? 100 | Jmm 101 | 102 | --- 103 | layout: false 104 | .left-column[ 105 | # Intro 106 | ## Qui sommes-nous ? 107 | ] 108 | .right-column[ 109 | 110 | # Nous venons de Belgique 111 | 112 |   113 | 114 | **Le pays où on ne se prend pas (trop) au sérieux...** 115 | 116 | 117 | .center[![BlagueBelge](pictures/defile20106.jpg)] 118 | 119 | 120 | ] 121 | ??? 122 | Jmm 123 | 124 | --- 125 | layout: false 126 | .left-column[ 127 | # Intro 128 | ## Qui sommes-nous ? 129 | ] 130 | .right-column[ 131 | 132 | # Nous venons de Belgique 133 | 134 |   135 | 136 | **Le pays où on tourne en rond ?** 137 | 138 | 139 | .center[![BlagueBelge](pictures/bruxelles_brussels.jpg)] 140 | 141 | ] 142 | ??? 143 | Jmm 144 | 145 | --- 146 | layout: false 147 | .left-column[ 148 | # Intro 149 | ## Qui sommes-nous ? 150 | ] 151 | .right-column[ 152 | # Jean-Marc MEESSEN 153 | 154 | Vous pourriez me retrouver dans un surgelateur de grande surface 155 | 156 | .center[![iglo](pictures/Ancien_logo_Captain_Iglo.gif)] 157 | 158 | * Senior developer @ Worldline, newcomer coach, development infrastructure 159 | 160 | * Developement Middleware sur Fuse / ServiceMix / Camel 161 | 162 | * Trop timide pour participer activement à des projets Open Source. Quelques contributions à Asciidoctor et Freeplane. 163 | 164 | * `jean-marc@meessen-web.org`, `@JM_Meessen` 165 | 166 | ] 167 | 168 | ??? 169 | jmm 170 | 171 | --- 172 | 173 | layout: false 174 | .left-column[ 175 | # Intro 176 | ## Qui sommes-nous ? 177 | ] 178 | .right-column[ 179 | # Damien DUPORTAL 180 | 181 | .center[![dduportal](pictures/dduportal.jpg)] 182 | 183 | * DevOps Engineer @ Worldline 184 | 185 | * Grimpeur 186 | * Français émigré en Belgique 187 | * Enseignant la HA et les SIGs (ENSG, EPSI) 188 | 189 | * Contact : 190 | * Gmail : `damien.duportal@gmail.com` 191 | * Twitter : [@DamienDuportal](https://twitter.com/DamienDuportal) 192 | * Github : [dduportal](https://github.com/dduportal) 193 | 194 | 195 | ] 196 | 197 | ??? 198 | Damien 199 | 200 | --- 201 | layout: false 202 | .left-column[ 203 | # Intro 204 | ## Qui sommes-nous ? 205 | ## Remerciements 206 | ] 207 | .right-column[ 208 | # Merci ! 209 | 210 | * Organisateurs et bénévoles Mix-It 211 | 212 | * à vous, de venir ! 213 | 214 | * Aux personnes ayant réalisé et crus en ces outils 215 | ] 216 | 217 | ??? 218 | Damien 219 | 220 | --- 221 | layout: false 222 | .left-column[ 223 | # Intro 224 | ## Qui sommes-nous ? 225 | ## Remerciements 226 | ## Et vous ? 227 | ] 228 | .right-column[ 229 | # Faisons connaissance... 230 | 231 | * Des devs ? Des Ops ? Des chefs ? Autre ? 232 | 233 | * Des seniors (des vrais) ? Des moins seniors ? Des juniors ? 234 | 235 | * Expérience avec la virtualisation ? 236 | 237 | * Vous souvenez-vous de votre premier emploi ? 238 | ] 239 | 240 | ??? 241 | (jmm) 242 | 243 | --- 244 | template: inverse 245 | 246 | # Pourquoi ce talk ? 247 | 248 | ??? 249 | jmm 250 | 251 | --- 252 | layout: false 253 | .left-column[ 254 | # Pourquoi ce talk ? 255 | ] 256 | .right-column[ 257 | # Pourquoi ce talk ? 258 | * J'ai participé à beaucoup d'aventures ces 30 dernières années. 259 | 260 | * Toujours aussi enthousiaste pour apprendre et partager 261 | 262 | * MAIS, une de mes grandes frustrations : La perte de temps et d'énergie au démarrage de chaque nouvelle aventure. 263 | ] 264 | ??? 265 | jmm 266 | 267 | "30 dernieres années" : 268 | * aventures informatiques 269 | * au moins pour Jmm 270 | * beaucoup de belles victoires, des échecs... 271 | * des "jerks", mais surtout des gens géniaux 272 | 273 | ## enthousiastes 274 | * admiratif des choses extraordinaires qu'il y "là dehors" 275 | * rendre la vie des gens plus facile et agréable 276 | * Je suis fier de ce que je fais et je veux le partager (ex: new comers) 277 | * J'espère pouvoir continuer à être enthousiaste et partageur au dela de ma penssion 278 | 279 | --- 280 | layout: false 281 | .left-column[ 282 | # Pourquoi ce talk ? 283 | ## Quel est le problème ? 284 | ] 285 | .right-column[ 286 | 287 | # Quel est le problème ? 288 | 289 | * Gaspillage d'énergie au mauvais moment 290 | 291 | * Mise en place de l'environement coûteuse : 292 | 293 | .left[![Sortie de piste](pictures/sortieDePiste.png)] 294 | 295 | * coût de maintenance 296 | 297 | * "Nivellement par le bas" 298 | 299 | ## Objectif : 300 | Devbox *très* rapide à déployer et du premier coup 301 | ] 302 | 303 | ??? 304 | jmm 305 | 306 | * perte du focus 307 | * et je ne parle pas de l'env d'integration 308 | * Maintenance et maJ : montée de version de IDE / JDK / etc. 309 | * Coût : comment le mesurer pour l'anticiper voire le diminuer 310 | 311 | --- 312 | layout: false 313 | .left-column[ 314 | # Pourquoi ce talk ? 315 | ## Quel est le problème ? 316 | ## Solutions ? 317 | ] 318 | .right-column[ 319 | # Solutions "d'avant" 320 | 321 | * les terminaux sur le mainframe 322 | 323 | * les PC avec images (quid des utilisateurs nomades ?) 324 | 325 | * virtualisation avec Vagrant/VB par ex 326 | 327 | ] 328 | 329 | ??? 330 | jmm 331 | 332 | --- 333 | layout: false 334 | .left-column[ 335 | # Pourquoi ce talk ? 336 | ## Quel est le problème ? 337 | ## Solutions ? 338 | ## Constat 339 | ] 340 | .right-column[ 341 | # Constat 342 | 343 | * DEVBOX = TOOLBOX = Trousse à outils = Camion atelier 344 | 345 | .center[![Toolbox](pictures/toolbox.png)] 346 | 347 | * Même problèmes que pour nos applications, donc mêmes solutions : 348 | * DaaT : Devbox as a Tool (comme avant) 349 | * DaaS : Devbox as a Software 350 | * DaaI : Devbox as an Infrastructure 351 | * DaaLt :Devbox as a Learning tool 352 | 353 | ] 354 | 355 | ??? 356 | jmm 357 | 358 | --- 359 | layout: false 360 | .left-column[ 361 | # Pourquoi ce talk ? 362 | ## Quel est le problème ? 363 | ## Solutions ? 364 | ## Constat 365 | ## Docker ! 366 | ] 367 | .right-column[ 368 | # Docker ! 369 | 370 | * Docker résouds le pb de "Matrix of hell" 371 | * Docker contractualise 372 | * Docker est rapide 373 | * Docker est "à la mode" 374 | * Permet de nouveaux produits/solutions 375 | * Souvenez vous de la "libération" du GPS par B. Clinton 376 | 377 | .center[![HellMatrix](pictures/eliminates-matrix-from-hell.png)] 378 | 379 | ] 380 | ??? 381 | ddu 382 | 383 | --- 384 | 385 | template: inverse 386 | 387 | 388 | # Utiliser les recettes de l'ingénierie logicielle 389 | ## Nous sommes TOUS des ingénieurs "Full stack" 390 | 391 | 392 | --- 393 | layout: false 394 | .left-column[ 395 | # "Full stack" Engineer 396 | ## Code == Valeur 397 | 398 | ] 399 | .right-column[ 400 | # "La vérité est dans le code" 401 | (http://programming-motherfucker.com) 402 | 403 | Utilisez des SCMs, si possible des DVCS => nouvelles façons de travailler : 404 | 405 | .center[![GitWorkflow](pictures/scms.png)] 406 | ] 407 | 408 | --- 409 | layout: false 410 | .left-column[ 411 | # "Full stack" Engineer 412 | ## Code == Valeur 413 | ## Nouvelles pratiques 414 | 415 | ] 416 | .right-column[ 417 | # "Nouvelles" pratiques 418 | 419 | N'ayons pas peur d'_essayer,_ **plusieurs fois,** toutes ces nouvelles façons de faire, sans être dogmatiques 420 | 421 | * Agile 422 | * TDD/BDD/Doc. as code 423 | * DevOps 424 | 425 | 426 | .center[![Iterate](pictures/iterate.png)] 427 | ] 428 | 429 | --- 430 | layout: false 431 | .left-column[ 432 | # "Full stack" Engineer 433 | ## Code == Valeur 434 | ## Nouvelles pratiques 435 | ## Continous* 436 | ] 437 | .right-column[ 438 | # Continous* 439 | 440 | * Continous Integration 441 | * Continuous Testing (TDD right ?) 442 | * Cotinuous documentation 443 | * Continuous Benchmarking 444 | * Continuous delivery 445 | 446 | .center[![Iterate](pictures/continuousintegrationcycle.png)] 447 | 448 | ] 449 | 450 | --- 451 | layout: false 452 | .left-column[ 453 | # "Full stack" Engineer 454 | ## Code == Valeur 455 | ## Nouvelles pratiques 456 | ## Continous* 457 | ## "Human Stack" 458 | ] 459 | .right-column[ 460 | 461 | # "Human stack" 462 | 463 | .center[ 464 | ## Culture 465 | ![Default-aligned image](pictures/vitr.jpg) 466 | ## Confiance 467 | 468 | ] 469 | * "Compagnonnage" 470 | * Eat your own dog food 471 | 472 | 473 | ] 474 | 475 | --- 476 | template: inverse 477 | 478 | # Démo Time ! 479 | 480 | ??? 481 | jmm 482 | --- 483 | layout: false 484 | .left-column[ 485 | # Démo Time ! 486 | ] 487 | .right-column[ 488 | # Démo Time ! 489 | 490 | * Objet : Spring boot "hello world" application 491 | 492 | * Java DK, Maven, IntelliJ Idea, Docker, Compose 493 | 494 | * Open and reusable code : [https://github.com/jmMeessen/devbox](https://github.com/jmMeessen/devbox) 495 | 496 | * Use cases : 497 | * Onboarding 498 | * Developement simple basé sur Spring Boot 499 | * MaJ IDEA sans casser le dev workflow 500 | * Portabilité 501 | * Legacy (Lon living applications) 502 | ] 503 | ??? 504 | jmm 505 | 506 | --- 507 | layout: false 508 | .left-column[ 509 | # Démo Time ! 510 | ## Devbox as a code 511 | ] 512 | .right-column[ 513 | # SCM :Git (on Github) 514 | 515 | * Public 516 | 517 | * Partagé 518 | 519 | * Pull-Request systématique (Github workflow) 520 | 521 | .center[![Github](pictures/github-logo.jpg)] 522 | .center[![GitWorkflow](pictures/git-pr.png)] 523 | 524 | 525 | ] 526 | ??? 527 | jmm 528 | 529 | --- 530 | layout: false 531 | .left-column[ 532 | # Démo Time ! 533 | ## Devbox as a code 534 | ] 535 | .right-column[ 536 | # TDD/BDD 537 | 538 | Utilisation de [Bats](https://github.com/sstephenson/bats) (testing en bash) au maximum 539 | 540 | ```shell 541 | @test "Check JDK presence" { 542 | docker run --user "dockerx" which java 543 | } 544 | ``` 545 | 546 | * Test Driven Developemt (BDD) oriented 547 | * Basé sur Bash : compromis "démarrage rapide" vs. maintenabilité 548 | * Objectif pour une fonctionnalité : 549 | * Rouge : Rédaction des tests qui vont être "fail" 550 | * Green : Implémentation, c'est OK 551 | * Pragmatisme : ne pas tout tester non plus, par petits pas ! 552 | 553 | 554 | Lancement facile : 555 | ```bash 556 | $ make test 557 | ``` 558 | 559 | ] 560 | ??? 561 | jmm 562 | 563 | --- 564 | layout: false 565 | .left-column[ 566 | # Démo Time ! 567 | ## Devbox as a code 568 | ] 569 | .right-column[ 570 | # Continuous* 571 | 572 | Utilisation de [CircleCI](https://circleci.com) : 573 | 574 | * Basé sur les hooks Github (git push == build) 575 | * Support de Docker 576 | * Configuration as a code : 577 | 578 | ```yaml 579 | circle.yml: 580 | 581 | machine: 582 | services: 583 | - docker 584 | dependencies: 585 | override: 586 | - make build 587 | test: 588 | override: 589 | - make test 590 | ``` 591 | 592 | ] 593 | ??? 594 | jmm 595 | 596 | --- 597 | layout: false 598 | .left-column[ 599 | # Démo Time ! 600 | ## Devbox as a code 601 | ] 602 | .right-column[ 603 | # Docker stack 604 | 605 | Utilisation de [boot2docker](https://boot2docker.io) : 606 | * Multi-plateforme (virtualbox) 607 | * Support officiel de Docker 608 | 609 | .center[![Boot2docker](pictures/b2d.jpg)] 610 | 611 | ] 612 | ??? 613 | jmm 614 | 615 | --- 616 | layout: false 617 | .left-column[ 618 | # Démo Time ! 619 | ## Devbox as a code 620 | ] 621 | .right-column[ 622 | # Cinématique 623 | 624 | Utilisation de [GNU Make](https://www.gnu.org/software/make/) : 625 | * Indépendance cinématique / outils (On peut s'affranchir de Docker) 626 | * Multi-platforme 627 | 628 | ```bash 629 | Makefile: 630 | 631 | all: build test 632 | 633 | build: 634 | ... 635 | start: 636 | ... 637 | test: 638 | ... 639 | backup: 640 | ... 641 | clean: 642 | ... 643 | ``` 644 | 645 | ] 646 | ??? 647 | jmm 648 | 649 | --- 650 | layout: false 651 | .left-column[ 652 | # Démo Time ! 653 | ## Devbox as a code 654 | ] 655 | .right-column[ 656 | # Demo 1 : 657 | 658 | .center[![Demo1](pictures/demo1.png)] 659 | 660 | ] 661 | ??? 662 | jmm 663 | 664 | --- 665 | template: inverse 666 | 667 | # Demo 1 668 | 669 | See code on Github : 670 | 671 | [https://github.com/jmMeessen/devbox/tree/Demo1](https://github.com/jmMeessen/devbox/tree/Demo1) 672 | 673 | ??? 674 | jmm 675 | 676 | --- 677 | layout: false 678 | .left-column[ 679 | # Démo Time ! 680 | ## Devbox as a code 681 | ## Devbox as an infrastructure 682 | ] 683 | .right-column[ 684 | 685 | # Données 686 | 687 | * Comment conserver ses données si on détruit/met à jour la VM ? 688 | * Comment sauvegarder ses données ? 689 | 690 | # Réseau 691 | 692 | * Travailleurs nomades, pauvres employé de SSI... 693 | * Ressources locales : cache proxy, registre docker, cache Maven ? 694 | 695 | ] 696 | 697 | --- 698 | layout: false 699 | .left-column[ 700 | # Démo Time ! 701 | ## Devbox as a code 702 | ## Devbox as an infrastructure 703 | ] 704 | .right-column[ 705 | # Devbox as an infrastructure 706 | 707 | Solution : Docker-compose (Was known as Fig) ! 708 | 709 | ```yaml 710 | web: 711 | image: my-java-app:1.0.0 712 | links: 713 | - db 714 | ports: 715 | - "8000:8000" 716 | db: 717 | image: postgres 718 | ``` 719 | 720 | ] 721 | 722 | --- 723 | layout: false 724 | .left-column[ 725 | # Démo Time ! 726 | ## Devbox as a code 727 | ## Devbox as an infrastructure 728 | ] 729 | .right-column[ 730 | # Demo 2 : 731 | 732 | .center[![Demo2](pictures/demo2.png)] 733 | 734 | ] 735 | 736 | --- 737 | template: inverse 738 | 739 | # Demo 2 740 | 741 | See code on Github : 742 | 743 | [https://github.com/jmMeessen/devbox/tree/Demo2](https://github.com/jmMeessen/devbox/tree/Demo2) 744 | 745 | --- 746 | layout: false 747 | .left-column[ 748 | # Conclusion 749 | ## Qu'a t'on appris ? 750 | ] 751 | .right-column[ 752 | # Qu'a t'on appris ? 753 | 754 | * Jean-Marc : 755 | * Nouvelles méthodes & technos 756 | 757 | * Confirmation que de la conception à la production, le flux est continu (mort aux silos !) 758 | 759 | * Apprentissage du travail communautaire/ OSS (des valeurs qui me sont très proches) aussi à distance. 760 | 761 | * Damien : 762 | * Peer-working : programmer, revue, presentation ! 763 | 764 | * "Faire faire" : 3ème étape du formateur 765 | 766 | * Confiance en NOUS 767 | 768 | ] 769 | 770 | --- 771 | layout: false 772 | .left-column[ 773 | # Conclusion 774 | ## Qu'à t'on appris ? 775 | ## Le bon et le moins bon 776 | ] 777 | .right-column[ 778 | 779 | # Pas cool 780 | * GUI : des difficultés et bugs bizarre 781 | * Adhésion et motivation nécessaires 782 | 783 | # Cool 784 | * Performances 785 | * CLI : parfait 786 | * Excellent indicateur de la culture de vos devs. 787 | * Notre intuition est correcte: 788 | * Encore rien rencontré de bloquant et très, très prometteur. 789 | * Il y a encore du travail 790 | * j'attend avec impatience l'épreuve du feu (situation réelle) 791 | 792 | # Améliorations 793 | * Processus de release rigoureux avec le DockerHub 794 | * README à améliorer (contributions ? ) 795 | ] 796 | 797 | --- 798 | template: inverse 799 | 800 | # The end 801 | ## Thanks ! Questions ? 802 | 803 | --- 804 | # Crédits images 805 | 806 | * chokotoff2.jpg - http://www.bonbonsgourmands.fr/Bonbons-envelopp%C3%A9s-34-1.html 807 | * belgianBeers.jpg - http://www.lessentiel.lu/fr/lifestyle/tendances/story/23830677 808 | * defile20106.jpg - http://www.noblesseetroyautes.com/2010/07/la-famille-royale-belge-au-defile-militaire-de-la-fete-nationale/ 809 | * bruxelles_brussels.jpg - https://chaudoir.wordpress.com/2009/11/25/tout-est-dit-dans-un-seul-panneau/ 810 | * sortieDePiste.png - http://www.pixauto.net/2011/tour-auto/circuit-du-vigeant.php/ and http://motorsport.nextgen-auto.com/12-tours-pour-Grosjean-et-une-sortie-de-piste-Maldonado-bloque-au-stand,73785.html 811 | * toolbox.png - http://www.autostock04.fr/ and http://buildingabrandonline.com/BrianElrod/promote-products-with-an-affiliate-toolbox/ 812 | * eliminates-matrix-from-hell.png - http://dduportal.github.io/presentations/docker-meetup-lyon-20140528/ 813 | * continuousintegrationcycle.png - http://blog.anthonybaker.me/2012/05/about-continuous-integration.html 814 | * vitr.jpg - ? 815 | * gitflow.jpg - https://www.atlassian.com/pt/git/workflows#!workflow-gitflow 816 | 817 | -------------------------------------------------------------------------------- /slides/styles/google-font-Droid+Serif.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Droid Serif'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: local('Droid Serif'), local('DroidSerif'), url(../fonts/0AKsP294HTD-nvJgucYTaJ0EAVxt0G0biEntp43Qt6E.ttf) format('truetype'); 6 | } 7 | @font-face { 8 | font-family: 'Droid Serif'; 9 | font-style: normal; 10 | font-weight: 700; 11 | src: local('Droid Serif Bold'), local('DroidSerif-Bold'), url(../fonts/QQt14e8dY39u-eYBZmppwZ_TkvowlIOtbR7ePgFOpF4.ttf) format('truetype'); 12 | 13 | } 14 | @font-face { 15 | font-family: 'Droid Serif'; 16 | font-style: italic; 17 | font-weight: 400; 18 | src: local('Droid Serif Italic'), local('DroidSerif-Italic'), url(../fonts/cj2hUnSRBhwmSPr9kS589-LrC4Du4e_yfTJ8Ol60xk0.ttf) format('truetype'); 19 | } 20 | -------------------------------------------------------------------------------- /slides/styles/google-font-Ubuntu+Mono.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Ubuntu Mono'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: local('Ubuntu Mono'), local('UbuntuMono-Regular'), url(../fonts/ViZhet7Ak-LRXZMXzuAfkZ0EAVxt0G0biEntp43Qt6E.ttf) format('truetype'); 6 | } 7 | @font-face { 8 | font-family: 'Ubuntu Mono'; 9 | font-style: normal; 10 | font-weight: 700; 11 | src: local('Ubuntu Mono Bold'), local('UbuntuMono-Bold'), url(../fonts/ceqTZGKHipo8pJj4molytp_TkvowlIOtbR7ePgFOpF4.ttf) format('truetype'); 12 | } 13 | @font-face { 14 | font-family: 'Ubuntu Mono'; 15 | font-style: italic; 16 | font-weight: 400; 17 | src: local('Ubuntu Mono Italic'), local('UbuntuMono-Italic'), url(../fonts/KAKuHXAHZOeECOWAHsRKA-LrC4Du4e_yfTJ8Ol60xk0.ttf) format('truetype'); 18 | } 19 | -------------------------------------------------------------------------------- /slides/styles/google-font-Yanone+Kaffeesatz.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Yanone Kaffeesatz'; 3 | font-style: normal; 4 | font-weight: 400; 5 | /*src: local('Yanone Kaffeesatz Regular'), local('YanoneKaffeesatz-Regular'), url(http://fonts.gstatic.com/s/yanonekaffeesatz/v7/YDAoLskQQ5MOAgvHUQCcLbvy90DtE_Pg_qiF9bHvTzw.ttf) format('truetype');*/ 6 | src: local('Yanone Kaffeesatz Regular'), local('YanoneKaffeesatz-Regular'), url(../fonts/YDAoLskQQ5MOAgvHUQCcLbvy90DtE_Pg_qiF9bHvTzw.ttf) format('truetype'); 7 | } 8 | -------------------------------------------------------------------------------- /slides/styles/presentation.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 'Droid Serif'; 3 | } 4 | h1, h2, h3 { 5 | font-family: 'Yanone Kaffeesatz'; 6 | font-weight: 400; 7 | margin-bottom: 0; 8 | } 9 | .remark-code, .remark-inline-code { 10 | font-family: 'Ubuntu Mono'; 11 | } 12 | .remark-slide-content { 13 | padding-left: 2em; 14 | } 15 | .remark-slide-content h1 { font-size: 3em; } 16 | .remark-slide-content h2 { font-size: 2em; } 17 | .remark-slide-content h3 { font-size: 1.6em; } 18 | .footnote { 19 | position: absolute; 20 | bottom: 3em; 21 | } 22 | li p { line-height: 1.25em; } 23 | .red { color: #fa0000; } 24 | .large { font-size: 2em; } 25 | a, a > code { 26 | color: rgb(249, 38, 114); 27 | text-decoration: none; 28 | } 29 | code { 30 | -moz-border-radius: 5px; 31 | -web-border-radius: 5px; 32 | background: #e7e8e2; 33 | border-radius: 5px; 34 | } 35 | .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; } 36 | .remark-code-line-highlighted { background-color: #373832; } 37 | .pull-left { 38 | float: left; 39 | width: 47%; 40 | } 41 | .pull-right { 42 | float: right; 43 | width: 47%; 44 | } 45 | .pull-right ~ p { 46 | clear: both; 47 | } 48 | #slideshow .slide .content code { 49 | font-size: 0.8em; 50 | } 51 | #slideshow .slide .content pre code { 52 | font-size: 0.9em; 53 | padding: 15px; 54 | } 55 | .inverse { 56 | background: #272822; 57 | color: #777872; 58 | text-shadow: 0 0 20px #333; 59 | } 60 | .inverse h1, .inverse h2 { 61 | color: #f3f3f3; 62 | line-height: 0.8em; 63 | } 64 | 65 | /* Slide-specific styling */ 66 | #slide-inverse .footnote { 67 | bottom: 12px; 68 | left: 20px; 69 | } 70 | #slide-how .slides { 71 | font-size: 0.9em; 72 | position: absolute; 73 | top: 151px; 74 | right: 140px; 75 | } 76 | #slide-how .slides h3 { 77 | margin-top: 0.2em; 78 | } 79 | #slide-how .slides .first, #slide-how .slides .second { 80 | padding: 1px 20px; 81 | height: 90px; 82 | width: 120px; 83 | -moz-box-shadow: 0 0 10px #777; 84 | -webkit-box-shadow: 0 0 10px #777; 85 | box-shadow: 0 0 10px #777; 86 | } 87 | #slide-how .slides .first { 88 | background: #fff; 89 | position: absolute; 90 | top: 20%; 91 | left: 20%; 92 | z-index: 1; 93 | } 94 | #slide-how .slides .second { 95 | position: relative; 96 | background: #fff; 97 | z-index: 0; 98 | } 99 | 100 | /* Two-column layout */ 101 | .left-column { 102 | color: #777; 103 | width: 9em; 104 | height: 92%; 105 | float: left; 106 | } 107 | .left-column h1 { 108 | font-size: 2em; 109 | text-align: center; 110 | } 111 | .left-column h2 { 112 | font-size: 1.2em; 113 | } 114 | .left-column h3 { 115 | font-size: 1em; 116 | } 117 | .left-column h2:last-of-type, .left-column h3:last-child { 118 | color: #000; 119 | } 120 | .right-column { 121 | width: 75%; 122 | float: right; 123 | } 124 | .right-column h1 { 125 | text-align: center; 126 | margin-top: 0em; 127 | } -------------------------------------------------------------------------------- /tests/bats/devbox-comon.bats: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bats 2 | 3 | CONTAINER_TEST_NAME=testing_devbox 4 | DEVBOX_IMAGE_NAME=app_devbox 5 | 6 | 7 | run_cmd_in_devbox() { 8 | COMMAND="$*" 9 | docker run \ 10 | -t \ 11 | --name "${CONTAINER_TEST_NAME}" \ 12 | "${DEVBOX_IMAGE_NAME}" \ 13 | ${COMMAND} 14 | } 15 | 16 | teardown() { 17 | # Try to delete the tested container without poluuting stout nor stderr 18 | # Note the || : that will ignore result of the commande since circleCI throw nonsense error whene deleting on btrfs based Docker 19 | docker rm -v "${CONTAINER_TEST_NAME}" 1>&2 2>/dev/null || : 20 | } 21 | 22 | @test "Check JDK presence" { 23 | run_cmd_in_devbox which java 24 | } 25 | 26 | @test "Check MVN presence" { 27 | run_cmd_in_devbox which mvn 28 | } 29 | 30 | @test "Default user is dockerx" { 31 | [ "$(run_cmd_in_devbox whoami | grep dockerx | wc -l)" -eq 1 ] 32 | } 33 | 34 | @test "Check that dockerx can sudo whithout password" { 35 | run_cmd_in_devbox sudo whoami 36 | } 37 | 38 | @test "We use lxde" { 39 | run_cmd_in_devbox which lxde-logout 40 | } 41 | 42 | @test "We have a shortcut for IDEA in the lxde start menu" { 43 | run_cmd_in_devbox [ -f /usr/share/applications/idea.desktop ] 44 | teardown 45 | run_cmd_in_devbox [ -f /opt/idea/idea.png ] 46 | teardown 47 | [ $(run_cmd_in_devbox grep -i idea /usr/share/applications/idea.desktop | wc -l) -ge 1 ] 48 | } 49 | 50 | @test "We have our preferred icons in the main taskbar, ont the top screen" { 51 | run_cmd_in_devbox [ -f /home/dockerx/.config/lxpanel/LXDE/panels/panel ] 52 | teardown 53 | # Top-edged task bar 54 | [ $(run_cmd_in_devbox grep 'edge=top' /home/dockerx/.config/lxpanel/LXDE/panels/panel | wc -l) -ge 1 ] 55 | teardown 56 | # IntelliJ Idea 57 | [ $(run_cmd_in_devbox grep 'idea.desktop' /home/dockerx/.config/lxpanel/LXDE/panels/panel | wc -l) -ge 1 ] 58 | teardown 59 | # Mozilla Firefox 60 | [ $(run_cmd_in_devbox grep 'firefox.desktop' /home/dockerx/.config/lxpanel/LXDE/panels/panel | wc -l) -ge 1 ] 61 | teardown 62 | # Our LXTerminal 63 | [ $(run_cmd_in_devbox grep 'lxterminal.desktop' /home/dockerx/.config/lxpanel/LXDE/panels/panel | wc -l) -ge 1 ] 64 | } 65 | 66 | @test "We have Firefox installed and shortcut' to the main taskbar and start menu" { 67 | run_cmd_in_devbox which firefox 68 | teardown 69 | run_cmd_in_devbox [ -f /usr/share/applications/firefox.desktop ] 70 | teardown 71 | } 72 | 73 | @test "We don't have iceweasel installed anymore (a debian web browser that can cofnlict with firefox)" { 74 | [ $(run_cmd_in_devbox dpkg -l | grep iceweasel | grep "^ii" | wc -l) -eq 0 ] 75 | } 76 | 77 | @test "We have data volumes for some I/O bounds directories and working directories" { 78 | run_cmd_in_devbox ls -l /data 79 | [ $(docker inspect -f '{{index .Volumes "/tmp"}}' "${CONTAINER_TEST_NAME}" | grep 'no value' | wc -l ) -eq 0 ] 80 | [ $(docker inspect -f '{{index .Volumes "/data"}}' "${CONTAINER_TEST_NAME}" | grep 'no value' | wc -l ) -eq 0 ] 81 | [ $(docker inspect -f '{{index .Volumes "/var/log"}}' "${CONTAINER_TEST_NAME}" | grep 'no value' | wc -l ) -eq 0 ] 82 | [ $(docker inspect -f '{{index .Volumes "/var/cache"}}' "${CONTAINER_TEST_NAME}" | grep 'no value' | wc -l ) -eq 0 ] 83 | } 84 | 85 | @test "/data folder is writeable by dockerx" { 86 | run_cmd_in_devbox touch /data/test_file 87 | } 88 | 89 | @test "Check GIT presence" { 90 | run_cmd_in_devbox which git 91 | } 92 | --------------------------------------------------------------------------------