From 6eb803099090d94144b8a218c021cd0657e5d621 Mon Sep 17 00:00:00 2001 From: Scott Lowe Date: Fri, 17 Feb 2017 16:33:46 -0700 Subject: [PATCH] Add learning environment for customizing Docker on CentOS Atomic Host Add Vagrantfile, YAML data file, and systemd unit files to customize Docker (listen on TCP socket) on CentOS Atomic Host Signed-off-by: Scott Lowe --- centos-atomic/docker-tcp/Vagrantfile | 66 +++++++++++++++++++++ centos-atomic/docker-tcp/docker-socket.conf | 13 ++++ centos-atomic/docker-tcp/docker-tcp.socket | 10 ++++ centos-atomic/docker-tcp/docker.socket | 12 ++++ centos-atomic/docker-tcp/machines.yml | 12 ++++ centos-atomic/docker-tcp/setup.sh | 35 +++++++++++ 6 files changed, 148 insertions(+) create mode 100644 centos-atomic/docker-tcp/Vagrantfile create mode 100644 centos-atomic/docker-tcp/docker-socket.conf create mode 100644 centos-atomic/docker-tcp/docker-tcp.socket create mode 100644 centos-atomic/docker-tcp/docker.socket create mode 100644 centos-atomic/docker-tcp/machines.yml create mode 100755 centos-atomic/docker-tcp/setup.sh diff --git a/centos-atomic/docker-tcp/Vagrantfile b/centos-atomic/docker-tcp/Vagrantfile new file mode 100644 index 0000000..0bc87d3 --- /dev/null +++ b/centos-atomic/docker-tcp/Vagrantfile @@ -0,0 +1,66 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Specify minimum Vagrant version and Vagrant API version +Vagrant.require_version '>= 1.6.0' +VAGRANTFILE_API_VERSION = '2' + +# Require 'yaml' module +require 'yaml' + +# Read YAML file with VM details (box, CPU, and RAM) +machines = YAML.load_file(File.join(File.dirname(__FILE__), 'machines.yml')) + +# Create and configure the VMs +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + + # Always use Vagrant's default insecure key + config.ssh.insert_key = false + + # Iterate through entries in YAML file to create VMs + machines.each do |machine| + config.vm.define machine['name'] do |srv| + + # Don't check for box updates + srv.vm.box_check_update = false + srv.vm.hostname = machine['name'] + + # Use VMware box by default + srv.vm.box = machine['box']['vmw'] + + # Configure default synced folder (disable by default) + if machine['sync_disabled'] != nil + srv.vm.synced_folder '.', '/vagrant', disabled: machine['sync_disabled'] + else + srv.vm.synced_folder '.', '/vagrant', disabled: true + end #if machine['sync_disabled'] + + # Iterate through networks as per settings in machines.yml + machine['nics'].each do |net| + if net['ip_addr'] == 'dhcp' + srv.vm.network net['type'], type: net['ip_addr'] + else + srv.vm.network net['type'], ip: net['ip_addr'] + end # if net['ip_addr'] + end # machine['nics'].each + + # Configure CPU & RAM per settings in machines.yml (Fusion) + srv.vm.provider 'vmware_fusion' do |vmw| + vmw.vmx['memsize'] = machine['ram'] + vmw.vmx['numvcpus'] = machine['vcpu'] + if machine['nested'] == true + vmw.vmx['vhv.enable'] = 'TRUE' + end #if machine['nested'] + end # srv.vm.provider 'vmware_fusion' + + # Configure CPU & RAM per settings in machines.yml (VirtualBox) + srv.vm.provider 'virtualbox' do |vb, override| + vb.memory = machine['ram'] + vb.cpus = machine['vcpu'] + override.vm.box = machine['box']['vb'] + vb.customize ['modifyvm', :id, '--nictype1', 'virtio'] + vb.customize ['modifyvm', :id, '--nictype2', 'virtio'] + end # srv.vm.provider 'virtualbox' + end # config.vm.define + end # machines.each +end # Vagrant.configure diff --git a/centos-atomic/docker-tcp/docker-socket.conf b/centos-atomic/docker-tcp/docker-socket.conf new file mode 100644 index 0000000..ea41aa7 --- /dev/null +++ b/centos-atomic/docker-tcp/docker-socket.conf @@ -0,0 +1,13 @@ +[Service] +ExecStart= +ExecStart=/usr/bin/dockerd-current -H fd:// \ + --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \ + --default-runtime=docker-runc \ + --exec-opt native.cgroupdriver=systemd \ + --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \ + $OPTIONS \ + $DOCKER_STORAGE_OPTIONS \ + $DOCKER_NETWORK_OPTIONS \ + $ADD_REGISTRY \ + $BLOCK_REGISTRY \ + $INSECURE_REGISTRY diff --git a/centos-atomic/docker-tcp/docker-tcp.socket b/centos-atomic/docker-tcp/docker-tcp.socket new file mode 100644 index 0000000..024a102 --- /dev/null +++ b/centos-atomic/docker-tcp/docker-tcp.socket @@ -0,0 +1,10 @@ +[Unit] +Description=TCP Socket for the Docker API + +[Socket] +ListenStream=2375 +BindIPv6Only=both +Service=docker.service + +[Install] +WantedBy=sockets.target diff --git a/centos-atomic/docker-tcp/docker.socket b/centos-atomic/docker-tcp/docker.socket new file mode 100644 index 0000000..3c5e736 --- /dev/null +++ b/centos-atomic/docker-tcp/docker.socket @@ -0,0 +1,12 @@ +[Unit] +Description=UNIX Socket for the Docker API +PartOf=docker.service + +[Socket] +ListenStream=/var/run/docker.sock +SocketMode=0660 +SocketUser=root +SocketGroup=docker + +[Install] +WantedBy=sockets.target diff --git a/centos-atomic/docker-tcp/machines.yml b/centos-atomic/docker-tcp/machines.yml new file mode 100644 index 0000000..cb03628 --- /dev/null +++ b/centos-atomic/docker-tcp/machines.yml @@ -0,0 +1,12 @@ +--- +- box: + vmw: "bento/centos-7.1" + vb: "centos/atomic-host" + name: "atomic-01" + nested: false + nics: + - type: "private_network" + ip_addr: "dhcp" + ram: "512" + sync_disabled: true + vcpu: "1" diff --git a/centos-atomic/docker-tcp/setup.sh b/centos-atomic/docker-tcp/setup.sh new file mode 100755 index 0000000..76d68e0 --- /dev/null +++ b/centos-atomic/docker-tcp/setup.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +# Stop docker.service +sudo systemctl stop docker.service + +# Make drop-in directory +if [ ! -d "/etc/systemd/system/docker.service.d" ]; then + sudo mkdir -p /etc/systemd/system/docker.service.d +fi + +# Copy docker.socket into place +if [ -f "/home/vagrant/sync/docker.socket" ]; then + sudo cp /home/vagrant/sync/docker.socket /etc/systemd/system/ +fi + +# Copy docker-tcp.socket into place +if [ -f "/home/vagrant/sync/docker-tcp.socket" ]; then + sudo cp /home/vagrant/sync/docker-tcp.socket /etc/systemd/system/ +fi + +# Copy docker.service drop-in into place +if [ -f "/home/vagrant/sync/docker-socket.conf" ]; then + sudo cp /home/vagrant/sync/docker-socket.conf /etc/systemd/system/docker.service.d/ +fi + +# Add docker group +sudo groupadd docker + +# Reload +sudo systemctl daemon-reload + +# Restart services +sudo systemctl start docker.socket +sudo systemctl start docker-tcp.socket +sudo systemctl start docker.service