Containerizing open-vm-tools – Part 2: Atomic CLI and Converting to a Systems Container

The content of the previous post discussed creating the open-vm-tools container’s Dockerfile and automating its started up via systemd with a unit file.

Open-vm-tools as a service might need to start before the docker runtime or even the network stack, this leads us to runc and system containers. If you’ve finished the first article you have a running open-vm-tools Docker container.

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
5428906cd366        open-vm-tools         "/bin/sh -c /usr/bin/"   13 seconds ago      Up 7 seconds                            admiring_easley

Once you have a local running Docker container, you can import that container into a system container utilizing the atomic CLI. Alternatively, you can install the full container from a registry like; registry.access.redhat.com.  

atomic pull --storage=ostree docker:open-vm-tools
atomic install --system open-vm-tools
systemctl start open-vm-tools
# This will pull the container from a registry
atomic pull --storage ostree registry.access.redhat.com/rhel7/open-vm-tools
atomic install --system registry.access.redhat.com/rhel7/open-vm-tools
systemctl start open-vm-tools 

This process creates a root filesystem under /var/lib/containers/atomic/open-vm-tools for the container’s use. The atomic command additionally creates the systemd unit file and enables the service for subsequent restarts.

runc list
ID              PID         STATUS      BUNDLE                                       CREATED
open-vm-tools   725         running     /var/lib/containers/atomic/open-vm-tools.0   2017-05-22T16:18:45.054839866Z

cat /etc/systemd/system/open-vm-tools.service 

[Unit]
Description=Service for virtual machines hosted on VMware
Documentation=http://github.com/vmware/open-vm-tools
ConditionVirtualization=vmware

[Service]
ExecStart=/bin/runc --systemd-cgroup run 'open-vm-tools'
ExecStop=/bin/runc --systemd-cgroup kill 'open-vm-tools'
WorkingDirectory=/var/lib/containers/atomic/open-vm-tools.0

[Install]
WantedBy=multi-user.target

The open-vm-t0ols vmware-toolbox can be accessed via a runc exec or docker exec as well. Create a wrapper with the command below. This allows vmware-toolbox-cmd and other open-vm-tools commands run from the atomic host without the need to exec into the running container. If you

# runc system container wrapper
echo 'runc exec -t open-vm-tools vmware-toolbox-cmd "$@"' > /usr/local/bin/vmware-toolbox-cmd
chmod +x/usr/local/bin/vmware-toolbox-cmd

# or Docker container
echo 'docker exec -t open-vm-tools vmware-toolbox-cmd "$@"' > /usr/local/bin/vmware-toolbox-cmd
chmod +x/usr/local/bin/vmware-toolbox-cmd
vmware-toolbox-cmd --version
10.0.5.52125 (build-3227872)

The concludes the second part of the containerizing open-vm-tools guide. Installing open-vm-tools as a container in atomic will extend its manageability and functionality on a VMware platform.


Join the Red Hat Developer Program (it’s free) and get access to related cheat sheets, books, and product downloads.

Take advantage of your Red Hat Developers membership and download RHEL today at no cost.


For more information about Red Hat OpenShift and other related topics, visit: OpenShift, OpenShift Online.

Share