Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Docker for (Java) Developers

1.282 visualizaciones

Publicado el

This presentation gives an overview of docker, docker-machine, docker-compose and docker-swarm .

Publicado en: Tecnología

Docker for (Java) Developers

  2. 2. 1. Docker concepts 2. Creating docker hosts with docker-machine 3. Running docker 4. Creating docker images 5. Running an Application Server in Docker 6. Changing container behaviour 7. 3 ways to deploy an application 8. Composing with docker-compose 9. docker-swarm overview 10. Questions? AGENDA
  3. 3. Who am I ? My name is Rafael Benevides I work for Red Hat since 2009 JBoss Developer Materials lead Apache DeltaSpike PMC member Middleware DevOps "guy" Some facts about me “ My work consists to help developers worldwide to be more effective in software development and promote tools and practices that help them to be more productive."e-mail: Twitter: @rafabene
  4. 4. DISCLAIMER This presentation should take 45 minutes It will be 80% live-coding It won't cover "What is docker?", "Installing docker", "Motivations to use docker" topics But you will see/learn how to use docker and take you own conclusions about the motivations to start using it.
  5. 5. Docker Hello world Docker Client Docker Hub Docker Host Daemon Image 1 Image 2 Image 3 Image 1 Image 2 Image 3 Container 1 Container 2 docker run <image x> docker run hello-world docker run <image x> unix:///var/run/docker.sock
  6. 6. Docker Machine A L L O W S T H E C R E A T I O N O F D O C K E R H O S T SA L L O W S T H E C R E A T I O N O F D O C K E R H O S T S DRIVERSDRIVERS 1. AWS - Amazon Web Services 2. Digital Ocean 3. Exoscale 4. Generic ( Fedora, RHEL, CentOS, ... ) 5. GCE - Google Compute Enginer 6. IBM Softlayer 7. Microsoft Azure / Hyper-V 8. OpenStack 9. Oracle VirtualBox 10. Rackspace 11. VMware Fusion / vCloud Air / vSphere USEFUL COMMANDSUSEFUL COMMANDS docker-machine create -d <driver> <name> docker-machine ls docker env <name> ENV VARSENV VARS DOCKER_TLS_VERIFY DOCKER_HOST DOCKER_CERT_PATH DOCKER_MACHINE_NAME
  7. 7. Docker commands DOCKER RUNDOCKER RUN Creates a new container docker run <image> command docker run -it <image> command docker run --name -it <image> command docker run --name --rm -it <image> command docker run -d fedora /bin/bash -c "while true; do echo hello world; sleep 1; done"
  8. 8. Docker commands OT HE R DOCK ER COMMANDSOT HE R DOCK ER COMMANDS docker ps / docker ps -a docker stop <container> / docker stop -t=1 <container> docker rm <container> / docker rm `docker ps -aq` docker logs <container> / docker logs -f <container> docker attach <container> docker stats <container>
  9. 9. 2 Ways to create Docker Images COMMIT WAYCOMMIT WAY docker commit -m "<menssage>" <image name> docker history <image name> DOCKERFILE WAYDOCKERFILE WAY docker build -t <tag> <dockerfile path> DOCKERFILE REFDOCKERFILE REF FROM MAINTAINER WORKDIR ENV RUN COPY ADD EXPOSE VOLUME USER CMD
  10. 10. Dockerfile anatomy # Use latest jboss/base-jdk:7 image as the base FROM jboss/base-jdk:8 # Set the WILDFLY_VERSION env variable ENV WILDFLY_VERSION 9.0.0.Final # Add the WildFly distribution to /opt, and make wildfly the owner of the extracted tar content # Make sure the distribution is available from a well-known place RUN cd $HOME && curl$WILDFLY_VERSION/wildfly-$WILDFLY_VERSION.tar.gz | tar zx & # Set the JBOSS_HOME env variable ENV JBOSS_HOME /opt/jboss/wildfly # Expose the ports we're interested in EXPOSE 8080 # Set the default command to run on boot # This will boot WildFly in the standalone mode and bind to all interface CMD ["/opt/jboss/wildfly/bin/", "-b", ""] WildFly Image example
  11. 11. Changing container behaviour CHANGING ENV VARCHANGING ENV VAR docker run -e ... EXPOSING PORTSEXPOSING PORTS docker run -P ... docker run -p <host:container> ... docker-machine ip MOUTING VOLUMESMOUTING VOLUMES docker run -v <host:container> ...
  12. 12. 3 Ways to deploy an application 1 - MOUNTING A VOLUME1 - MOUNTING A VOLUME docker run -v <host:container> ... 2 - ADMINISTRATIVE CONSOLE2 - ADMINISTRATIVE CONSOLE docker run -p <host:port> ... 3 - INCLUDE INSIDE THE IMAGE3 - INCLUDE INSIDE THE IMAGE Dockerfile ADD your-awesome-app.war /opt/jboss/wildfly/standalone/deployments/
  13. 13. Cluster example Apache HTTPD + mod_cluster Postgres database WildFly instances
  14. 14. Linking containers [ jboss@22ac4068f95f ~]$ cat /etc/hosts 22ac4068f95f localhost db 84e9fc3e4455 modcluster 13784a898c33 Environment Variables $DB_NAME $DB_ENV_LANG $DB_ENV_PG_VERSION $DB_ENV_PGDATA $DB_ENV_POSTGRES_PASSWORD $DB_ENV_PG_MAJOR $DB_ENV_POSTGRES_USER $DB_PORT $DB_PORT_5432_TCP $DB_PORT_5432_TCP_PROTO $DB_PORT_5432_TCP_ADDR $DB_PORT_5432_TCP_PORT $MODCLUSTER_NAME $MODCLUSTER_PORT_80_TCP $MODCLUSTER_PORT_80_TCP_PORT $MODCLUSTER_PORT $MODCLUSTER_PORT_80_TCP_ADDR $MODCLUSTER_PORT_80_TCP_PROTO docker run --link <container_name:alias>
  15. 15. Docker compose docker-compose.yaml db: image: postgres ports: - "5432:5432" environment: - POSTGRES_USER=ticketmonster - POSTGRES_PASSWORD=ticketmonster-docker modcluster: image: goldmann/mod_cluster ports: - "80:80" wildfly: build: ../Dockerfiles/ticketmonster/ links: - db:db - modcluster:modcluster docker-compose up -d docker-compose ps docker-compose logs docker-compose build docker-compose scale <service>=x
  16. 16. DISCLAIMER You're about to see an overview of docker- swarm Some issues found: machine restart cross-host linking
  17. 17. Docker Swarm Discovery Services Docker Hub Static file Static list etcd consul zookeeper
  18. 18. Creating a Docker Swarm echo "Creating cluster ..." TOKEN=`docker run swarm create` echo "Got the token " $TOKEN echo "Creating Swarm master ..." docker-machine create -d virtualbox --swarm --swarm-master --swarm-strategy=spread --swarm-discovery token://$TOKEN swarm-master echo "Creating Swarm node 01 ..." docker-machine create -d virtualbox --swarm --swarm-discovery token://$TOKEN swarm-node-01 echo "Creating Swarm node 02 ..." docker-machine create -d virtualbox --swarm --swarm-discovery token://$TOKEN swarm-node-02 eval "$(docker-machine env --swarm swarm-master)" Strategy spread* binpack random
  19. 19. Kubernetes
  20. 20. Github code /rafabene /devops-demo