I’ve been building a docker image for Heketi and noticed that the image size was more than 3 times the size of a base Centos 7 image. Searching on google, I came across this page on optimizing docker images. Now, I understand why the Dockerfiles spread across github have multi-line RUN commands.
My docker image started with a size of around 698.2 MB. Now it’s just 198.5MB.
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE heketi/heketi centos7 eda2e47811c6 15 seconds ago 198.5 MB docker.io/centos latest ce20c473cd8a 5 days ago 172.3 MB
You can take a look at the Dockerfile I created.
I’ve used Vagrant previously for testing something and forgot about it. Now, I need a Fedora server to test something. So, I thought, why not use Vagrant to do what I want. And as I’m wont to do, I wanted to document it. So here goes nothing and everything.
I’m using a Mac, so I’m obviously going to use Homebrew to install everything I need. Before we proceed, let’s first install cask, cause we’ll need that to install our packages.
$ brew install caskroom/cask/brew-cask
That’s done. Let’s install vagrant and virtualbox next.
$ brew cask install virtualbox $ brew cask install vagrant
Next, let’s get the Fedora images. Make sure you get the image for vagrant. Here’s the one I downloaded:
~/Downloads $ du -h *.box 209M Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box ~/Downloads $ shasum -a 256 Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box 2513342f70c00310e161a110e34973a133691fedd866859e65904fa056ae7a0c Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box
To be able to use our downloaded image, we’ll need to add it to Vagrant.
~/Cave/Fedora22 $ vagrant box add ~/Downloads/Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box --name fedora-22 ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'fedora-22' (v0) for provider: box: Unpacking necessary files from: file:///Users/sidcarter/Downloads/Fedora-Cloud-Base-Vagrant-22-20150521.x86_64.vagrant-virtualbox.box ==> box: Successfully added box 'fedora-22' (v0) for 'virtualbox'!
After adding the image to vagrant, create a Vagrantfile that’ll use this image.
$ cat Vagrantfile Vagrant.configure(2) do |config| config.vm.box = "fedora-22" end
Let’s start them engines now, shall we? In the directory with the
Vagrantfile, you can do a
vagrant up and you should see this:
~/Cave/Fedora22 $ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'fedora-22'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: Fedora22_default_1444702096982_14160 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 => 2222 (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection timeout. Retrying... default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: No guest additions were detected on the base box for this VM! Guest default: additions are required for forwarded ports, shared folders, host only default: networking, and more. If SSH fails on this machine, please install default: the guest additions and repackage the box to continue. default: default: This is not an error message; everything may continue to work properly, default: in which case you may ignore this message. ==> default: Installing rsync to the VM... ==> default: Rsyncing folder: /Users/sidcarter/Cave/Fedora22/ => /vagrant
That’s looking good so far. Let’s login to the box now and look at what we got, shall we?
~/Cave/Fedora22 $ vagrant ssh Last login: Tue Oct 13 02:10:25 2015 from 10.0.2.2 [vagrant@ip-10-0-2-15 ~]$ [vagrant@ip-10-0-2-15 ~]$ cat /etc/fedora-release Fedora release 22 (Twenty Two)
Fantastic! We’re done here. I hope you find this useful.
Python has had awesome string formatters for many years but the documentation on them is far too theoretic and technical. With this site we try to show you the most common use-cases covered by the old and new style string formatting API with practical examples.
This page documents all the little changes between Python 2 and Python 3. Useful, so you can already start programming for the future and dropping the old ways of doing things.
So much has changed between Python 2 and Python 3, there are vanishingly few programs that will run unmodified under both. But don’t despair! To help with this transition, Python 3 comes with a utility script called 2to3, which takes your actual Python 2 source code as input and auto-converts as much as it can to Python 3.
Also, generators are awesome.
A must-watch talk by Clojure creator Rich Hickey on simplicity.