diff --git a/.gitlab-ci.Dockerfile.e7-testing b/.gitlab-ci.Dockerfile.e7-testing
index 26bf87e656a6087776833300be940bb938b11a9f..420002086f7a3ae34061c7711c3d28ed577b9f38 100644
--- a/.gitlab-ci.Dockerfile.e7-testing
+++ b/.gitlab-ci.Dockerfile.e7-testing
@@ -1,7 +1,7 @@
 # This is a Dockerfile to build an EL7 MKL-optimized GstLAL 
 # runtime container. 
 
-FROM containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7-latest
+FROM containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7-testing
 
 # Labeling/packaging stuff:
 LABEL name="GstLAL Runtime Package, EL7 Testing" \
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 64d3c3311adc81a50c7e843ea5bd160ea264b0cd..9ffbe2e36b0bcf6a12924d43067c3e37cbecd529 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -49,7 +49,7 @@ stages:
 #
 
 .levelN:rpm: &levelN-rpm-package
-  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7-latest
+  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
   variables:
     GIT_STRATEGY: fetch
     RPM_BUILD_CPUS: 4
@@ -110,15 +110,13 @@ level2:rpm:gstlal-burst:
 
 
 test:gstlal:
-  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7-latest
+  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
   stage: test-gstlal
   needs:
     - level0:rpm:gstlal
   script:
     # Install RPMs and set up the test environment:
-    - GLOBIGNORE="*calibration*"
     - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi
-    - unset GLOBIGNORE
     - export GSTLAL_FIR_WHITEN=0
     - gst-inspect-1.0
     
@@ -135,7 +133,7 @@ test:gstlal:
   allow_failure: true
 
 test:gstlal-inspiral:
-  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7-latest
+  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
   stage: test-inspiral
   needs:
     - level0:rpm:gstlal
@@ -143,9 +141,7 @@ test:gstlal-inspiral:
     - level2:rpm:gstlal-inspiral
   script:
     # Install RPMs and set up the test environment:
-    - GLOBIGNORE="*calibration*"
     - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi
-    - unset GLOBIGNORE
     - export GSTLAL_FIR_WHITEN=0
     - gst-inspect-1.0
 
@@ -157,7 +153,7 @@ test:gstlal-inspiral:
   allow_failure: true
 
 test:gstlal-burst:
-  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7-latest
+  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
   stage: test-burst
   needs:
     - level0:rpm:gstlal
@@ -165,9 +161,7 @@ test:gstlal-burst:
     - level2:rpm:gstlal-burst
   script:
     # Install RPMs and set up the test environment:
-    - GLOBIGNORE="*calibration*"
     - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi
-    - unset GLOBIGNORE
     - export GSTLAL_FIR_WHITEN=0
     - gst-inspect-1.0
     - cd gstlal-burst
@@ -178,7 +172,7 @@ test:gstlal-burst:
   allow_failure: true
 
 test:offline:
-  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7-latest
+  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
   stage: test-offline
   needs:
     - level0:rpm:gstlal
@@ -191,9 +185,7 @@ test:offline:
     - test:gstlal-burst
   script:
     # Install RPMs and set up the test environment:
-    - GLOBIGNORE="*calibration*"
     - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi
-    - unset GLOBIGNORE
 
     # Set up directory structure and copy over built-dependencies from container:
     - mkdir public
@@ -230,13 +222,11 @@ test:offline:
   allow_failure: true
   
 pages:
-  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7-latest
+  image: containers.ligo.org/alexander.pace/gstlal-dev/gstlal-dev:el7
   stage: nightly-pages
   script:
     # Install RPMs and set up the test environment:
-    - GLOBIGNORE="*calibration*"
     - if [ -d rpmbuild ]; then yum -y install rpmbuild/RPMS/x86_64/*.rpm; fi
-    - unset GLOBIGNORE
     - gst-inspect-1.0
     - export GSTLAL_FIR_WHITEN=0
 
@@ -274,16 +264,14 @@ docker:el7:
     - mkdir rpms 
 
     # Copy rpms to new container.
-    - GLOBIGNORE="*calibration*"
     - mv rpmbuild/RPMS/x86_64/*.rpm rpms
-    - unset GLOBIGNORE
 
     # Clear out the old rpmbuild directory
     - rm -rf rpmbuild*
 
     # Build the container:
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
-    - docker build --pull -t $DOCKER_BRANCH --file .gitlab-ci.Dockerfile.e7-testing .
+    - docker build --pull -t $DOCKER_BRANCH --file .gitlab-ci.Dockerfile.e7 .
     - docker push $DOCKER_BRANCH
   needs:
     - level0:rpm:gstlal
@@ -291,23 +279,48 @@ docker:el7:
     - level2:rpm:gstlal-calibration
     - level2:rpm:gstlal-inspiral
     - level2:rpm:gstlal-burst
-
   only:
     - schedules
     - pushes
+  except:
+    - /gstlal-([a-z]+-|)[0-9]+\.[0-9]+\.[0-9]+-v[0-9]+/
+
+docker-release:el7:
+  stage: docker
+  before_script: []
+  script:
+    # add RPMs to directory to pass to docker
+    - mkdir rpms 
+
+    # Copy rpms to new container.
+    - mv rpmbuild/RPMS/x86_64/*.rpm rpms
+
+    # Clear out the old rpmbuild directory
+    - rm -rf rpmbuild*
 
+    # Build the container:
+    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
+    - docker build --pull -t $DOCKER_BRANCH --file .gitlab-ci.Dockerfile.e7 .
+    - docker push $DOCKER_BRANCH
+  needs:
+    - level0:rpm:gstlal
+    - level1:rpm:gstlal-ugly
+    - level2:rpm:gstlal-calibration
+    - level2:rpm:gstlal-inspiral
+    - level2:rpm:gstlal-burst
+  only:
+    - /gstlal-([a-z]+-|)[0-9]+\.[0-9]+\.[0-9]+-v[0-9]+/
 
 latest_image:
   stage: docker-latest
   before_script: []
   needs:
-    - docker:el7
+    - docker-release:el7
   only:
-    refs:
-      - master
+    - /gstlal-inspiral-[0-9]+\.[0-9]+\.[0-9]+-v[0-9]+/
   script:
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
     - docker tag $DOCKER_BRANCH $DOCKER_LATEST
     - docker push $DOCKER_LATEST
   retry:
-    max: 2
+    max: 3