Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Blocks in containers

Blocks in containers

Lessons learned from containerizing Minecraft.

Avatar for juliaferraioli

juliaferraioli

May 19, 2016
Tweet

More Decks by juliaferraioli

Other Decks in Technology

Transcript

  1. We need a toy… problem 18 CC image courtesy of

    Glenn Calvin: https://flic.kr/p/5LfNZM
  2. 19 ❔ • ...that predate the surge in container popularity?

    • ...that are understood/used by many? • ...that are complex enough that containerization makes sense ...but simple enough to tackle? What sort of fully-baked apps do we have... 19 ❔ ❔
  3. @juliaferraioli Uh, hello Minecraft? What does Minecraft need? FROM debian:latest

    RUN apt-get update && apt-get install -y curl openjdk-7-jre ENV MC_VERSION 1.8.9 ENV BASE_URL https://s3.amazonaws.com/Minecraft.Download/versions ENV SERVER_FILE minecraft_server RUN mkdir /opt/mc WORKDIR /opt/mc RUN curl $BASE_URL/$MC_VERSION/$SERVER_FILE.$MC_VERSION.jar \ -o minecraft.jar && chmod u+x minecraft.jar CMD java -Xmx1024M -Xms1024M -jar minecraft.jar nogui 22 Java. It needs Java.
  4. @juliaferraioli Building and testing ➜ ~ docker build -t juliaferraioli/mc:v1

    . ➜ ~ docker run -p 25565:25565 -d juliaferraioli/mc:v1 d7d5e58f8833952b51d33c9c63a2b763f1a290d33270245a518d17d689f45f39 ➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES well, . 26
  5. @juliaferraioli I build and run but nothing happens! `-d` means

    detached => when our CMD exits, the container exits => `java -Xmx1024M -Xms1024M -jar minecraft.jar nogui` must have exited 28
  6. @juliaferraioli Okay, let’s remove the flag ➜ ~ docker run

    -p 25565:25565 juliaferraioli/mc:v1 29 [16:33:54] [Server thread/INFO]: Starting minecraft server version 1.9.2 [16:33:54] [Server thread/INFO]: Loading properties [16:33:54] [Server thread/WARN]: server.properties does not exist [16:33:54] [Server thread/INFO]: Generating new properties file [16:33:54] [Server thread/WARN]: Failed to load eula.txt [16:33:54] [Server thread/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info. [16:33:54] [Server thread/INFO]: Stopping server
  7. @juliaferraioli Ohhhhhh... 30 startServer.sh • If there’s already an accepted

    EULA... • or if we accepted through the ENV... • go ahead and start the server. • Else, prompt the user to read the EULA and exit the script CC image courtesy of Betsy Weber: https://flic.kr/p/nE6i31
  8. @juliaferraioli Uh, hello Minecraft? (Reprise) What does Minecraft need? FROM

    debian:latest RUN apt-get update && apt-get install -y curl openjdk-7-jre ENV MC_VERSION 1.8.9 ENV BASE_URL https://s3.amazonaws.com/Minecraft.Download/versions ENV SERVER_FILE minecraft_server RUN mkdir /opt/mc WORKDIR /opt/mc COPY startServer.sh /opt/mc/ RUN curl $BASE_URL/$MC_VERSION/$SERVER_FILE.$MC_VERSION.jar \ -o minecraft.jar && chmod u+x minecraft.jar startServer.sh CMD ./startServer.sh 31 Java. It needs Java. And an accepted EULA.
  9. 35 Ephemerality is hard to grok CC image courtesy of

    Spielbrick Films: https://flic.kr/p/bxSAE4
  10. @juliaferraioli I’m the conductor of this orchestra 37 CC image

    courtesy of Brian Alano: https://flic.kr/p/npdy7U
  11. @juliaferraioli I’m the conductor of this orchestra ➜ ~ kubectl

    run mc --image=gcr.io/octopodes-go-bloop/mc:v2 \ --env="EULA=true" --port=25565 ➜ ~ kubectl expose deployment mc type=LoadBalancer ➜ ~ kubectl describe services mc 38
  12. 40 Breaking out of the machine CC image courtesy of

    Shadowman39: https://flic.kr/p/q1oivr
  13. 41 Lack of boundaries is freeing CC image courtesy of

    Chris Sampson: https://flic.kr/p/C4Ebc4
  14. @juliaferraioli Resources • Minecraft EDU: http://bit.ly/mc-edu • Dockercraft: http://bit.ly/dockercraft •

    Kubernetes: http://bit.ly/k8s-for-users • Beyond ‘Screen Time’: http://bit.ly/beyond-the-screen • Where’s the Ball?: http://bit.ly/wheres-the-ball • Docker documentation: http://bit.ly/docs-docker • Kubecraft (!!!): http://bit.ly/kubecraft 43