<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Useerme</id>
	<title>ICO wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Useerme"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Useerme"/>
	<updated>2026-05-05T11:31:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:Andmesalvestustehnoloogiad&amp;diff=88111</id>
		<title>Category:Andmesalvestustehnoloogiad</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:Andmesalvestustehnoloogiad&amp;diff=88111"/>
		<updated>2015-04-08T18:52:41Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Lühitutvustus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Andmesalvestustehnoloogiad ainekaart=&lt;br /&gt;
&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
&lt;br /&gt;
Õppeaine eesmärk on tutvustada erinevaid andmete salvestamise ja haldamise tehnoloogiate&lt;br /&gt;
põhialuseid.&lt;br /&gt;
Aine käigus õpib tudeng eristama olemasolevaid andmete salvestustehnoloogiaid ning&lt;br /&gt;
praktikumides õpitu põhjal ka kasutama neid reaalses töökeskkonnas.&lt;br /&gt;
Kursuse lõpuks oskab tudeng määratleda salvestustehnoloogia vajadust ettevõttes,&lt;br /&gt;
rakendada õpitud teadmisi süsteemide haldamisel ja loomisel ning varundada olemasolevaid&lt;br /&gt;
salvestustehnoloogiatel põhinevaid süsteeme.&lt;br /&gt;
&lt;br /&gt;
==Lühitutvustus==&lt;br /&gt;
&lt;br /&gt;
Aine nimetus: Andmesalvestustehnoloogiad (Information Storage Technologies)&lt;br /&gt;
&lt;br /&gt;
Aine kood: I395&lt;br /&gt;
&lt;br /&gt;
Aine tüüp: Valikaine&lt;br /&gt;
&lt;br /&gt;
Õppekavadele:  IT süsteemide administreerimine&lt;br /&gt;
&lt;br /&gt;
Õpetamise aeg: sügissemestri II pool&lt;br /&gt;
&lt;br /&gt;
Aine maht: 3 EAP &lt;br /&gt;
&lt;br /&gt;
Hindamisviis: Arvestuslik&lt;br /&gt;
&lt;br /&gt;
Eeldusained: Soovituslik: Operatsioonisüsteemide administreerimine ja sidumine (I233)&lt;br /&gt;
&lt;br /&gt;
Õppejõud: Katrin Loodus (kloodus[at]itcollege.ee), EIK V korrus ruum 516, telefon (6285) 834 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tutvustav loeng (2015): [https://www.youtube.com/watch?v=CAqxUGfSZnQ kuuvarjutuse eri]&lt;br /&gt;
&lt;br /&gt;
Tutvustav loeng (2012): [http://echo360.e-uni.ee/ess/echo/presentation/4c076888-0fdf-462c-b120-8cfb468bb5a2 Videona ] ja [http://enos.itcollege.ee/~kloodus/storage/Andmesalvestustehnoloogiad%20(I395).pdf Slaididena ]&lt;br /&gt;
&lt;br /&gt;
Kommentaar: 2011 ainekava järgi õpetatud tutvustava loengu salvestus: [http://echo360.e-uni.ee/ess/echo/presentation/1a007f96-20a6-4025-9605-1b6184ac2d23 2011. aasta tutvustav loeng]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kaastudengite tagasiside, mis on ÕIS-i kaudu minuni jõudnud: &lt;br /&gt;
&lt;br /&gt;
[http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST2014sygis1.pdf 2014 I (PDF)], [http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST2014sygis2.pdf 2014 II (PDF)] ja [http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST2014sygis_kaugope.pdf 2014 kaugõpe (PDF)]&lt;br /&gt;
&lt;br /&gt;
[http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST2013sygis1.pdf 2013 I (PDF)], [http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST2013sygis2.pdf 2013 II (PDF)] ja [http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST2013sygis_kaugope.pdf 2013 kaugõpe (PDF)]&lt;br /&gt;
&lt;br /&gt;
[http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST_tagasiside_2012.pdf 2012 päevaõpe (PDF)] ja [http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST_tagasiside_kaugope_2012.pdf 2012 kaugõpe (PDF)]&lt;br /&gt;
&lt;br /&gt;
[http://enos.itcollege.ee/~kloodus/storage/Tagasiside/AST_tagasiside_2011.pdf 2011 päevaõpe (PDF)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Õppeaine annab ülevaate erinevatest tänapäevastest suure mahuliste andmete salvestamise ja haldamise tehnoloogiatest. Tutvustakse RAID, LVM, SAN (Storage Area Networks), NAS (Network-Attached Storage), IP SAN, assotsiatiivse andmete salvestamise (content-addressed storage), ja andmete salvestamise virtualiseerimise tehnoloogiaid. Lisaks tutvustataks andmete varundamise ja taastamise põhimõtteid.&lt;br /&gt;
Kursuse läbinu on võimeline projekteerima, rakendama ja haldama andmete salvestuse süsteeme.&lt;br /&gt;
&lt;br /&gt;
==Õppematerjalid==&lt;br /&gt;
&lt;br /&gt;
Aine teemade kohta &#039;&#039;&#039;lühispikker&#039;&#039;&#039; (Freemind baasil &amp;gt;&amp;gt; http://freemind.sourceforge.net/wiki/index.php/Main_Page)&lt;br /&gt;
&lt;br /&gt;
Flashiga avatav: http://enos.itcollege.ee/~kloodus/storage/AST_aineteemad.html&lt;br /&gt;
Freemind tarkvaraga avatav: http://enos.itcollege.ee/~kloodus/storage/AST_aineteemad.mm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I - Kasulikke linke (Jooksvalt täienemisel):&lt;br /&gt;
* http://www.emc.com/products/interoperability/topology-resource-center.htm&lt;br /&gt;
* http://kuutorvaja.eenet.ee/wiki/Salvestusseadmete_kasutamine&lt;br /&gt;
* http://www.hardwaresecrets.com/article/Anatomy-of-a-Hard-Disk-Drive/177 &amp;lt;&amp;lt; Kõvaketta lahkamine&lt;br /&gt;
* http://www.itcollege.ee/blog/2014/11/13/bob-blumridge-public-lecture/ - Avalik loeng salvestustehnoloogiate vallas! (2014)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
II - RAID&lt;br /&gt;
* http://www.linux-mag.com/id/7924/ &amp;lt;&amp;lt; Introduction to RAID (By Jeffrey B. Layton Tuesday, January 4th, 2011)&lt;br /&gt;
* http://www.acnc.com/raidedu/0&lt;br /&gt;
* http://en.wikipedia.org/wiki/RAID&lt;br /&gt;
* http://en.wikipedia.org/wiki/Mdadm&lt;br /&gt;
* http://www.arkf.net/blog/?p=47 &amp;lt;&amp;lt; RAID1 &amp;gt; RAID5 (loe ka kommentaare!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
III - LVM&lt;br /&gt;
* http://www.howtoforge.com/linux_lvm&lt;br /&gt;
* http://www.tldp.org/HOWTO/LVM-HOWTO/&lt;br /&gt;
* http://www.howtogeek.com/howto/40702/how-to-manage-and-use-lvm-logical-volume-management-in-ubuntu/&lt;br /&gt;
* http://wiki.tldp.org/LVM-HOWTO#A13.7._Splitting_a_volume_group&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
IV - Intelligentsed salvestussüsteemid&lt;br /&gt;
* http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/bsdinstall.html &amp;lt;-- FreeBSD install&lt;br /&gt;
* http://doc.freenas.org/index.php/Main_Page &amp;lt;-- FreeNas dokumentatsioon&lt;br /&gt;
* http://www.freenas.org/&lt;br /&gt;
* http://www.freenas.org/images/resources/freenas8.3.0/freenas8.3_guide.html#__RefHeading__978_145473606 &amp;lt;-- FreeNas Manual&lt;br /&gt;
* http://doc.freenas.org/index.php/Unix_(NFS)_Shares&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V - Varundamine ja taaste&lt;br /&gt;
* http://searchdatabackup.techtarget.com/tip/CAS-and-data-deduplication-Partners-in-archiving CAS vs deduplication&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasulikud raamatud:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Storage Concepts: Storing and Managing Digital Data&amp;quot; by Hitachi Data Systems Acadamy&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Information Storage and Management: Storing, Managing, and Protecting Digital Information” by EMC Education Services&lt;br /&gt;
&lt;br /&gt;
==Õppeaine ajakava== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Päevaõppe kava&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th width=&amp;quot;10%&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Õppeaine&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th width=&amp;quot;5%&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th width=&amp;quot;85%&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt; Teema&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;1.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/01_INTRO_loeng_sygis2014.odp Sissejuhatus (OpenDocument)] [http://enos.itcollege.ee/~kloodus/storage/01_INTRO_loeng_sygis2014.pdf (PDF)]  + [http://itcollege.ee/~kloodus/storage/Tasemetest.txt Tasemetest]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;1.2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt; [http://elab.itcollege.ee Virtuaallaborite süsteemiga] tutvumine ja kordamisülesanne [http://enos.itcollege.ee/~kloodus/storage/01_Praktikum_Kettajagude_kordamine.txt (partitsioonid)]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;2.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/02_Loeng_DATA_sygis2014.odp Informatsioon/andmed, andmete elutsükkel, liidesed, salvestusvahendid (OpenDocument)] [http://enos.itcollege.ee/~kloodus/storage/02_Loeng_DATA_sygis2014.pdf (PDF)] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;2.2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Failisüsteemi jõudluse mõõtmise [https://wiki.itcollege.ee/index.php/Linux_failis%C3%BCsteemi_j%C3%B5udluse_m%C3%B5%C3%B5tmine ülesanne]  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;3.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Redundant Array of Independent Disks ehk [http://enos.itcollege.ee/~kloodus/storage/03_RAID_loeng_sygis2013.odp RAID-ide sisemaailm (OpenDocument)] + [http://enos.itcollege.ee/~kloodus/storage/03_RAID_loeng_sygis2013.pdf (PDF)]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;3.2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Tarkvaralise RAID-i tegemine mdadm vahendiga (H)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;4.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Ülevaade [http://enos.itcollege.ee/~kloodus/storage/04_LVM_loeng_sygis2013.odp Logical Volume Manager-ist (OpenDocument)] [http://enos.itcollege.ee/~kloodus/storage/04_LVM_loeng_sygis2013.pdf PDF] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;4.2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/04_Praktikum_LVM.txt LVM vahendite kasutamise praktikum] (H)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;5.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/05_INTSYS_DAS_loeng_sygis2013.odp Sissejuhatus (OpenDocument)] [http://enos.itcollege.ee/~kloodus/storage/05_INTSYS_DAS_loeng_sygis2013.pdf (PDF)] intelligentsetesse salvestussüsteemidesse ja ülevaade DAS tehnoloogiast &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;5.2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/06_Praktikum_FREENAS.txt FreeNAS praktikum] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;6.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Jätk eelmisele teemale: [http://enos.itcollege.ee/~kloodus/storage/06_SAN_IPSAN_NAS_CAS_loeng_sygis2013.odp Ülevaade SAN, IP-SAN, NAS ja CAS tehnoloogiatest (OpenDocument)] [http://enos.itcollege.ee/~kloodus/storage/06_SAN_IPSAN_NAS_CAS_loeng_sygis2013.pdf (PDF)] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;6.2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt; [http://enos.itcollege.ee/~kloodus/storage/06_Praktikum_FREENAS.txt FreeNAS praktikumi] jätk ja kaitsmised (H)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;7.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/07_BACKUP_RECOVERY_loeng_sygis2014.odp Varundamine ja taaste (OpenDocument)] [http://enos.itcollege.ee/~kloodus/storage/07_BACKUP_RECOVERY_loeng_sygis2014.pdf (PDF)]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;7.2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/07_Praktikum_varundamine2014.txt Varundamise ja taaste praktikum] + kaitsmised&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;8.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Seminar: Juhtumiuuringu kaitsmine&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;8.2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Arvestus - praktikumide kaitsmine &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Viide päevaõppe &#039;&#039;&#039;videosalvestusele&#039;&#039;&#039;: https://echo360.e-ope.ee/ess/portal/section/0f56eb5a-f1e5-4980-92d0-51e904ab1dcc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kaugõppe kava&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th width=&amp;quot;10%&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Õppeaine&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th width=&amp;quot;5%&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th width=&amp;quot;85%&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt; Teema&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;1. tund 17.10.2014&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/2014_kaugope/01_Loeng_INTRO_sygis2014.pdf Sissejuhatus (pdf)] [http://enos.itcollege.ee/~kloodus/storage/2014_kaugope/01_Loeng_INTRO_sygis2014.odp (odt)] ainesse + [http://itcollege.ee/~kloodus/storage/Tasemetest.txt Tasemetest] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;2. tund 19.10.2014&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/02_Loeng_DATA_sygis2013.pdf Sissejuhatus (pdf)] [http://enos.itcollege.ee/~kloodus/storage/2013_kaugope/02_Loeng_DATA_sygis2013.odp (odt)] salvestustehnoloogiate juurde + [http://enos.itcollege.ee/~kloodus/storage/01_Praktikum_Kettajagude_kordamine.txt Kettajagude ja saaleala] kordamine&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;3. tund 19.10.2014&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Redundant Array of Independent Disks ehk [http://enos.itcollege.ee/~kloodus/storage/03_RAID_loeng_sygis2012.pdf RAID-ide sisemaailm] + [http://enos.itcollege.ee/~kloodus/storage/03_Praktikum_SOFTWARE_RAID.txt RAIDi praktikum] (H) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;4. tund 07.11.2014&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/2012_Kaugope/04_LVM_loeng_sygis2012.odp Ülevaade Logical Volume Manager-ist] ja LVM vahendite kasutamise praktikum (H)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;5. tund 09.11.2014&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/2012_p2evaope/06_SAN_IPSAN_NAS_CAS_loeng_sygis2012.pdf Ülevaade DAS, SAN, IP-SAN, NAS ja CAS tehnoloogiatest]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;6. tund 09.11.2014&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;[http://enos.itcollege.ee/~kloodus/storage/06_Praktikum_FREENAS.txt FreeNAS praktikum] (H)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;7. tund 28.11.2014&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Ainult praktikumide kaitsmise tund + kodus vaatamiseks/tegemiseks varundamise ja taaste [http://enos.itcollege.ee/~kloodus/storage/2013_kaugope/07_BACKUP_RECOVERY_loeng_sygis2013.pdf loeng], [https://echo360.e-ope.ee/ess/echo/presentation/0d5f0114-6952-476a-8d92-2b53005cd6dc?ec=true loengusalvestus] ning [http://enos.itcollege.ee/~kloodus/storage/07_Praktikum_varundamine.txt praktikum]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;8. tund 28.11.2014&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt;Ainult praktikumide kaitsmise tund&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;9. tund 20.12.2014 10:00 ruumis 217&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td VALIGN=&amp;quot;TOP&amp;quot; ALIGN=&amp;quot;LEFT&amp;quot;&amp;gt; (Arvestuse nädal) Ettekanded!&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Viide kaugõppe &#039;&#039;&#039;videosalvestusele&#039;&#039;&#039;: https://echo360.e-ope.ee/ess/portal/section/0f56eb5a-f1e5-4980-92d0-51e904ab1dcc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Õpiväljundid==&lt;br /&gt;
&lt;br /&gt;
Üliõpilane teab erinevaid andmete salvestamise tehnoloogiaid. Oskab projekteerida,&lt;br /&gt;
rakendada ja hallata vajalikule ning spetsiifilisele andmetesalvestust vajavale rakendusele&lt;br /&gt;
sobivat tehnoloogiat. Teab ja oskab rakendada andmete varundamise, taastamise&lt;br /&gt;
ja replikeerimise tehnoloogiaid. Oskab rakendada andmete haldamise ja turvamise&lt;br /&gt;
kaasaegseid tehnikaid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Õpiväljund1&#039;&#039;&#039;:&lt;br /&gt;
Tudeng oskab kirjeldada ja võrrelda erinevaid andmesalvestustehnoloogiaid&lt;br /&gt;
&lt;br /&gt;
Lävend: &lt;br /&gt;
Tudeng oskab sõnastada ja selgitada aines käsitletud&lt;br /&gt;
andmesalvestustehnoloogiate sisu ning kasutusvaldkondi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Õpiväljund2&#039;&#039;&#039;:&lt;br /&gt;
Tudeng oskab juhtumiuuringus esitatud probleemi lahendada ja saadud&lt;br /&gt;
tulemusi ning järeldusi põhjendada.&lt;br /&gt;
&lt;br /&gt;
Lävend:&lt;br /&gt;
Tudengi tehtud iseseisva töö juhtumiuuringus pakutud lahendus on&lt;br /&gt;
kirjeldatud teemakohaste terminitega ja lahendab tegeliku probleemi&lt;br /&gt;
korrektselt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Õpiväljund3&#039;&#039;&#039;:&lt;br /&gt;
Tudeng oskab rakendada vähemalt ühte andmesalvestustehnoloogiat.&lt;br /&gt;
&lt;br /&gt;
Lävend:&lt;br /&gt;
Tudengi valitud andmesalvestustehnoloogia (nt RAID) on kasutatav andmete&lt;br /&gt;
salvestamiseks pärast seadistamiseks vajalike käskude sisestamist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Õpiväljund4&#039;&#039;&#039;:&lt;br /&gt;
Tudeng teab ja oskab rakendada varundamisvõtteid loodavale või juba&lt;br /&gt;
olemasolevale süsteemile.&lt;br /&gt;
&lt;br /&gt;
Lävend:&lt;br /&gt;
Tudengi rakendatud varundamisplaani tulemusena on andmed tõrke eest&lt;br /&gt;
kaitstud.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Õpiväljund5&#039;&#039;&#039;:&lt;br /&gt;
Tudeng oskab töötada nii iseseisvalt kui ka grupis.&lt;br /&gt;
&lt;br /&gt;
Lävend:&lt;br /&gt;
Tudeng lahendab praktikumides etteantud ülesanded iseseisvalt ja leiab&lt;br /&gt;
lahenduse iseseisva töö raames püstitatud probleemile meeskonnatöö&lt;br /&gt;
tulemusena.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Õpiväljund6&#039;&#039;&#039;:&lt;br /&gt;
Tudeng väljendab end korrektselt ja erialastes terminites nii kõnes kui kirjas.&lt;br /&gt;
&lt;br /&gt;
Lävend:&lt;br /&gt;
Iseseisva töö kirjatöös ja ettekandel kasutab tudeng aines omandatud&lt;br /&gt;
termineid õiges kontekstis.&lt;br /&gt;
&lt;br /&gt;
==Kodutööde/Iseseisvate tööde info== &lt;br /&gt;
&lt;br /&gt;
Iseseisev töö toimub grupitöö vormis.Tudengid uurivad elulistel olukordadel põhinevaid juhtumeid ning pakuvad neile omalt poolt aine käigus omandatud teadmiste põhjal lahendusi. Uurimisele kuuluvad juhtumid on õppejõu poolt (edastatakse grupijuhi meilile). Iseseisva töö tulemusena valmib lühikokkuvõte probleemist, selle olemusest ning pakutud lahendusest, mis omakorda kantakse kaastudengitele suuliselt ette.&lt;br /&gt;
Töö orienteeruv maht on 2-4 lk teksti ning ettekandele kulub orienteeruvalt 15 minutit grupi&lt;br /&gt;
kohta. Grupis võiks olla 2-3 inimest.&lt;br /&gt;
&lt;br /&gt;
==Arvestuse kujunemine== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arvestuse&#039;&#039;&#039; saamiseks peavad olema tehtud:&lt;br /&gt;
 1) suuliselt kaitstud &#039;&#039;&#039;kolm&#039;&#039;&#039; (seitsmest) laborites tehtavast praktilisest ülesandest&lt;br /&gt;
 2) päevaõpe: kantud ette grupitööna valminud iseseisev töö (juhtumiuuring).&lt;br /&gt;
 2) kaugõpe: kantud ette individuaaltööna valminud ettekanne&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boonuspunkte&#039;&#039;&#039; saab:&lt;br /&gt;
&lt;br /&gt;
 1) Teistele teema kohta ettekande tegemise eest (kogemuse jagamine)&lt;br /&gt;
 2) Huvitavate praktikumi ülesannete välja mõtlemise eest&lt;br /&gt;
 3) Praktikumis, õppejõuga kokkuleppel, kaastudengite juhendamise eest&lt;br /&gt;
 4) LUGil ettekande tegemise eest&lt;br /&gt;
 5) Ruumi 417 kettakasti ülessättimise eest&lt;br /&gt;
&lt;br /&gt;
==Tähtajad sügis 2014== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Päevaõppele:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Juhtumuuring: Grupid registreerida:&#039;&#039;&#039; 01.12.2014 &#039;&#039;&#039;.; Grupi valmis kirjatöö esitada e-mailile &#039;&#039;&#039;12.12.2014 kell 12:12&#039;&#039;&#039;; Ettekanded: &#039;&#039;&#039;viimases loengus 16.12.2014&#039;&#039;&#039;;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Praktikumiülesannete kaitsmise viimane tähtaeg: &#039;&#039;&#039;arvestuse päeval ehk 16.12.2014&#039;&#039;&#039;;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kaugõppele:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ettekande teema teatamine &#039;&#039;&#039;12.12.2014&#039;&#039;&#039;; ettekanne teha hiljemalt: &#039;&#039;&#039;20.12.2014&#039;&#039;&#039;;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Praktikumiülesannete kaitsmise viimane tähtaeg: &#039;&#039;&#039;arvestuse päeval 20.12.2014&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Kiitus/Laitus/Ettepanekud/KKK==&lt;br /&gt;
&lt;br /&gt;
Aita kaasõpilastel ja endal elu paremaks teha ning kirjuta oma ettepanekud, konstruktiivne kriitika ja kiitused aadressil &#039;&#039;&#039;kloodus@itcollege.ee&#039;&#039;&#039;, et saaksin ainet paremaks muuta või muutmata jätta. Aitäh!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tudengite poolt tehtud wiki artiklid (2011 aastast)==&lt;br /&gt;
&lt;br /&gt;
[[Artikli kondikava ]]&lt;br /&gt;
&lt;br /&gt;
[[SSD kettad]]&lt;br /&gt;
&lt;br /&gt;
[[RAID]]&lt;br /&gt;
&lt;br /&gt;
[[DAS]]&lt;br /&gt;
&lt;br /&gt;
[[SAN]]&lt;br /&gt;
&lt;br /&gt;
[[NAS]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85804</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85804"/>
		<updated>2015-01-11T19:34:47Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi, kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras, mida kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii &#039;&#039;hypervisor&#039;&#039; tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamisele, terve OS-i paigaldamisele ja paljule muule sellega kaasnevale. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinereid kasutades vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i &#039;&#039;kerneli&#039;&#039; najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud.&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; Otsustades, mida millal kasutusele võtta, tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85803</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85803"/>
		<updated>2015-01-11T19:34:21Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi, kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras, mida kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii &#039;&#039;hypervisor&#039;&#039; tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamisele, terve OS-i paigaldamisele ja paljule muule sellega kaasnevale. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinereid kasutades vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i &#039;&#039;kerneli&#039;&#039; najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt;. Otsustades, mida millal kasutusele võtta, tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85802</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85802"/>
		<updated>2015-01-11T19:33:47Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi, kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras, mida kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii &#039;&#039;hypervisor&#039;&#039; tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamisele, terve OS-i paigaldamisele ja paljule muule sellega kaasnevale. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinereid kasutades vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i &#039;&#039;kerneli&#039;&#039; najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85801</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85801"/>
		<updated>2015-01-11T19:31:09Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi, kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras, mida kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii &#039;&#039;hypervisor&#039;&#039; tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamisele, terve OS-i paigaldamisele ja paljule muule sellega kaasnevale. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85800</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85800"/>
		<updated>2015-01-11T19:30:52Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi, kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras, mida kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii &#039;&#039;hypervisor&#039;&#039; tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamisele, terve OS-i paigaldamisele ja palju muud sellega kaasnevale. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85799</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85799"/>
		<updated>2015-01-11T19:29:35Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi, kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras, mida kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii &#039;&#039;hypervisor&#039;&#039; tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85796</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85796"/>
		<updated>2015-01-11T19:26:40Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi, kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras, mida kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85790</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85790"/>
		<updated>2015-01-11T19:20:41Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Täiendamine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi, kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85783</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85783"/>
		<updated>2015-01-11T19:18:35Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Loomine ja käivitamine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude (nagu &#039;&#039;apt-get update&#039;&#039;) tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85780</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85780"/>
		<updated>2015-01-11T19:17:37Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Loomine ja käivitamine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel - kirjutatakse esmalt Dockeripõhine juhis, millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude, nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85775</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85775"/>
		<updated>2015-01-11T19:10:19Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Sissejuhatavad tegevused */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85774</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85774"/>
		<updated>2015-01-11T19:09:09Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Sissejuhatavad tegevused */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteiner töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85773</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85773"/>
		<updated>2015-01-11T19:08:20Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Sissejuhatavad tegevused */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kus -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85772</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85772"/>
		<updated>2015-01-11T19:07:50Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Sissejuhatavad tegevused */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusj -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85768</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85768"/>
		<updated>2015-01-11T19:04:53Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Uusim */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85766</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85766"/>
		<updated>2015-01-11T19:04:42Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Tavapärane */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus, käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85765</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85765"/>
		<updated>2015-01-11T19:04:24Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Tavapärane */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem kui ametlik versioon. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85764</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85764"/>
		<updated>2015-01-11T19:03:28Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Info ja eeldused */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtu viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85741</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85741"/>
		<updated>2015-01-11T16:00:24Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt; ja otsustades, mida millal kasutusele võtta tuleks läbi mõelda eelkõige, mida saavutada tahetakse.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85740</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85740"/>
		<updated>2015-01-11T15:58:53Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest.&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kasutades konteinereid vähendatakse hallatavate OS-ide arvu, kuna kõik konteinerid töötavad ühe jagatud OS-i kerneli najal; toimub migratsioon kiiremini, sest mahud piirduvad megabaitidega, mitte gigabaitidega; lihtsustatakse OS-idel uuenduste tegemist ning palju muud&amp;lt;ref&amp;gt;Cisco.com Linux Containers: http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/dc-partner-red-hat/linux-containers-white-paper-cisco-red-hat.pdf#2&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85739</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85739"/>
		<updated>2015-01-11T15:46:00Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85738</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85738"/>
		<updated>2015-01-11T15:42:56Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Konteineritest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud kogum protsesse omaenda külgehaakimispunktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; OS-ide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike.&amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85737</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85737"/>
		<updated>2015-01-11T15:37:40Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Konteineritest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;&amp;lt;ref&amp;gt;Red Hat Enterprise Linux: Resource Management and Linux Containers Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Resource_Management_and_Linux_Containers_Guide/chap-Introduction_to_Control_Groups.html#sec-What_are_Control_Groups&amp;lt;/ref&amp;gt;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; OS-ide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike.&amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85559</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85559"/>
		<updated>2015-01-09T08:47:34Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid OS-e vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; OS-ile, elik virtuaalmasina OS-ile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; OS-i ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; OS-ide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike.&amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; OS-ide jaoks litsentside soetamine, terve OS-i paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85558</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85558"/>
		<updated>2015-01-09T08:45:01Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Konteineritest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
OS tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike.&amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; operatsioonisüsteemide jaoks litsentside soetamine, terve operatsioonisüsteemi paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85557</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85557"/>
		<updated>2015-01-09T08:44:18Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Konteineritest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist &#039;&#039;kerneli&#039;&#039; moodulitega, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike.&amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; operatsioonisüsteemide jaoks litsentside soetamine, terve operatsioonisüsteemi paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85556</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85556"/>
		<updated>2015-01-09T08:43:10Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike.&amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; operatsioonisüsteemide jaoks litsentside soetamine, terve operatsioonisüsteemi paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85555</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85555"/>
		<updated>2015-01-09T08:42:12Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli&amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike&amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt;. Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; operatsioonisüsteemide jaoks litsentside soetamine, terve operatsioonisüsteemi paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85554</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85554"/>
		<updated>2015-01-09T08:41:32Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Info ja eeldused */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee&amp;lt;ref&amp;gt;Kauglabori süsteem i-Tee: https://elab.itcollege.ee&amp;lt;/ref&amp;gt;, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike. &amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; operatsioonisüsteemide jaoks litsentside soetamine, terve operatsioonisüsteemi paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85545</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85545"/>
		<updated>2015-01-09T07:43:18Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Ajutised lingid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike. &amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; operatsioonisüsteemide jaoks litsentside soetamine, terve operatsioonisüsteemi paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85544</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85544"/>
		<updated>2015-01-09T07:41:38Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike. &amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi. Virtuaalmasinate puhul tuleb tavaliselt mõelda nii hypervisor tarkvara paigaldamisele, &#039;&#039;guest&#039;&#039; operatsioonisüsteemide jaoks litsentside soetamine, terve operatsioonisüsteemi paigaldamine ja palju muud sellega kaasnev. Kuigi virtuaalmasinate loomine on ka suures jaos automatiseeritav, siis sellegipoolest jääb ülesseadmine aeganõudvamaks protsessiks.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85543</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85543"/>
		<updated>2015-01-09T07:36:44Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike. &amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt; Konteinerite ülesseadmise käigus saab kasutada ära üsna väikesemahulisi rakendusi ja tööriistu, mis ei koorma niivõrd riistvara ja tagavad olenevalt olukorrast (st kas on automatiseeritud protsess ja kompaktne konteiner) sekunditega uue instantsi.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85542</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85542"/>
		<updated>2015-01-09T07:32:55Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest - Comparison between OS virtualization and hypervisor-based virtualization: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike. &amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85541</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85541"/>
		<updated>2015-01-09T07:31:40Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike. &amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85540</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85540"/>
		<updated>2015-01-09T07:31:31Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike. &amp;lt;ref&amp;gt;Linux.com - Containers vs. Hypervisors: http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&amp;lt;/re&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85539</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85539"/>
		<updated>2015-01-09T07:29:53Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna konteinerid võimaldavad ainult GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinate&amp;quot; loomist GNU/Linuxi &#039;&#039;host&#039;&#039; masinal, kusjuures virtuaalmasinad on &#039;&#039;guest&#039;&#039; operatsioonisüsteemide suhtes enamjaolt nii-öelda ükskõiksed ja võimaldavad praktiliselt kõike.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85538</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85538"/>
		<updated>2015-01-09T07:20:50Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039; poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna uue konteineri loomisel on võimalik ära kasutada juba eksisteerivat kernelit ning on vaja vaid GNU/Linuxi põhist &#039;&#039;host&#039;&#039;&#039;i ja spetsiifilisi rakendusi konteineriseerimiseks, mille kaudu saab tekitada GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinaid&amp;quot;. Kogu see protsess on märgatavalt kiirem, kui uue virtuaalmasina loomine, mis on enamjaolt x86/x64 arhitektuuri ja &#039;&#039;guest&#039;&#039; operatsioonisüsteemi suhtes ükskõikne.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85537</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85537"/>
		<updated>2015-01-09T07:20:29Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039;&#039;i poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna uue konteineri loomisel on võimalik ära kasutada juba eksisteerivat kernelit ning on vaja vaid GNU/Linuxi põhist &#039;&#039;host&#039;&#039;&#039;i ja spetsiifilisi rakendusi konteineriseerimiseks, mille kaudu saab tekitada GNU/Linuxi &#039;&#039;guest&#039;&#039; &amp;quot;masinaid&amp;quot;. Kogu see protsess on märgatavalt kiirem, kui uue virtuaalmasina loomine, mis on enamjaolt x86/x64 arhitektuuri ja &#039;&#039;guest&#039;&#039; operatsioonisüsteemi suhtes ükskõikne.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85536</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85536"/>
		<updated>2015-01-09T07:15:40Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039;&#039;i poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Uue instantsi, st uue konteineri või virtuaalmasina, ülesseadmine on ka oluliste erinevustega, kuna uue konteineri loomisel on võimalik ära kasutada juba eksisteerivat kernelit ning on vaja vaid ...&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85532</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85532"/>
		<updated>2015-01-09T07:12:29Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui ongi mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme vaja, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039;&#039;i poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga. Lühem tee riistvarani tähendab ka ühtlasi, et ühe füüsilise seadme peal on võimalik kasutada mitmetes kümnetes kui mitte sadu konteinereid, kusjuures virtuaalmasinate arv oleks tunduvalt madalam.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85530</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85530"/>
		<updated>2015-01-08T21:41:48Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Viited */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui just seda ongi nõutud, et on mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039;&#039;i poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajutised lingid=&lt;br /&gt;
http://www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud&lt;br /&gt;
http://www.linux.com/component/content/article/186-virtualization/300057-containers-vs-hypervisors-choosing-the-best-virtualization-technology-&lt;br /&gt;
http://www.virtxpert.com/containers-vs-virtualization-containers-virtualiztion/&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85529</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85529"/>
		<updated>2015-01-08T21:41:07Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui just seda ongi nõutud, et on mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Konteinerite eelisteks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039;&#039;i poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85528</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85528"/>
		<updated>2015-01-08T21:40:29Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui just seda ongi nõutud, et on mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;Konteineripõhise lahenduse eeliseks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel &#039;&#039;hypervisor&#039;&#039;&#039;i poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85527</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85527"/>
		<updated>2015-01-08T21:40:15Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui just seda ongi nõutud, et on mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;Konteineripõhise lahenduse eeliseks on kordades efektiivsem ressursside kasutus, kuna suhtlus riistvaraga käib otsemat teedpidi. Virtuaalmasinad peavad lisaks &#039;&#039;guest&#039;&#039; operatsioonisüsteemile, elik virtuaalmasina operatsioonisüsteemile, pöörduma veel lisaks &#039;&#039;hypervisor&#039;&#039;&#039;i poole, mis omakorda suhtleks läbi &#039;&#039;host&#039;&#039; operatsioonisüsteemi ja sealt riistvaraga.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85526</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85526"/>
		<updated>2015-01-08T21:32:59Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui just seda ongi nõutud, et on mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&amp;lt;br /&amp;gt;test&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85525</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85525"/>
		<updated>2015-01-08T21:30:33Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde. Sarnasustena saab peamiselt esile tuua migreerimisvõimaluse erinevatele riistvaradele, juurkasutaja ligipääsu olemasolu, veebipõhise kaughalduse teostamine ning tagavarakoopiate loomine kasvõi töötavatest instantsidest. Kuna konteinerid võimaldavad luua mitmeid isoleeritud süsteeme, mille aluseks on olemasolev &#039;&#039;kernel&#039;&#039;, siis ei ole otsest vajadust mitmeteks mahukateks virtuaalmasinateks, millel on märgatavalt suurem mõju füüsilistele ressurssidele, aga juhul, kui just seda ongi nõutud, et on mitmeid erinevaid ja eraldiseisvaid operatsioonisüsteeme, siis konteineripõhine lahendus ei suuda neid tingimusi täita.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85524</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85524"/>
		<updated>2015-01-08T21:21:00Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel: http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85523</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85523"/>
		<updated>2015-01-08T21:20:35Z</updated>

		<summary type="html">&lt;p&gt;Useerme: /* Kokkuvõte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
Võrreldes traditsioonilise virtualiseerimisega on konteineritel, nii Dockeri omadel kui ka teistel lahendustel, parasjagu erinevusi ning nende mõistmine aitab aru saada, millises olukorras midagi kasutada. Võrdluse aluseks olen võtnud ServerNest&#039;i poolt loodud tabeli &amp;lt;ref&amp;gt;ServerNest&#039;i võrdlustabel konteinerite ja virtuaalmasinate vahel, http://servernest.com/container-virtual-machine.html&amp;lt;/ref&amp;gt; ning proovinud seda arusaadaval moel tõlkida eestikeelde.&lt;br /&gt;
&lt;br /&gt;
=Viited=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85449</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Docker&amp;diff=85449"/>
		<updated>2015-01-06T19:20:00Z</updated>

		<summary type="html">&lt;p&gt;Useerme: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Info ja eeldused=&lt;br /&gt;
Autor: Üllar Seerme&amp;lt;br /&amp;gt;&lt;br /&gt;
Rühm: A31&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Artikkel on mõeldud kõigile, kes valdavad GNU/Linuxit vähemalt algaja tasemel, st käsurea enesekindlat kasutamist. Kirjatöö raames tehtud tegevused viidi ellu IT Kolledži kauglabori süsteemis i-Tee, kus olid kasutuses erinevad virtuaalmasinad. Virtuaalmasinat &amp;quot;klientarvuti&amp;quot; kasutati SSH ühenduse loomiseks virtuaalmasinasse &amp;quot;rakendusserver&amp;quot;. Järgnevad tehnilised andmed kasutatud distributsioonide kohta.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Selleks, et saada ülevaade distributsioonist, sisestada järgnev käsk, kusjuures juurkasutaja õigustes tegutsemine ei ole eeldatud:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cat /etc/*-release &lt;br /&gt;
|}&lt;br /&gt;
Rakendusserver:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Klientarvuti:&lt;br /&gt;
 DISTRIB_ID=Ubuntu&lt;br /&gt;
 DISTRIB_RELEASE=14.04&lt;br /&gt;
 DISTRIB_CODENAME=trusty&lt;br /&gt;
 DISTRIB_DESCRIPTION=&amp;quot;Ubuntu 14.04.1 LTS&amp;quot;&lt;br /&gt;
 NAME=&amp;quot;Ubuntu&amp;quot;&lt;br /&gt;
 VERSION=&amp;quot;14.04.1 LTS, Trusty Tahr&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edaspidi on kõik artiklis kirjeldatud käsud käivitatud juurkasutaja õigustes, justkui teisiti öeldud ei ole!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Konteineritest=&lt;br /&gt;
Konteinerid on operatsioonisüsteemi (edaspidi OS) virtualiseerimise meetodi tulemus, mis võimaldavad efektiivsemat füüsiliste ressursside kasutust &#039;&#039;host&#039;&#039; seadmel ning madalamat ajakulu uue &#039;&#039;guest&#039;&#039; instantsi loomisel. Konteinerite aluseks on samuti füüsiline riistvara ja OS nagu traditsioonilise virtualiseerimise puhulgi, kuid edasine puudutab juba peamiselt GNU/Linuxi spetsiifilisi termineid nagu &#039;&#039;kernel&#039;&#039;, &#039;&#039;namespace&#039;&#039; ja &#039;&#039;cgroups&#039;&#039;. Selle asemel, et olemasoleva OS-i peale paigaldada &#039;&#039;hypervisor&#039;&#039;, mis looks virtuaalmasina koos uue &#039;&#039;guest&#039;&#039; OS-iga, kasutatakse ära OS-i tasemel virtualiseerimist, mis tagab ilma &#039;&#039;hypervisor&#039;&#039; tarkvarata eraldiseisvad alad &#039;&#039;host&#039;&#039; OS-il ning lõppkasutaja jaoks tekib endiselt mulje, et tegemist on täiesti uue serveriga.&lt;br /&gt;
&lt;br /&gt;
Operatsioonisüsteemi tasemel virtualiseerimine toimub läbi kerneli, või teisisõnu läbi tuumikprogrammi, mis haldab tarkvaralisi sisendeid ja väljundeid ning tõlgendab neid protsessorile ja teistele komponentidele mõistetavateks juhisteks. GNU/Linuxi põhistel kernelitel on sisseehitatud tugi mitmete &#039;&#039;namespace&#039;&#039;&#039;ide jaoks. &#039;&#039;Namespace&#039;&#039; on isoleeritud vaade süsteemist omaenda mount punktidega, kasutajatega, võrgufunktsionaalsusega ja protsessidega ning see kõik töötab olemasoleva kerneli najal, mistõttu saab ka öelda, et toimub efektiivsem ressursside kasutus, kuna on jäetud ära tavapäraselt vahepeal asuvad &#039;&#039;hypervisor&#039;&#039;i ja OS-i kihid ning suhtlus riistvaraga saab toimuda otsesemal moel. Selleks, et saaks kontrollida ressursside kasutust võetakse kasutusele &#039;&#039;cgroups&#039;&#039;, mis hõlpsustab grupeeritud protsesside, näiteks &#039;&#039;namespace&#039;&#039;, ressursside haldamist.&lt;br /&gt;
&lt;br /&gt;
=Dockeri omapära=&lt;br /&gt;
Docker on töövahend rakenduste loomiseks, kokkupanemiseks ja paigaldamiseks kasutades konteinereid. Konteineri loomiseks võetakse aluseks mingit sorti tõmmis või &#039;&#039;image&#039;&#039;, mille peale hakatakse kihtidena laduma erinevad koostisosi, millest saab omakorda luua uue tõmmise. Näiteks saab tuua tõmmise, mis põhineb Ubuntu 14.04 LTS distributsioonil ning lisades sellele konteinerile rakendusi nagu Apache, MySQL ja PHP saab ühest konteinerist uue standardse konteineri, millel on töötav LAMP (Linux, Apache, MySQL, PHP/Python/Perl) tarkvarakogumik. Kuna see kõik on ühe konteineri raames üles seatud, siis kaovad probleemid, kus ühe rakenduse töötamine seisab erinevate sõltuvuste taga.&lt;br /&gt;
&lt;br /&gt;
=Paigaldus=&lt;br /&gt;
==Tavapärane==&lt;br /&gt;
Dockeri paigaldus toimub rakendusserveril ning kuigi on võimalik tavapäraste käskudega Docker paigaldada: &lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install docker.io &lt;br /&gt;
|}&lt;br /&gt;
siis seda tehes paigaldatakse vanem 1.0.1 versioon (artikli kirjutamise hetkel), mis on küll uusim, mida Ubuntu repositooriumitest saab, aga siiski vanem. Artikli järgimiseks piisab ka sellest versioonist.&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.0.1&lt;br /&gt;
 Client API version: 1.12&lt;br /&gt;
 Go version (client): go1.2.1&lt;br /&gt;
 Git commit (client): 990021a&lt;br /&gt;
 Server version: 1.0.1&lt;br /&gt;
 Server API version: 1.12&lt;br /&gt;
 Go version (server): go1.2.1&lt;br /&gt;
 Git commit (server): 990021a&lt;br /&gt;
&lt;br /&gt;
==Uusim==&lt;br /&gt;
Uusima versiooni paigaldamiseks tuleb esmalt veenduda, et &#039;&#039;apt&#039;&#039; toetab üle HTTPS protokolli pakkide allalaadimist. Juhul, kui:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | find /usr/lib/apt/methods/ -name &#039;https&#039;&lt;br /&gt;
|}&lt;br /&gt;
tagastab järgneva, siis saab jätkata alapeatükiga:&lt;br /&gt;
 /usr/lib/apt/methods/https&lt;br /&gt;
Juhul, kui ei tagasta midagi, siis tuleb käivitada järgnevad käsud, mis uuendab pakkide repositooriumid ja paigaldab &#039;&#039;apt-transport-https&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-get update&lt;br /&gt;
apt-get install apt-transport-https&lt;br /&gt;
|}&amp;lt;br /&amp;gt;&lt;br /&gt;
Jätkamiseks tuleb lisada Dockeri repositooriumi võti:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9&lt;br /&gt;
|}&lt;br /&gt;
Misjärel lisada Dockeri repositoorium &#039;&#039;apt&#039;&#039; allikate nimekirja, repositooriumid uuendada ning paigaldada &#039;&#039;lxc-docker&#039;&#039;:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | sh -c &amp;quot;echo deb https://get.docker.com/ubuntu docker main\ &amp;gt; /etc/apt/sources.list.d/docker.list&amp;quot;&lt;br /&gt;
apt-get update&lt;br /&gt;
&lt;br /&gt;
apt-get install lxc-docker&lt;br /&gt;
|}&lt;br /&gt;
Kontrollimaks, et kõik laabus käivitada:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker version&lt;br /&gt;
|}&lt;br /&gt;
mis peaks tagastama analoogse väljundi:&lt;br /&gt;
 Client version: 1.3.2&lt;br /&gt;
 Client API version: 1.15&lt;br /&gt;
 Go version (client): go1.3.3&lt;br /&gt;
 Git commit (client): 39fa2fa&lt;br /&gt;
 OS/Arch (client): linux/amd64&lt;br /&gt;
 Server version: 1.3.2&lt;br /&gt;
 Server API version: 1.15&lt;br /&gt;
 Go version (server): go1.3.3&lt;br /&gt;
 Git commit (server): 39fa2fa&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatavad tegevused=&lt;br /&gt;
Kirjutades käsureale niisama&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker &lt;br /&gt;
|}&lt;br /&gt;
saab näha kõiki Dockeriga seotud käske:&lt;br /&gt;
 ...&lt;br /&gt;
 Commands:&lt;br /&gt;
    attach    Attach to a running container&lt;br /&gt;
    build     Build an image from a Dockerfile&lt;br /&gt;
    commit    Create a new image from a container&#039;s changes&lt;br /&gt;
    cp        Copy files/folders from a container&#039;s filesystem to the host path&lt;br /&gt;
    create    Create a new container&lt;br /&gt;
    diff      Inspect changes on a container&#039;s filesystem&lt;br /&gt;
    events    Get real time events from the server&lt;br /&gt;
    exec      Run a command in an existing container&lt;br /&gt;
    export    Stream the contents of a container as a tar archive&lt;br /&gt;
    history   Show the history of an image&lt;br /&gt;
    images    List images&lt;br /&gt;
    import    Create a new filesystem image from the contents of a tarball&lt;br /&gt;
    info      Display system-wide information&lt;br /&gt;
    inspect   Return low-level information on a container&lt;br /&gt;
    kill      Kill a running container&lt;br /&gt;
    load      Load an image from a tar archive&lt;br /&gt;
    login     Register or log in to a Docker registry server&lt;br /&gt;
    logout    Log out from a Docker registry server&lt;br /&gt;
    logs      Fetch the logs of a container&lt;br /&gt;
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT&lt;br /&gt;
    pause     Pause all processes within a container&lt;br /&gt;
    ps        List containers&lt;br /&gt;
    pull      Pull an image or a repository from a Docker registry server&lt;br /&gt;
    push      Push an image or a repository to a Docker registry server&lt;br /&gt;
    restart   Restart a running container&lt;br /&gt;
    rm        Remove one or more containers&lt;br /&gt;
    rmi       Remove one or more images&lt;br /&gt;
    run       Run a command in a new container&lt;br /&gt;
    save      Save an image to a tar archive&lt;br /&gt;
    search    Search for an image on the Docker Hub&lt;br /&gt;
    start     Start a stopped container&lt;br /&gt;
    stop      Stop a running container&lt;br /&gt;
    tag       Tag an image into a repository&lt;br /&gt;
    top       Lookup the running processes of a container&lt;br /&gt;
    unpause   Unpause a paused container&lt;br /&gt;
    version   Show the Docker version information&lt;br /&gt;
    wait      Block until a container stops, then print its exit code&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Alustame mõne tõmmise tõmbamisest kasutades&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker pull phusion/baseimage&lt;br /&gt;
|}&lt;br /&gt;
käsku, mis laeb alla konteineri sees kasutamiseks mõeldud Ubuntu 14.04 LTS tõmmise. Kogu protsess oleneb suuresti ühenduse kiirusest, kuid peaks siiski jääma paari minuti piiresse. Eduka allalaadimise korral on väljundis viimasel real näha:&lt;br /&gt;
 Status: Downloaded newer image for phusion/baseimage:latest&lt;br /&gt;
&lt;br /&gt;
Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
saab näha praegu &#039;&#039;host&#039;&#039; masinal olevaid tõmmiseid&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Nüüd on võimalik juba üks konteiner käivitada ja seal ringi uurida:&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -t -i phusion/baseimage:latest /bin/bash&lt;br /&gt;
|}&lt;br /&gt;
Kusjuures -t tekitab konteinerisse kasutatava terminali ja -i hoiab konteineri töötavana senikaua kuni kasutaja konteineri sulgeb, phusion/baseimage tähistab millise repositooriumi tõmmist kasutada, pärast semikoolonit järgneb tõmmisele omane &#039;&#039;tag&#039;&#039; ning /bin/bash alustab konteineris Bash shelli. Eduka käivitamise puhul viiakse kasutaja automaatselt juurkasutaja õigustes unikaalse identifikaatoriga konteinerisse, mida näitab ka &#039;&#039;prompt&#039;&#039; käsureal:&lt;br /&gt;
 root@37ed3671ae25:/#&lt;br /&gt;
&lt;br /&gt;
Kui avada uus terminali aken &#039;&#039;host&#039;&#039; masinas ja käivitada Dockerile omane &#039;&#039;ps&#039;&#039; käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
siis saab näha, et tõepoolest on praegu töötav konteiner olemas&lt;br /&gt;
 CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
 37ed3671ae25        phusion/baseimage:0.9.15   &amp;quot;/bin/bash&amp;quot;         17 seconds ago      Up 16 seconds                           pensive_mclean&lt;br /&gt;
&lt;br /&gt;
Edaspidi on võimalik toimetada konteineris juba varasemast endale tuntud käskudega, seada üles toimivaid rakendusi ja palju muud, kuid praegu kirjutades &#039;&#039;exit&#039;&#039; ja konteinerist väljudes lakkab konteineri töötamast, mis võib olla ajutiste skriptide ja muu säärase testimiseks olla täiesti piisav, aga katsetamise eesmärgiks seame üles taustal töötava rakenduse.&lt;br /&gt;
&lt;br /&gt;
=Rakenduse ülesseadmine=&lt;br /&gt;
==Loomine ja käivitamine==&lt;br /&gt;
Selleks, et luua omaenda tõmmiseid, mida teistega jagada, tuleb esmalt registreerida end Docker Hub keskkonnas. Registeerimine on võimalik nii läbi veebilehe, kui ka kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker login&lt;br /&gt;
|}&lt;br /&gt;
Pärast käsu käivitamist küsitakse kasutajanime, parooli ja meiliaadressi. Meilile saadetakse kinnituslink ning pärast sellele vajutamist on registreerimine lõpetatud ja juba on võimalik end äsja sisestatud käsuga sisse logida. Tõmmise loomiseks on soovituslik &#039;&#039;host&#039;&#039; masinas luua eraldi kataloog failide jaoks, mida tõmmise loomiseks vaja on&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | mkdir rakendus&lt;br /&gt;
cd rakendus&lt;br /&gt;
|}&lt;br /&gt;
Nüüd uues kataloogis luua &#039;&#039;Dockerfile&#039;&#039;, mille põhjal hakatakse ehitama uut tõmmist ning avada see enda valitud tekstiredaktoriga (praegu on selleks Nano)&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | touch Dockerfile&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
|}&lt;br /&gt;
Dockerfile&#039;is käskude kirjutamine toimub väga lihtsal põhimõttel, kus kirjutatakse esmalt Dockeripõhine juhis millele järgneb kas tavaline tekstijupp või erinevad shelli käsud, mida käivitatakse tõmmise loomisel. Järgneb artikli jaoks loodud Dockerfile ja selle selgitus:&lt;br /&gt;
 FROM phusion/baseimage:latest&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y apache2&lt;br /&gt;
 RUN mkdir -p /rak &amp;amp;&amp;amp; rm -fr /var/www/html &amp;amp;&amp;amp; ln -s /rak /var/www/html&lt;br /&gt;
 ADD index.html /rak/&lt;br /&gt;
 EXPOSE 80&lt;br /&gt;
 WORKDIR /rak&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/usr/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
FROM täpsustab, et kasutame tõmmise aluseks artiklis eelnevalt kasutatud phusion repositooriumi baseimage tõmmist tag&#039;iga latest.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN määratleb käske, mida käivitatakse ja lisatakse alustõmmisele peale.&amp;lt;br /&amp;gt;&lt;br /&gt;
ADD&#039;iga võimalik katalooge ja faile &#039;&#039;host&#039;&#039; masinalt konteinerisse ümber kopeerida.&amp;lt;br /&amp;gt;&lt;br /&gt;
EXPOSE määrab pordi, mida konteiner käivitumisel &#039;&#039;host&#039;&#039; masinale nähtavaks teeb&amp;lt;br /&amp;gt;&lt;br /&gt;
WORKDIR seab paika konteineri avamisel kataloogi, kus kasutaja paikneb.&amp;lt;br /&amp;gt;&lt;br /&gt;
ENTRYPOINT määrab vaikimisi rakenduse, mis konteineri käivitamisel esimese protsessina käima läheb&lt;br /&gt;
&lt;br /&gt;
Hetkel on ADD juhisega lisatud index.html fail äärmiselt lihtsakoeline Hello World leht, millele saab peatselt &#039;&#039;host&#039;&#039; masinalt ka ligi pääseda. Nüüd saab seal samas kataloogis käivitada käsu&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker build -t=&amp;quot;&amp;lt;kasutajanimi&amp;gt;/&amp;lt;repositooriumi nimi&amp;gt;:&amp;lt;tag&amp;gt;&amp;quot; .&lt;br /&gt;
|}&lt;br /&gt;
mis hakkab koostama Dockerfile&#039;is olevate juhiste põhjal uut tõmmist. Olenevalt sellest, kas aluseks kasutatav tõmmis on olemas ja käivitatavate käskude nagu &#039;&#039;apt-get update&#039;&#039; tulemuse olemasolu vahemälus, sõltub ka kogu protsessi kestvus, kuid üldiselt jääb see jällegi paari minuti piiresse. Pärast edukat koostamist on võimalik käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker images&lt;br /&gt;
|}&lt;br /&gt;
näha uut lisandunud tõmmist&lt;br /&gt;
&lt;br /&gt;
 REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;       &amp;lt;tag&amp;gt;               06ec11fddabb        11 minutes ago      321.2 MB&lt;br /&gt;
 phusion/baseimage   latest              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
 phusion/baseimage   0.9.15              cf39b476aeec        10 weeks ago        289.4 MB&lt;br /&gt;
&lt;br /&gt;
Käivitame järgneva&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -P &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mis loob äsjaloodud tõmmise põhjal uue konteineri. Käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
on näha hetkel taustal töötavat konteinerit ning temaga seonduvat infot. Hetkel huvitab meid enim veerus PORTS olev, kus kirjeldatakse, et &#039;&#039;host&#039;&#039; masina port 49170 on suunatud konteineri pordile 80&lt;br /&gt;
&lt;br /&gt;
 CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                   NAMES&lt;br /&gt;
 489817d4d8b2        &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;     &amp;quot;/usr/sbin/apache2ct   5 seconds ago       Up 5 seconds        0.0.0.0:49170-&amp;gt;80/tcp   hungry_wozniak&lt;br /&gt;
&lt;br /&gt;
Nüüd, kui avada &#039;&#039;host&#039;&#039; masinas brauser ja aadressiribale sisestada kas localhost:49170 või &amp;lt;IP aadress&amp;gt;:49170, siis tervitab kasutajat väga algeline Hello World leht. Selleks, et ei peaks iga kord otsima üles spetsiifilist pordinumbrit, mida sisse tippida, saab kasutada käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille kaudu saab kohe kas localhost või IP aadressi abil näha tervituslehte.&lt;br /&gt;
&lt;br /&gt;
==Täiendamine==&lt;br /&gt;
Selleks, et olemasolevat rakendust täiendada või praegu näite puhul Hello World lehte muuta, saab haakida külge esialgsel konteineri käivitamisel &#039;&#039;host&#039;&#039; masina kataloogi kasutades käsku&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker run -d -p 80:80 -v /host/kataloog:/konteiner/kataloog &amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
mille tulemusena on nii konteineris, kui ka &#039;&#039;host&#039;&#039; masinas tehtavad muudatused seal kataloogis peegeldatud. Lisaks eelnevale on võimalik haakida külge ka spetsiifilisi faile, kui asendada kataloogi absoluutne rada mõne faili omaga. Veel saab kopeerida faile ja kaustu hetkel töötavasse konteinerisse, kui esialgu käivitada&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker ps&lt;br /&gt;
|}&lt;br /&gt;
ning selle väljundis pidada silmas konteineri ID, kusjuures ei pea tervet teadma, vaid piisab esimestest tähtedest, et &#039;&#039;Tab-completion&#039;&#039; õigeni jõuaks.&amp;lt;br /&amp;gt;Järgnevalt navigeerida kataloogi, kus asub fail, mida tahetakse ümber tõsta ja käivitada käsk&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | cp &amp;lt;kopeeritav fail&amp;gt; /var/lib/docker/aufs/mnt/&amp;lt;konteineri ID&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Enda järelt koristamine==&lt;br /&gt;
Praegu on kõik teostatud tööd tehtud kooli virtuaalmasinas ning pidev tõmmiste allalaadimine ja loomine ning konteinerite jooksutamine nõuab ressursse, mida alati olla ei pruugi.&amp;lt;br /&amp;gt;Kõik tööle pandud konteinerid on võimalik peatada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker stop $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik tööle pandud konteinerid on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rm $(docker ps -a -q)&lt;br /&gt;
|}&lt;br /&gt;
Kõik allalaetud ja loodud tõmmised on võimalik kustutada käsuga&lt;br /&gt;
{|style=&amp;quot;background:lightcyan;width:auto;margin:3px;border:1px solid lightgrey&amp;quot; align=centre&lt;br /&gt;
| style=&amp;quot;padding:5px;font-family:courier;font-size:8pt;&amp;quot; | docker rmi $(docker images -q)&lt;br /&gt;
|}&lt;br /&gt;
=Kokkuvõte=&lt;br /&gt;
&lt;br /&gt;
[[Category:Linuxi administreerimine]]&lt;/div&gt;</summary>
		<author><name>Useerme</name></author>
	</entry>
</feed>