All Blog posts

    Running Traefik on Worker Nodes More Securely

    Running Traefik in a Swarm cluster on non-managers can be tricky. There are quick and easy ways, but there are more secure ways. In this post, we'll talk about using a Docker Socket proxy to better protect us.

    Read More  

    Using SSH Connections in Docker Contexts

    Docker Contexts make it easy to manage remote Docker machines. Here's how to use SSH to connect to your remote machines.

    Read More  

    Using DB queries as Prometheus metrics

    Monitoring large migrations can be tough. But, with query-exporter, we were able to export custom queries as Prometheus metrics to feed a Grafana dashboard. Here's how we did it!

    Read More  

    Creating an Elastic QA Env using AWS

    How can you build an elastic QA environment that can support many concurrent stacks, be quickly available, yet minimize costs? I'll tell you how we did it!

    Read More  

    Keeping Docker App Updated

    In my last post, I talked about how we're using Docker App in development. In this post, I dive into how we keep it up-to-date when using several upstream component repos.

    Read More  

    Using Docker App in Development

    My dev team has been using Docker App for 8 months and it has changed everything. Here's what our environment looks like now.

    Read More  

    Sharing Network Namespaces in Docker

    I recently wanted to test a multi-container ECS task definition locally, which means using a single network namespace. But, how? And what does it buy me?

    Read More  

    2018 Recap and 2019 Goals

    2018 was quite a year! Here's a quick recap, as well as goals for the upcoming year!

    Read More  

    Using EC2 Tags to Dynamically Join ECS Cluster

    Here's a quick tip on how to join an ECS cluster at startup using EC2 tags

    Read More  

    DockerCon EU 2018 Takeaways

    DockerCon EU 2018 has come and gone! It was a blast and here are my key takeaways!

    Read More  

    Pro-tip - Using socat to see Docker socket traffic

    Quick pro-tip - use socat to "sniff" the Docker client/server traffic

    Read More  

    Letting Traefik run on Worker Nodes

    If you're using Traefik in Swarm mode, it needs to listen to Docker events. Here's how to do it without having all of your traffic go through manager nodes.

    Read More  

    Leveraging Multi-stage Builds to use a Single Dockerfile for Dev and Prod

    Using multi-stage builds with the target flag, we can use a single Dockerfile for dev and prod

    Read More  

    Sign your commits... or else!

    Why's it important to sign your commits? Here's why! And here's how GitHub/GitLab can make things better

    Read More  

    "You build it, you run it" with Docker and SAM

    We've been working hard to support "You build it, you run it" at Virginia Tech. Here's our journey...

    Read More  

    2017 Recap and 2018 Goals

    2017 was a fantastic year for me. Here's a few of my highlights, as well as where I'd like to go this year.

    Read More  

    DockerCon EU 2017 - Dino Behind the Scenes

    Go behind the scenes to find out the story of the dinos at DockerCon EU!

    Read More  

    Pro Tip - Fail chained commands in Dockerfile RUN

    You build an image. Great! It runs. But, not everything is there. Why not? Could it be a bad RUN command?

    Read More  

    Using Docker Secrets during Development

    Docker Secrets are amazing! Using them in development can be tricky though. Here are four methods to help out.

    Read More  

    Docker is NOT a Hypervisor

    Docker is often portrayed as a hypervisor, but it's not. Here's a quick reminder...

    Read More  

    Introducing Docker Multi-Stage Builds

    Docker has recently merged in support to perform "multi-stage builds." In other words, it allows you to orchestrate a pipeline of builds within a single Dockerfile. Here's a quick rundown...

    Read More  

    Managing Secrets in Docker Swarm

    Docker 1.13 was released just a few days ago (blog post here). With it came several improvements to Docker Swarm. One highly anticipated improvement (at least by me anyways) is secrets management. In this post, we’ll see how to add secrets to a swarm and how to make them available to running services.

    Read More  

    Using Docker to Proxy WebSockets on AWS ELBs

    At the time of this blog post, AWS ELBs don’t support WebSocket proxying when using the HTTP(s) protocol listeners. There are a few blog posts on how to work around it, but it takes some work and configuration. Using Docker, these complexities can be minimized.

    In this post, we’ll start at the very beginning. We’ll spin up an ELB, configure its listeners, and then deploy an application to an EC2 instance.

    Read More  

    Create a Docker 1.12+ Swarm using docker-machine

    DockerCon 2016

    In case you missed it, DockerCon 2016 was amazing! There were several great features announced, with most of it stemming from orchestration is now built-in. You get automatic load balancing (the routing mesh is crazy cool!), easy roll-outs (with healthcheck support), and government-level security by default (which is crazy hard to do by yourself).

    In case you’re a little confused on how to spin up a mini-cluster, this post will show you how. It’s pretty easy to do!

    Read More  

    Writing Functional Tests with Drone and Graphene that Don't Suck

    I’ve been writing functional tests with Drone and Graphene for a while and have picked up a few “best practices” for myself. These best practices are designed around 1) make it obvious what you’re testing and 2) use abstractions when available. After all…

    Quote meme - Always code as if the guy who ends up maintaining your code will be a violent psychopath that knows where you live

    Read More  

    Using Arquillian Drone and Graphene in Standalone Mode

    I’ve been using Arquillian and its testing framework for a few years now and absolutely love it! It’s super easy to manage a server’s lifecycle, deploy applications, and then test them. Drone and Graphene’s extensions also make it incredibly easy to write browser-based tests without getting too down and dirty with the Selenium WebDriver API (which is a little messy).

    Since I love Drone and Graphene, it would be nice to use the page abstractions/fragments on non-Java apps (sure, you can use Arquillian Cube too… but that’s another post). This post will go over what’s needed to run Drone and Graphene in standalone mode.

    Read More  

    Pushing to ECR Using Jenkins Pipeline Plugin

    I’ve been recently spending quite a bit of time in the DevOps space and working to build out better CI/CD pipelines, mostly utilizing Docker. In this post, I demonstrate building out a pipeline that will create a simple Docker image and push it to Amazon’s EC2 Container Registry.

    Read More  

    Creating a Wildfly Docker image with PostgreSQL

    If you’ve been following my blog, you probably already know that I’ve been playing with Docker for a while now. In this post, I will show you how I’m putting together a base Wildfly image and explain why I made some of the decisions I did.

    Read More  

    Converting my blog from Wordpress to Jekyll

    I recently made the decision to cut over my blog from using Wordpress to Jekyll. Might seem like an odd decision, but I’m loving it so far! Here’s why…

    Read More  

    Using Docker for QA Testing

    At work, I’ve recently helped lead a migration to use a Docker-based approach for our QA testing. But first, if you haven’t read about we do our QA testing, you’ll probably want to read that here.

    Read More  

    How we do QA Testing in Agile

    There are many different ideas and approaches for doing QA testing, many of which depend on what project management style you’re using, the developers on the team, and if you have a QA/functional testing team. However, this is how I’ve found it to be successful, based on my observations working on the CREST team at Virginia Tech.

    Read More  

    Marshalling Interfaces in JAX-RS

    In Java, interfaces are used all over the place. Occasionally, these will need to be marshalled into XML/JSON. However, JAX-RS creates its own JAXBContext on its own. So, you may see exceptions like this…

    Foo is an interface, and JAXB can't handle interfaces.
        this problem is related to the following location:
            at Foo
            at public Foo[] Response.getFoo()
            at Response
     
        at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java:160) [resteasy-jaxb-provider-3.0.6.Final.jar:]
        at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.writeTo(AbstractJAXBProvider.java:122) [resteasy-jaxb-provider-3.0.6.Final.jar:]
        at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.writeTo(AbstractWriterInterceptorContext.java:129) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.core.interception.ServerWriterInterceptorContext.writeTo(ServerWriterInterceptorContext.java:62) [resteasy-jaxrs-3.0.6.Final.jar:]
            ...

    Ugly, huh? Here’s how to fix it…

    Read More  

    Using JDBC Security Domain in Wildfly

    As I was going through this task, I ran into the whole “there’s so much documentation, but none of it is working or makes sense” problem that’s so common with the JBoss Application Server. So, this post is designed to help out!

    Read More  

    Using Weld (CDI), JSF, and JAX-RS in Tomcat

    We’ve recently been in the transition from using Spring in a Tomcat environment to Java EE7 in Wildfly? (still finalizing the container of choice).

    Since we’re in transition, we’d like to run the application in both Tomcat and Wildfly, without having to make changes to the bundled application. It should just work on deploy. Here’s how to do it…

    Read More  

    Give a home machine a subdomain using Dreamhost

    Sometimes, it’s nice to give a home machine a subdomain for development purposes, or just for fun! Here’s how to do it through Dreamhost.

    Read More  

    Adding Images to GitHub Wiki Repo

    [Update on April 9, 2014] – updated URL patterns to reflect change in raw GitHub domain names

    Adding images to GitHub is pretty straight forward if you can host the images somewhere or if you can put them into your main repository. But, what if you want them ONLY in the wiki? Here’s how to do it!

    Read More  

    Sharing Web Resources using Maven

    One of the advantages of using Maven is the ability to share common resources across projects. But, how do you do that with web resources, such as CSS, Javascript, and images? Here’s how…

    Read More  

    Continuous Integration with Stash and Jenkins

    [UPDATE] 10/14/2013 – Updated to match version 2.0 of the Stash Webhook for Jenkins

    There are lots of posts about connecting Jenkins with GitHub, but not a lot about connecting Jenkins to Stash. So, hopefully this helps!

    Read More  

    Starting Activity from Sleeping Device

    Building off our AlarmManager, we want the ability to have the alarm appear, even if the device is locked. Here’s how.

    Read More  

    Android – Creating an Alarm with AlarmManager

    There aren’t a lot of good write-ups on how to use the AlarmManager, so here is an example that launches an Activity using the AlarmManager.

    Read More  

    Google Voice Vulnerability

    I’m the type of person that likes to figure out how stuff is architected and built. Whether it’s a building or software, it doesn’t matter.

    One day, I was interested to find out how the process of adding a forwarding number works and if it might be possible to mess with it. Luckily for me, I did find such a way.

    Read More