﻿
{"id":14377,"date":"2020-03-21T23:25:04","date_gmt":"2020-03-21T23:25:04","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=14377"},"modified":"2020-03-21T23:25:04","modified_gmt":"2020-03-21T23:25:04","slug":"dockerfile-docker-image-docker-registry-ve-docker-container-kavramlari-nelerdir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/dockerfile-docker-image-docker-registry-ve-docker-container-kavramlari-nelerdir\/","title":{"rendered":"Dockerfile, Docker Image, Docker Registry ve Docker Container Kavramlar\u0131 Nelerdir?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/net-core-docker-yazi-dizisi\/\" target=\"_blank\" rel=\"noopener noreferrer\">.NET Core &amp; Docker Yaz\u0131 Dizisi<\/a>nin ikinci makalesinde Docker ile ilgili s\u00fcre\u00e7te kaleme alaca\u011f\u0131m\u0131z makalelerde bizlere yard\u0131mc\u0131 olarak baz\u0131 kavramsal yap\u0131lar \u00fczerine duracak ve gerekli izah ve izahatlerde bulunaca\u011f\u0131z.<\/p>\n<p>Docker <a href=\"https:\/\/www.gencayyildiz.com\/blog\/docker-nedir\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u00f6nceki makale<\/a>mizde de inceledi\u011fimiz \u00fczere uygulamalar\u0131 i\u015fletim sistemine kar\u015f\u0131 var olan ba\u011f\u0131ml\u0131l\u0131klar\u0131ndan kopar\u0131p sanalla\u015ft\u0131r\u0131lm\u0131\u015f ortamlarda \u00e7al\u0131\u015fabilir hale getirmeyi ama\u00e7layan bir platformdur. Bu \u015fekilde kompleks tarzda ve a\u011f\u0131r mimarisel planlarla tasarlanm\u0131\u015f uygulamalar\u0131, y\u00fcksek kullan\u0131labilirlik(high availability) sa\u011flayarak ve bir yandan da s\u0131f\u0131r kesinti s\u00fcresi(zero down time) ile g\u00fcncellemeleri direkt olarak uygulamalara yans\u0131tarak yay\u0131nlamakta ve t\u00fcm bunlar\u0131n yan\u0131nda hi\u00e7bir zahmete katlanmaks\u0131z\u0131n yap\u0131lan i\u015fleri geri alabilmemizi sa\u011flayabilen bir \u00f6zelli\u011fide b\u00fcnyesinde bar\u0131nd\u0131rmaktad\u0131r.<\/p>\n<p>Haliyle bu niteliklere sahip olan bir platformun kavramsal olarak olduk\u00e7a zengin olmas\u0131 kadar do\u011fal bir durum olmasa gerek. O halde gelin Docker&#8217;a dair ileride ihtiyac\u0131m\u0131z olacak olan ve bir uygulamay\u0131 Dockerize edebilmek i\u00e7in bilmemiz gereken <em>Dockerfile<\/em>, <em>Docker Image<\/em> ve <em>Container<\/em> kavramlar\u0131n\u0131 tan\u0131yal\u0131m.<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-ve-Docker-Container-Kavramlar\u0131-Nelerdir.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14404\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-ve-Docker-Container-Kavramlar\u0131-Nelerdir.jpg\" alt=\"Dockerfile, Docker Image ve Docker Container Kavramlar\u0131 Nelerdir?\" width=\"893\" height=\"319\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-ve-Docker-Container-Kavramlar\u0131-Nelerdir.jpg 893w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-ve-Docker-Container-Kavramlar\u0131-Nelerdir-300x107.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-ve-Docker-Container-Kavramlar\u0131-Nelerdir-768x274.jpg 768w\" sizes=\"auto, (max-width: 893px) 100vw, 893px\" \/><\/a><\/p>\n<h3 style=\"color: purple;\">Dockerfile<\/h3>\n<blockquote><p><em style=\"color: green;\">Maddenin temel yap\u0131ta\u015f\u0131 nas\u0131l atom ise Docker projelerinin temel yap\u0131ta\u015f\u0131 Dockerfile\u2019d\u0131r.<\/em> <span style=\"font-size: 8px;\"><a href=\"https:\/\/engineering.teknasyon.com\/docker-nas%C4%B1l-g%C3%BCzel-nas%C4%B1l-g%C3%BCzel-docker-dockerfile-docker-compose-ve-docker-swarm-%C3%BCzerine-c3fdfa28583b\" target=\"_blank\" rel=\"noopener noreferrer\">S\u00f6z\u00fcn al\u0131nt\u0131land\u0131\u011f\u0131 kaynak i\u00e7in t\u0131klay\u0131n\u0131z.<\/a><\/span><\/p><\/blockquote>\n<p>Dockerfile, uygulaman\u0131n ana root dizininde herhangi bir uzant\u0131s\u0131 olmayan ve ismi birebir &#8216;Dockerfile&#8217; \u015feklinde olan bir dosyadan ibarettir. \u0130\u00e7erisinde yay\u0131nlanacak olan uygulaman\u0131n nas\u0131l bir ortamda \u00e7al\u0131\u015faca\u011f\u0131na dair talimatlar\u0131 bar\u0131nd\u0131rmaktad\u0131r. \u00d6rne\u011fin; geli\u015ftirme yap\u0131lan herhangi bir Asp.NET Core uygulamas\u0131n\u0131n, hangi i\u015fletim sistemi \u00fczerinde ka\u00e7\u0131nc\u0131 versiyonla aya\u011fa kald\u0131r\u0131laca\u011f\u0131n\u0131 ve hangi dll dosyalar\u0131n\u0131n y\u00fckl\u00fc olmas\u0131 gerekti\u011fi vs. gibi talimatlar belirtilebilmektedir.<\/p>\n<p>Dockerfile sayesinde verilen talimatlar neticesinde sunucu yap\u0131land\u0131rmas\u0131 gibi zahmetli bir i\u015ften kurtulanmakta ve b\u00f6ylece geli\u015ftiriciye olan ba\u011f\u0131ml\u0131l\u0131kta olabildi\u011fince izole edilmi\u015f olmaktad\u0131r. Nihayetinde, i\u015ften ayr\u0131lan bir personelin aya\u011fa kald\u0131rd\u0131\u011f\u0131 bir uygulamay\u0131 nas\u0131l ve ne \u015fekilde ger\u00e7ekle\u015ftirdi\u011fine dair bir tela\u015fa kap\u0131lmaks\u0131z\u0131n Dockerfile dosyas\u0131 sayesinde tek bir komut ile ayn\u0131 proje tekrar ayn\u0131 \u00f6zelliklerle aya\u011fa kald\u0131r\u0131labilmekte ve b\u00f6ylece projenin \u00f6zg\u00fcrl\u00fc\u011f\u00fcn\u00fc desteklemektedir.<\/p>\n<h3 style=\"color: purple;\">Docker Image<\/h3>\n<p>Docker build edildikten sonra Dockerfile dosyas\u0131nda belirtilen talimatlara g\u00f6re read only \u00f6zellik g\u00f6steren static yap\u0131da image(imaj) dosyas\u0131 olu\u015fturulur.. Dockerfile i\u00e7erisinde belirtilmi\u015f her bir sat\u0131ra kar\u015f\u0131l\u0131k Docker Image i\u00e7erisinde bir layer olu\u015fur. Dolay\u0131s\u0131yla imageler bir katman(layer) toplulu\u011fudur. \u00d6rne\u011fin; Dockerfile i\u00e7erisinde 4 sat\u0131rl\u0131k talimat varsa o halde 4 katmanl\u0131 bir Docker Image olu\u015fturulacakt\u0131r.<\/p>\n<p>Docker Image&#8217;lar da Dockerfile dosyas\u0131 i\u00e7erisinde belirtilen talimatlara g\u00f6re i\u015fletim sistemi, enviroment ve publish data verileri bulunur. Bir nevi, amaca y\u00f6nelik container&#8217;lar\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in \u00f6nceden tasarlanm\u0131\u015f tak \u00e7al\u0131\u015ft\u0131r mant\u0131\u011f\u0131nda i\u015flev g\u00f6ren kal\u0131plard\u0131rda diyebiliriz. Docker Image&#8217;leri ister kendimiz yaratabilir istersekte belirli firmalar\u0131n sundu\u011fu haz\u0131r Docker kal\u0131plar\u0131n\u0131 kullanabiliriz.<\/p>\n<p><strong>Peki haz\u0131r Docker kal\u0131plar\u0131n\u0131 nereden elde edebiliriz?<\/strong><br \/>\nBunun i\u00e7in Docker Registry ba\u015fl\u0131\u011f\u0131n\u0131 inceleyelim.<\/p>\n<h3 style=\"color: purple;\">Docker Registry<\/h3>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-14406\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir-300x275.jpg\" alt=\"Dockerfile, Docker Image, Docker Registry ve Docker Container Kavramlar\u0131 Nelerdir\" width=\"300\" height=\"275\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir-300x275.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir-768x703.jpg 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir.jpg 841w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>\u0130majlar\u0131n kaydedilip da\u011f\u0131t\u0131labildi\u011fi bir ortam olarak d\u00fc\u015f\u00fcnebiliriz. Sol taraftaki g\u00f6r\u00fcnt\u00fcdeki dolab\u0131 Registry gibi d\u00fc\u015f\u00fcn\u00fcrsek e\u011fer her bir raftaki kutuyuda tek bir amaca hizmet eden imajlar olarak de\u011ferlendirebiliriz.<\/p>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere registry&#8217;e depolanan bir imaja \u00e7ok h\u0131zl\u0131 bir \u015fekilde eri\u015febilir ve gerekirse \u00fczerinde de\u011fi\u015fiklikler yap\u0131p farkl\u0131 bir versiyon olarak yeniden g\u00f6nderebiliriz.<\/p>\n<p>\n&nbsp;<br \/>\n<\/p>\n<p><strong>Haz\u0131r registry ortam\u0131n\u0131 sa\u011flayan firmalar hangileridir?<\/strong><br \/>\nUygulaman\u0131za dair haz\u0131r imajlar bar\u0131nd\u0131ran mevcuttaki birka\u00e7 cloud registry firmas\u0131n\u0131 a\u015fa\u011f\u0131da g\u00f6rebilirsiniz.<\/p>\n<ul>\n<li><a href=\"https:\/\/hub.docker.com\/_\/registry\" rel=\"noopener noreferrer\" target=\"_blank\">Docker Hub Registry<\/a><br \/>\nPrivate uygulamaya 1 adet s\u0131n\u0131rlamas\u0131 vard\u0131r. Public s\u0131n\u0131rs\u0131zd\u0131r.\n<\/li>\n<li><a href=\"https:\/\/azure.microsoft.com\/tr-tr\/services\/container-registry\/\" rel=\"noopener noreferrer\" target=\"_blank\">Azure Container Registry<\/a><\/li>\n<li><a href=\"https:\/\/aws.amazon.com\/tr\/ecr\/\" rel=\"noopener noreferrer\" target=\"_blank\">AWS Container Registry<\/a><\/li>\n<li><a href=\"https:\/\/cloud.google.com\/container-registry\" rel=\"noopener noreferrer\" target=\"_blank\">Google Container Registry<\/a><\/li>\n<li><a href=\"https:\/\/quay.io\/\" rel=\"noopener noreferrer\" target=\"_blank\">Quay Registry<\/a><\/li>\n<\/ul>\n<p><strong>Peki neden imajlar\u0131 registry etmek isteriz?<\/strong><\/p>\n<ul>\n<li>Yap\u0131lan \u00e7al\u0131\u015fma neticesinde elde edilen imajlar\u0131m\u0131z\u0131 cloud&#8217;da ki registry ortam\u0131na depolayarak g\u00fcvence sa\u011flayabilmek i\u00e7in,<\/li>\n<li>\u0130htiyaca d\u00f6n\u00fck sunucular aras\u0131ndaki imaj transferini daha h\u0131zl\u0131 ve sa\u011fl\u0131kl\u0131 sa\u011flayabilmek i\u00e7in,<\/li>\n<li>Aya\u011fa kald\u0131r\u0131lacak uygulamadaki temel dosyalar\u0131n, i\u015fletim sisteminin ve environment(ortam) yap\u0131lanmas\u0131n\u0131n getirece\u011fi i\u015f y\u00fck\u00fcnden ka\u00e7\u0131nmak ve haz\u0131r imaj kullanarak bu tarz maliyetleri minimize etmek i\u00e7in<\/li>\n<\/ul>\n<p>imajlar\u0131 registry ediyor yahut registry&#8217;dan \u00e7ekip kullan\u0131yoruz&#8230;<\/p>\n<h3 style=\"color: purple;\">Docker Container<\/h3>\n<p>Docker Image dosyas\u0131n\u0131 Dockerfile i\u00e7erisindeki talimatlara g\u00f6re olu\u015fturduktan sonra uygulaman\u0131n \u00e7al\u0131\u015ft\u0131r\u0131labilmesi i\u00e7in run edilmesi gerekmektedir. Run neticesinde bir container aya\u011fa kald\u0131r\u0131l\u0131r ve b\u00f6ylece ilgili uygulama aya\u011fa kald\u0131r\u0131lm\u0131\u015f olacakt\u0131r.<\/p>\n<blockquote><p><em style=\"color:pink\">Container, Docker Imagelerin \u00e7al\u0131\u015fabilen instance&#8217;lar\u0131d\u0131r.<\/em><\/p><\/blockquote>\n<p>Bir Docker Image \u00fczerinden istenildi\u011fi kadar Container aya\u011fa kald\u0131r\u0131labilir. Burada Docker Image uygulama i\u00e7in bir fabrika g\u00f6revi g\u00f6rmektedir. Ayr\u0131ca Containerlar; durdurulabilir, silinebilir, tekrardan olu\u015fturulabilirler. (Read\/Write)<\/p>\n<h3>Docker Image ve Container \u00d6rneklendirmesi<\/h3>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir-1.jpg\" alt=\"Dockerfile, Docker Image, Docker Registry ve Docker Container Kavramlar\u0131 Nelerdir?\" width=\"745\" height=\"455\" class=\"alignnone size-full wp-image-14427\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir-1.jpg 745w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/03\/Dockerfile-Docker-Image-Docker-Registry-ve-Docker-Container-Kavramlar\u0131-Nelerdir-1-300x183.jpg 300w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><\/a><br \/>\nYukar\u0131daki \u015femaya g\u00f6z atarsak e\u011fer Dockerfile dosyas\u0131 i\u00e7erisinde verilen talimatlar kadar Docker Image i\u00e7erisinde katman olu\u015fturuldu\u011funu g\u00f6rmekteyiz. Bu imaj \u00fczerinden aya\u011fa kald\u0131r\u0131lan t\u00fcm container instancelar\u0131, \u00f6ncelikle imaj \u00fczerine eklenen hem okunabilir hem yaz\u0131labilir katman \u00fczerinden aya\u011fa kald\u0131r\u0131lmaktad\u0131rlar. Bu okunabilir\/yaz\u0131labilir katman\u0131n amac\u0131 uygulama i\u00e7erisinde yap\u0131lan t\u00fcm i\u015flemlerin ger\u00e7ekle\u015ftirilmesi i\u00e7indir. \u0130lgili katman\u0131n container&#8217;a ba\u011fl\u0131 olmas\u0131ndan dolay\u0131 container silindi\u011finde de yok olaca\u011f\u0131ndan dolay\u0131 haliyle yap\u0131lan t\u00fcm i\u015flemler geri d\u00f6n\u00fc\u015fs\u00fcz kaybolmu\u015f olacakt\u0131r.<\/p>\n<p>Netice olarak bu yaz\u0131m\u0131zda Docker platformuna dair temel yap\u0131sal kavramlar\u0131 tan\u0131mlama ve tan\u0131ma \u00fczerine teorik izahatlerde bulunmu\u015f olduk. Makalelerimiz ilerledik\u00e7e yava\u015f ama sindire sindire Docker&#8217;\u0131n derinliklerine ad\u0131m ad\u0131m giriyor olaca\u011f\u0131z. S\u00fckunetle takipte kal\u0131n \ud83d\ude42<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, .NET Core &amp; Docker Yaz\u0131 Dizisinin ikinci makalesinde Docker ile ilgili s\u00fcre\u00e7te kaleme alaca\u011f\u0131m\u0131z makalelerde bizlere yard\u0131mc\u0131 olarak baz\u0131 kavramsal yap\u0131lar \u00fczerine duracak ve gerekli izah ve izahatlerde bulunaca\u011f\u0131z. Docker \u00f6nceki makalemizde de&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":14404,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3281],"tags":[3293,3290,3302,3301,3292,3299,3303,3304,3291,3298,3300,3294,3296,3295,3297],"class_list":["post-14377","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker","tag-container","tag-container-nedir","tag-docker-container","tag-docker-container-nedir","tag-docker-image","tag-docker-image-nedir","tag-docker-registry","tag-docker-registry-nedir","tag-dockerfile","tag-dockerfile-nedir","tag-dockerize","tag-high-availability","tag-sifir-kesinti-suresi","tag-yuksek-kullanilabilirlik","tag-zero-down-time"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/14377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=14377"}],"version-history":[{"count":56,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/14377\/revisions"}],"predecessor-version":[{"id":14436,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/14377\/revisions\/14436"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/14404"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=14377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=14377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=14377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}