Docker ja Ansible

Kesän yhtenä projektina mainitsin jo aiemmin ‘uusiin’ infrastruktuurityökaluihin paremman tutustumisen ja niiden kunnollisen haltuunottamisen. Tärkeimpänä listalla ovat Docker ja Ansible, jotka toivottavasti ovat monille muillekin jo tuttuja ainakin pintapuolisesti.

Kumpaakaan työkalua ei ole tullut käytettyä vielä kunnolla tuotannossa, mutta tämä on jossain määrin myös muna/kana -ongelma. Jos ei ole kyvykkyyttä ja valmiutta luoda uuta hyötyä uusien työkalujen ja toimintatapojen kautta, ei niitä tule myöskään otettua koskaan käyttöön. Tätä taklatakseni otan kesän aikana aikataulujen puitteissa Dockerin ja Ansiblen käyttöön omassa testiympäristössäni ja kokeilen niiden käyttöä paremmin minulle relevanteissa haasteissa.

Mistä kiinnostus kumpuaa ja mitä ongelmia Docker ja Ansible voisivat ratkaista?

Olen työskennellyt viime vuodet pääasiallisesti JVM-maailman parissa ja monet haasteet, joita Docker on ratkaisemassa eivät sellaisenaan ole olleet polttavia ongelmia minulla esimerkiksi sovellusten rajaamisessa omiksi ympäristöikseen. Docker kuitenkin tarjoaa paljon mahdollisuuksia arkkitehturoida, kehittää, testata ja jaella ohjelmistoja infrastruktuuriin järkevämmin kuin aiemmin, joten ei Dockeria kannata jättää huomioimatta.

Dockerilla on mahdollisuus olla se järkevä abstraktiokerros ja yksikkö, missä erillisiä ohjelmistokyvykkyyksiä kehitetään ja jaellaan arkkitehtuurissa yksikön kielestä ja sisäisestä modulaarisuudesta riippumatta. Tehtäessä internet-softaa, missä javascript-intoilijoista huolimatta edelleenkin on usein käytössä eri kieliä ja komponentteja eri kerroksissa, tämä on selkeä bonus devops-näkökulmasta.

Dockeria voisi luonnehtia tavaksi deployata prosessi sen tarvitsemine liitoksineen host-ympäristöön eristettyinä muista sovelluksista, jotka siellä pyörivät. Erityisen hienoa Dockerissa on se, että se ei rajaa sovellusympäristöä vain yhteen kieleen kuten eri kielten ja ajoympäristöjen aikaisemmat ratkaisut ( esim. Python virtualenv, Rubyn RVM, Javan war-paketoinnit ja sovelluspalvelimet ) – vaan tarjoaa abstraktiotason Linuxin tasolla.

Ansible puolestaan on ympäristöjen konfiguroinnin automatisointityökalu, joka täyttää samaa koloa kuin Chef, Puppet ja monet muut työkalut. Ansible erottuu muista parilla tapaa: ei vaadi clienttia kohdekoneella, kirjoitettu Pythonilla ja selkeät konseptit. Erityisesti viimeinen pointti on tärkeä, sillä on helpompaa saada järjestelmälle hyväksyntää ja jalkautettua se käyttöön organisaatioissa, jos konseptit ovat helppoja ymmärtää.

Yhdessä Ansible ja Docker voivat muodostaa järkevän tavan paketoida ja jaella sovelluksia palvelimille, automatisoiden monia toimenpiteitä sekä korvaten erilisia kotikutoisia skriptejä ja ratkaisuita yhteisellä tavalla. Tällä ajatuksella ja lupauksella ainakin lähden itse selvittämään itselleni paremmin niiden käyttöä - ja kokeilemaan paremmin virtuaalikoneinfran avulla mitä niiden laajempi käyttö oikeasti tarkoittaisi.