How-to: Install specific version of Docker in a Vagrant box with CentOS 7.5 using SSH

Overview

This example illustrates how the SSH plugin can be used to install Docker in a specific version on CentOS 7.5. The example installs Docker and starts the daemon using systemd.

This example modifies the How-to: Install latest Docker version in a Vagrant box with CentOS 7.6 using SSH example.

The model file

The model file named linux-vagrant.xml has the content:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mmd:models xmlns:mmd="http://pineapple.dev.java.net/ns/module_model_1_0"     
    xmlns:shp="http://pineapple.dev.java.net/ns/plugin/ssh_1_0" >
    <mmd:variables>
      <mmd:variable key="tmp-dir" value="/tmp" />   
      <mmd:variable key="docker-version" value="17.03.1.ce" />                      
      <mmd:variable key="docker-source-config.d" value="docker.conf" />    
      <mmd:variable key="docker-target-config-dir" value="/etc/systemd/system/docker.service.d" />          
      <mmd:variable key="docker-target-config.d" value="docker.conf" />                
      <mmd:variable key="create-user-script" value="create-docker-user.sh" />          
    </mmd:variables>
        
      <mmd:model target-resource="ssh-node1" target-operation="deploy-configuration" description="Create and add Docker user to sudoers" >
        <mmd:content>
        <shp:ssh>
          <shp:copy-to source="modulepath:bin/${create-user-script}" destination="/tmp/${create-user-script}" chmod="775 "/>
          <shp:execute command="sudo /tmp/${create-user-script}" />            
        </shp:ssh>                      
      </mmd:content>
    </mmd:model>

   <mmd:model target-resource="ssh-node1" target-operation="deploy-configuration" description="Update YUM (can take some time)" >
      <mmd:content>
        <shp:ssh>
        <shp:execute command="sudo yum --assumeyes update" />
        </shp:ssh>              
      </mmd:content>
    </mmd:model>

   <mmd:model target-resource="ssh-node1" target-operation="deploy-configuration" description="Add Docker repository to YUM" >
      <mmd:content>
        <shp:ssh>
          <shp:execute command="sudo yum install -y yum-utils device-mapper-persistent-data lvm2" />                                                                                
          <shp:execute command="sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo" />  
          <shp:execute command="sudo yum -y update" />  
        </shp:ssh>              
      </mmd:content>
    </mmd:model>
         
    <mmd:model target-resource="ssh-node1" target-operation="deploy-configuration" description="Install Docker" >
      <mmd:content>
        <shp:ssh>        
          <shp:execute command="sudo yum --assumeyes --setopt=obsoletes=0 install docker-ce-${docker-version}-1.el7.centos" />     
          <shp:execute command="sudo mkdir ${docker-target-config-dir}" />                                                                          
          <shp:copy-to source="modulepath:bin/${docker-source-config.d}" destination="${tmp-dir}/${docker-source-config.d}" chmod="775" />
          <shp:execute command="sudo mv ${tmp-dir}/${docker-source-config.d} ${docker-target-config-dir}/${docker-target-config.d}" />                                                                    
          <shp:execute command="sudo systemctl enable docker" />           
          <shp:execute command="sudo systemctl start docker" /> 
        </shp:ssh>                      
      </mmd:content>
    </mmd:model>

    <mmd:model target-resource="ssh-node1" target-operation="deploy-configuration" description="Validate Docker installation" >
      <mmd:content>
        <shp:ssh>        
          <shp:assert-contains command="sudo systemctl status docker" expected-value="Daemon has completed initialization"/>                     
          <shp:assert-contains command="sudo systemctl status docker" expected-value="API listen on /var/run/docker.sock"/>           
          <shp:assert-contains command="sudo systemctl status docker" expected-value="API listen on [::]:8082"/>           
        </shp:ssh>                      
      </mmd:content>
    </mmd:model>

    <mmd:model target-resource="ssh-node1" target-operation="undeploy-configuration" description="Uninstall Docker" >
      <mmd:content>
        <shp:ssh>        
          <shp:execute command="sudo systemctl stop docker.service" /> 
          <shp:execute command="sudo yum -y remove docker-engine.x86_64 " /> 
          <shp:execute command="sudo rm -rf /var/lib/docker" /> 
        </shp:ssh>                      
      </mmd:content>
    </mmd:model>

</mmd:models>

Locate the variable:

        <mmd:variable key="docker-version" value="17.03.1.ce" />                    

and replace the value with version of the requested version. Here version 17.03.1.ce will be installed. For a list of the alternate docker versions for CentOS 7, please visit https://download.docker.com/linux/centos/7/x86_64/stable/Packages/