{"id":33482,"date":"2025-11-03T10:41:06","date_gmt":"2025-11-03T07:41:06","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33482"},"modified":"2025-11-03T10:41:06","modified_gmt":"2025-11-03T07:41:06","slug":"ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/","title":{"rendered":"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h2>\n<p>Ansible, IT otomasyonu i\u00e7in g\u00fc\u00e7l\u00fc, a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7t\u0131r. Basitli\u011fi, ajans\u0131z yap\u0131s\u0131 ve deklaratif yakla\u015f\u0131m\u0131 sayesinde sunucu yap\u0131land\u0131rmas\u0131, uygulama da\u011f\u0131t\u0131m\u0131 ve orkestrasyonu gibi g\u00f6revleri kolayca otomatize etmenizi sa\u011flar. Docker ise uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir birimler olan konteynerler i\u00e7inde paketlemek i\u00e7in devrim niteli\u011finde bir platformdur. Bu makalede, Ansible&#8217;\u0131 kullanarak Ubuntu 22.04 i\u015fletim sistemi \u00fczerinde Docker&#8217;\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve temel olarak nas\u0131l yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Bu otomasyon s\u00fcreci, tekrarlanabilirli\u011fi art\u0131r\u0131r, insan hatas\u0131n\u0131 azalt\u0131r ve birden fazla sunucuda Docker da\u011f\u0131t\u0131m\u0131n\u0131 standartla\u015ft\u0131rman\u0131za olanak tan\u0131r.<\/p>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde otomasyon vazge\u00e7ilmez bir unsurdur. \u00d6zellikle mikroservis mimarileri ve bulut tabanl\u0131 uygulamalar\u0131n yayg\u0131nla\u015fmas\u0131yla birlikte, altyap\u0131 y\u00f6netiminin verimli ve hatas\u0131z olmas\u0131 kritik \u00f6nem ta\u015f\u0131maktad\u0131r. Docker, uygulamalar\u0131 konteynerize ederek da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini basitle\u015ftirirken, Ansible bu konteyner ortamlar\u0131n\u0131 otomatik olarak haz\u0131rlama yetene\u011fi sunar. Ubuntu 22.04, sunucu ortamlar\u0131nda s\u0131k\u00e7a tercih edilen, kararl\u0131 ve g\u00fcncel bir i\u015fletim sistemi oldu\u011fu i\u00e7in bu kombinasyon olduk\u00e7a pop\u00fclerdir. Bu rehber, hem Ansible&#8217;a yeni ba\u015flayanlar hem de mevcut bilgi birikimini peki\u015ftirmek isteyenler i\u00e7in kapsaml\u0131 bir yol haritas\u0131 sunmay\u0131 ama\u00e7lamaktad\u0131r.<\/p>\n<h3>Neden Ansible ve Docker Birlikte?<\/h3>\n<p>Ansible ve Docker&#8217;\u0131n birle\u015fimi, modern DevOps yakla\u015f\u0131mlar\u0131n\u0131n temel ta\u015flar\u0131ndan biridir. Bu ikilinin birlikte sundu\u011fu avantajlar \u015funlard\u0131r:<\/p>\n<p>*   <strong>Tekrarlanabilirlik:<\/strong> Ansible playbook&#8217;lar\u0131, Docker kurulumunu ve yap\u0131land\u0131rmas\u0131n\u0131 kod olarak tan\u0131mlar. Bu sayede, ayn\u0131 kurulumu defalarca, her seferinde ayn\u0131 sonu\u00e7la ger\u00e7ekle\u015ftirebilirsiniz. Bu durum, test, geli\u015ftirme ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 sa\u011flar.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Y\u00fczlerce sunucuya Docker kurman\u0131z gerekti\u011finde, Ansible bu s\u00fcreci saniyeler i\u00e7inde otomatize edebilir. Manuel kurulumlar hem zaman al\u0131c\u0131 hem de hataya a\u00e7\u0131kken, Ansible ile bu g\u00f6revler zahmetsizce yerine getirilebilir.<br \/>\n*   <strong>Idempotence (Tekrar Edilebilirlik):<\/strong> Ansible, bir g\u00f6revi birden \u00e7ok kez \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda bile sistemin istenen durumda kalmas\u0131n\u0131 sa\u011flayan idempotent bir yap\u0131ya sahiptir. \u00d6rne\u011fin, Docker zaten kuruluysa, Ansible kurulum ad\u0131mlar\u0131n\u0131 tekrar \u00e7al\u0131\u015ft\u0131rmayacak, sadece gerekli de\u011fi\u015fiklikleri yapacakt\u0131r.<br \/>\n*   <strong>Basitlik ve Okunabilirlik:<\/strong> Ansible, YAML tabanl\u0131 playbook&#8217;lar kullan\u0131r. Bu, playbook&#8217;lar\u0131n hem insanlar taraf\u0131ndan kolayca okunabilir hem de yaz\u0131labilir olmas\u0131n\u0131 sa\u011flar. Karma\u015f\u0131k betik dillerine k\u0131yasla \u00f6\u011frenme e\u011frisi daha d\u00fc\u015f\u00fckt\u00fcr.<br \/>\n*   <strong>Ajans\u0131z Mimari:<\/strong> Ansible&#8217;\u0131n hedef sunucularda herhangi bir arac\u0131 (agent) yaz\u0131l\u0131m\u0131na ihtiya\u00e7 duymamas\u0131, kurulum ve y\u00f6netim y\u00fck\u00fcn\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Sadece SSH eri\u015fimi ve Python y\u00fckl\u00fc olmas\u0131 yeterlidir.<br \/>\n*   <strong>S\u00fcr\u00fcm Kontrol\u00fc:<\/strong> Ansible playbook&#8217;lar\u0131 ve envanter dosyalar\u0131, Git gibi s\u00fcr\u00fcm kontrol sistemleriyle y\u00f6netilebilir. Bu, altyap\u0131 de\u011fi\u015fikliklerinin izlenebilirli\u011fini, geri al\u0131nabilirli\u011fini ve i\u015fbirli\u011fini art\u0131r\u0131r.<\/p>\n<p>Bu avantajlar sayesinde, Ansible ile Docker kurulumu ve y\u00f6netimi, DevOps ekipleri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir.<\/p>\n<h3>\u00d6n Ko\u015fullar<\/h3>\n<p>Bu rehberdeki ad\u0131mlar\u0131 takip edebilmek i\u00e7in belirli \u00f6n ko\u015fullar\u0131n yerine getirilmesi gerekmektedir.<\/p>\n<h4>Kontrol Makinesi (Ansible Controller) Ayarlar\u0131<\/h4>\n<p>Ansible playbook&#8217;lar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z makinedir. Bu makineye a\u015fa\u011f\u0131daki bile\u015fenlerin kurulu olmas\u0131 gerekir:<\/p>\n<p>*   <strong>Linux \u0130\u015fletim Sistemi:<\/strong> Ubuntu, CentOS, Fedora veya macOS olabilir. Bu makale \u00f6zelinde Linux tabanl\u0131 bir kontrol makinesi varsay\u0131lmaktad\u0131r.<br \/>\n*   <strong>Python 3:<\/strong> Ansible, Python ile yaz\u0131lm\u0131\u015ft\u0131r ve \u00e7al\u0131\u015fmak i\u00e7in Python 3&#8217;e ihtiya\u00e7 duyar.<br \/>\n*   <strong>Ansible:<\/strong> Kontrol makinesine Ansible&#8217;\u0131n kurulu olmas\u0131 gerekir. Kurulum i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install software-properties-common\n    sudo add-apt-repository --yes --update ppa:ansible\/ansible\n    sudo apt install ansible<\/code><\/pre>\n<p>    Kurulumu do\u011frulamak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">ansible --version<\/code><\/pre>\n<p>*   <strong>SSH Anahtar\u0131:<\/strong> Hedef makinelere \u015fifresiz SSH eri\u015fimi i\u00e7in bir SSH anahtar \u00e7ifti olu\u015fturman\u0131z ve genel anahtar\u0131n\u0131z\u0131 hedef makinelere kopyalaman\u0131z \u015fiddetle tavsiye edilir.<\/p>\n<pre><code class=\"language-bash\">ssh-keygen -t rsa -b 4096 # E\u011fer anahtar\u0131n\u0131z yoksa\n    ssh-copy-id -i ~\/.ssh\/id_rsa.pub <hedef_kullan\u0131c\u0131>@<hedef_ip_adresi><\/code><\/pre>\n<h4>Hedef Makine(ler) (Docker Host) Ayarlar\u0131<\/h4>\n<p>Docker&#8217;\u0131 kuraca\u011f\u0131n\u0131z Ubuntu 22.04 sunucular\u0131d\u0131r. Bu makinelerde a\u015fa\u011f\u0131daki ayarlar\u0131n yap\u0131lm\u0131\u015f olmas\u0131 gerekir:<\/p>\n<p>*   <strong>Ubuntu 22.04 \u0130\u015fletim Sistemi:<\/strong> Sunucular\u0131n\u0131z\u0131n Ubuntu 22.04 (Jammy Jellyfish) \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong>Python 3:<\/strong> Ansible&#8217;\u0131n hedef makinede komutlar\u0131 y\u00fcr\u00fctebilmesi i\u00e7in Python 3&#8217;\u00fcn kurulu olmas\u0131 gerekir. Genellikle Ubuntu 22.04&#8217;te varsay\u0131lan olarak y\u00fckl\u00fcd\u00fcr, ancak kontrol etmek veya kurmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install python3<\/code><\/pre>\n<p>*   <strong>Sudo Yetkisi:<\/strong> Ansible&#8217;\u0131n Docker kurulumu gibi ayr\u0131cal\u0131kl\u0131 i\u015flemler yapabilmesi i\u00e7in hedef makinedeki kullan\u0131c\u0131 hesab\u0131n\u0131n <code>sudo<\/code> yetkisine sahip olmas\u0131 ve \u015fifresiz <code>sudo<\/code> kullanabilmesi \u00f6nerilir. E\u011fer \u015fifre gerekiyorsa, Ansible&#8217;\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rken <code>-K<\/code> veya <code>--ask-become-pass<\/code> parametresini kullanman\u0131z gerekir.<br \/>\n*   <strong>SSH Eri\u015fimi:<\/strong> Kontrol makinesinden hedef makineye SSH ile eri\u015filebiliyor olmas\u0131 gerekir. Yukar\u0131da belirtildi\u011fi gibi, SSH anahtar tabanl\u0131 kimlik do\u011frulama tercih edilir.<br \/>\n*   <strong>\u0130nternet Eri\u015fimi:<\/strong> Docker paketlerini indirebilmek i\u00e7in hedef makinenin internet eri\u015fimine sahip olmas\u0131 gerekir.<\/p>\n<h3>Ansible Proje Yap\u0131s\u0131 Olu\u015fturma<\/h3>\n<p>Ansible ile \u00e7al\u0131\u015f\u0131rken, d\u00fczenli bir proje yap\u0131s\u0131 olu\u015fturmak iyi bir uygulamad\u0131r. Bu, playbook&#8217;lar\u0131n\u0131z\u0131n ve rollerinizin y\u00f6netilebilirli\u011fini art\u0131r\u0131r. Kontrol makinenizde bir proje dizini olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">mkdir -p ansible-docker-ubuntu\ncd ansible-docker-ubuntu<\/code><\/pre>\n<p>Bu dizin i\u00e7inde a\u015fa\u011f\u0131daki temel dosyalar\u0131 ve dizinleri olu\u015fturaca\u011f\u0131z:<\/p>\n<pre><code class=\"language-\">ansible-docker-ubuntu\/\n\u251c\u2500\u2500 inventory.ini\n\u251c\u2500\u2500 ansible.cfg\n\u251c\u2500\u2500 playbook.yml\n\u2514\u2500\u2500 roles\/\n    \u251c\u2500\u2500 common\/\n    \u2502   \u2514\u2500\u2500 tasks\/\n    \u2502       \u2514\u2500\u2500 main.yml\n    \u2514\u2500\u2500 docker\/\n        \u251c\u2500\u2500 tasks\/\n        \u2502   \u2514\u2500\u2500 main.yml\n        \u251c\u2500\u2500 handlers\/\n        \u2502   \u2514\u2500\u2500 main.yml\n        \u251c\u2500\u2500 templates\/\n        \u2502   \u2514\u2500\u2500 daemon.json.j2\n        \u2514\u2500\u2500 defaults\/\n            \u2514\u2500\u2500 main.yml<\/code><\/pre>\n<p>Bu yap\u0131, Ansible&#8217;\u0131n en iyi pratiklerinden biri olan &#8220;roller&#8221; kullan\u0131m\u0131n\u0131 yans\u0131t\u0131r. Roller, belirli bir amac\u0131 olan, ba\u011f\u0131ms\u0131z ve yeniden kullan\u0131labilir g\u00f6revler koleksiyonlar\u0131d\u0131r.<\/p>\n<h3>Ansible Playbook&#8217;u Olu\u015fturma<\/h3>\n<p>\u015eimdi yukar\u0131da bahsetti\u011fimiz dosya ve dizinlerin i\u00e7eri\u011fini olu\u015fturmaya ba\u015flayal\u0131m.<\/p>\n<h4><code>inventory.ini<\/code> Dosyas\u0131<\/h4>\n<p>Bu dosya, Ansible&#8217;\u0131n y\u00f6netece\u011fi hedef makinelerin listesini ve grupland\u0131rmas\u0131n\u0131 i\u00e7erir.<\/p>\n<pre><code class=\"language-ini\"># inventory.ini\n[docker_hosts]\n<h2>Hedef makinenizin IP adresini veya hostname'ini buraya yaz\u0131n<\/h2>\n<h2>ansible_user: Hedef makinede sudo yetkisi olan kullan\u0131c\u0131 ad\u0131<\/h2>\n<h2>ansible_ssh_private_key_file: SSH anahtar\u0131n\u0131z\u0131n yolu (iste\u011fe ba\u011fl\u0131, ~\/.ssh\/id_rsa varsay\u0131lan olarak kullan\u0131l\u0131r)<\/h2>\nubuntu-docker-01 ansible_host=YOUR_TARGET_IP_ADDRESS ansible_user=your_username\n<h2>ubuntu-docker-02 ansible_host=ANOTHER_TARGET_IP_ADDRESS ansible_user=another_username<\/h2>\n\n[all:vars]\n<h2>Ortak de\u011fi\u015fkenler buraya eklenebilir<\/h2>\nansible_python_interpreter=\/usr\/bin\/python3<\/code><\/pre>\n<p><code>YOUR_TARGET_IP_ADDRESS<\/code> ve <code>your_username<\/code> k\u0131s\u0131mlar\u0131n\u0131 kendi hedef makinenizin IP adresi ve kullan\u0131c\u0131 ad\u0131yla de\u011fi\u015ftirin. E\u011fer SSH anahtar\u0131n\u0131z <code>~\/.ssh\/id_rsa<\/code> d\u0131\u015f\u0131nda bir yerdeyse, <code>ansible_ssh_private_key_file=\/path\/to\/your\/key<\/code> eklemeyi unutmay\u0131n.<\/p>\n<h4><code>ansible.cfg<\/code> Dosyas\u0131 (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilen)<\/h4>\n<p>Bu dosya, Ansible&#8217;\u0131n \u00e7al\u0131\u015fma zaman\u0131 davran\u0131\u015f\u0131n\u0131 yap\u0131land\u0131r\u0131r. Proje dizininizde olmas\u0131, genel Ansible yap\u0131land\u0131rmas\u0131n\u0131 etkilemeden bu projeye \u00f6zel ayarlar yapman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-ini\"># ansible.cfg\n[defaults]\ninventory = .\/inventory.ini\nremote_user = your_username # inventory.ini'deki ansible_user'\u0131 ge\u00e7ersiz k\u0131lar veya varsay\u0131lan\u0131 belirler\nask_pass = False\nhost_key_checking = False # Geli\u015ftirme ortamlar\u0131 i\u00e7in kolayl\u0131k sa\u011flar, \u00fcretimde True olmal\u0131d\u0131r.\n<h2>private_key_file = ~\/.ssh\/id_rsa # inventory.ini'de belirtmek daha esnektir<\/h2>\n\n[privilege_escalation]\nbecome = True # G\u00f6revleri sudo ile \u00e7al\u0131\u015ft\u0131rmak i\u00e7in\nbecome_method = sudo\nbecome_user = root\nbecome_ask_pass = False # E\u011fer hedef makinede \u015fifresiz sudo yap\u0131land\u0131r\u0131ld\u0131ysa<\/code><\/pre>\n<p><code>host_key_checking = False<\/code> ayar\u0131, hedef makinenin SSH anahtar\u0131n\u0131n do\u011frulanmas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131r. G\u00fcvenli bir \u00fcretim ortam\u0131nda bu ayar\u0131n <code>True<\/code> olmas\u0131 ve bilinen anahtarlar\u0131n <code>~\/.ssh\/known_hosts<\/code> dosyas\u0131na eklenmesi \u00f6nerilir. Ancak geli\u015ftirme ortamlar\u0131nda veya ilk kurulumlarda kolayl\u0131k sa\u011flayabilir.<\/p>\n<h4><code>playbook.yml<\/code> (Ana Playbook)<\/h4>\n<p>Bu, Ansible&#8217;\u0131n \u00e7al\u0131\u015ft\u0131raca\u011f\u0131 ana playbook dosyas\u0131d\u0131r. Belirli rolleri belirli gruplara uygular.<\/p>\n<pre><code class=\"language-yaml\"># playbook.yml\n---\n- name: Ubuntu 22.04 Uzerine Docker Kurulumu ve Yapilandirmasi\n  hosts: docker_hosts\n  gather_facts: yes\n  become: yes # Bu playbook icindeki tum gorevleri sudo ile calistir\n  \n  roles:\n    - common\n    - docker<\/code><\/pre>\n<p>*   <code>name<\/code>: Playbook i\u00e7in a\u00e7\u0131klay\u0131c\u0131 bir isim.<br \/>\n*   <code>hosts<\/code>: Bu playbook&#8217;un hangi host grubunda \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir (inventory.ini dosyas\u0131ndaki grup ad\u0131).<br \/>\n*   <code>gather_facts<\/code>: Hedef sistem hakk\u0131nda bilgi toplamas\u0131n\u0131 sa\u011flar (CPU, bellek, IP adresi vb.). Varsay\u0131lan olarak <code>yes<\/code>&#8216;tir.<br \/>\n*   <code>become: yes<\/code>: Bu playbook&#8217;taki t\u00fcm g\u00f6revleri <code>sudo<\/code> yetkisiyle \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>roles<\/code>: Uygulanacak rolleri listeler. \u00d6nce <code>common<\/code> rol\u00fc, sonra <code>docker<\/code> rol\u00fc \u00e7al\u0131\u015f\u0131r.<\/p>\n<h4>Roller Olu\u015fturma<\/h4>\n<p>\u015eimdi <code>roles<\/code> dizini alt\u0131ndaki dosyalar\u0131n i\u00e7eri\u011fini doldural\u0131m.<\/p>\n<h5><code>roles\/common\/tasks\/main.yml<\/code> (Ortak Ayarlar)<\/h5>\n<p>Bu rol, t\u00fcm hedef makinelerde Docker kurulumundan \u00f6nce yap\u0131lmas\u0131 gereken genel sistem g\u00fcncellemeleri ve temel paket kurulumlar\u0131n\u0131 i\u00e7erir.<\/p>\n<pre><code class=\"language-yaml\"># roles\/common\/tasks\/main.yml\n---\n- name: Sistem paketlerini guncelle\n  ansible.builtin.apt:\n    update_cache: yes\n    force_apt_get: yes\n    cache_valid_time: 3600 # 1 saat boyunca cache'i gecerli tut\n\n- name: Gerekli paketleri kur\n  ansible.builtin.apt:\n    name:\n      - apt-transport-https\n      - ca-certificates\n      - curl\n      - gnupg\n      - lsb-release\n      - python3-pip # Docker Compose icin gerekli olabilir\n    state: present\n  register: common_packages_install_result\n  changed_when: common_packages_install_result.changed\n\n- name: Mevcut apt cache'ini temizle\n  ansible.builtin.command: apt clean\n  changed_when: true<\/code><\/pre>\n<p>*   <code>update_cache: yes<\/code>: <code>apt update<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n*   <code>cache_valid_time<\/code>: <code>apt update<\/code> komutunun ne kadar s\u00fcre ge\u00e7erli olaca\u011f\u0131n\u0131 belirler.<br \/>\n*   <code>name<\/code>: Kurulacak paketlerin listesi.<br \/>\n*   <code>state: present<\/code>: Paketlerin kurulu olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>register<\/code> ve <code>changed_when<\/code>: G\u00f6revin ger\u00e7ekten bir de\u011fi\u015fiklik yap\u0131p yapmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in kullan\u0131l\u0131r. <code>apt clean<\/code> her zaman de\u011fi\u015fmi\u015f olarak kabul edildi\u011fi i\u00e7in <code>changed_when: true<\/code> kullan\u0131l\u0131r.<\/p>\n<h5><code>roles\/docker\/tasks\/main.yml<\/code> (Docker Kurulumu)<\/h5>\n<p>Bu, Docker&#8217;\u0131 kuracak ve yap\u0131land\u0131racak ana g\u00f6revleri i\u00e7erir.<\/p>\n<pre><code class=\"language-yaml\"># roles\/docker\/tasks\/main.yml\n---\n- name: Docker'\u0131n eski surumlerini kaldir (varsa)\n  ansible.builtin.apt:\n    name:\n      - docker\n      - docker-engine\n      - docker.io\n      - containerd\n      - runc\n    state: absent\n    autoremove: yes\n    purge: yes\n\n- name: Docker GPG anahtarini ekle\n  ansible.builtin.apt_key:\n    url: https:\/\/download.docker.com\/linux\/ubuntu\/gpg\n    state: present\n  register: add_docker_gpg_key\n  changed_when: add_docker_gpg_key.changed\n\n- name: Docker APT deposunu ekle\n  ansible.builtin.apt_repository:\n    repo: \"deb [arch={{ 'amd64' if ansible_architecture == 'x86_64' else ansible_architecture }}] https:\/\/download.docker.com\/linux\/ubuntu {{ ansible_distribution_release }} stable\"\n    state: present\n    filename: docker\n  register: add_docker_apt_repo\n  changed_when: add_docker_apt_repo.changed\n\n- name: Apt cache'ini guncelle (Docker deposu eklendikten sonra)\n  ansible.builtin.apt:\n    update_cache: yes\n    force_apt_get: yes\n    cache_valid_time: 3600\n\n- name: Docker Engine, containerd ve Docker Compose plugin'i kur\n  ansible.builtin.apt:\n    name:\n      - docker-ce\n      - docker-ce-cli\n      - containerd.io\n      - docker-buildx-plugin\n      - docker-compose-plugin\n    state: present\n    update_cache: yes\n  register: install_docker_packages\n  changed_when: install_docker_packages.changed\n\n- name: Docker servisini baslat ve etkinlestir\n  ansible.builtin.service:\n    name: docker\n    state: started\n    enabled: yes\n  register: docker_service_status\n  changed_when: docker_service_status.changed\n\n- name: Docker grubunu olustur (eger yoksa)\n  ansible.builtin.group:\n    name: docker\n    state: present\n  when: ansible_os_family == \"Debian\" # Ubuntu icin gecerli\n\n- name: Mevcut kullaniciyi 'docker' grubuna ekle\n  ansible.builtin.user:\n    name: \"{{ ansible_user }}\" # inventory.ini'deki kullanici adini kullan\n    groups: docker\n    append: yes\n  notify: Docker servisini yeniden baslat\n  # Bu gorev sonrasi kullanicinin docker grubuna dahil olmasi icin oturumu kapatip acmasi gerekir.\n  # Ancak Docker servisini yeniden baslatmak, mevcut oturumlarin degil, sistemin ayarlarini gunceller.\n\n- name: Docker daemon.json dosyasini yap\u0131land\u0131r (iste\u011fe ba\u011fl\u0131)\n  ansible.builtin.template:\n    src: daemon.json.j2\n    dest: \/etc\/docker\/daemon.json\n    owner: root\n    group: root\n    mode: '0644'\n  notify: Docker servisini yeniden baslat\n  when: docker_daemon_config is defined and docker_daemon_config | length > 0\n\n- name: Docker servisi durumunu kontrol et\n  ansible.builtin.systemd:\n    name: docker\n    state: started\n    enabled: yes<\/code><\/pre>\n<p>*   <strong>Eski S\u00fcr\u00fcmleri Kald\u0131rma:<\/strong> \u00d6nceki Docker kurulumlar\u0131ndan kalan paketleri temizler.<br \/>\n*   <strong>GPG Anahtar\u0131n\u0131 Ekleme:<\/strong> Docker&#8217;\u0131n resmi deposunun g\u00fcvenli\u011fini sa\u011flamak i\u00e7in GPG anahtar\u0131n\u0131 ekler.<br \/>\n*   <strong>APT Deposunu Ekleme:<\/strong> Docker paketlerini \u00e7ekebilece\u011fi resmi Docker deposunu sisteminize ekler. <code>ansible_architecture<\/code> ve <code>ansible_distribution_release<\/code> de\u011fi\u015fkenleri, Ansible taraf\u0131ndan toplanan sistem bilgileridir ve depoyu dinamik olarak do\u011fru mimari ve Ubuntu s\u00fcr\u00fcm\u00fcne g\u00f6re ayarlar.<br \/>\n*   <strong>Apt Cache&#8217;ini G\u00fcncelleme:<\/strong> Yeni depo eklendikten sonra paket listelerini g\u00fcnceller.<br \/>\n*   <strong>Docker Engine Kurulumu:<\/strong> <code>docker-ce<\/code>, <code>docker-ce-cli<\/code>, <code>containerd.io<\/code> ve Docker Compose eklentilerini kurar.<br \/>\n*   <strong>Docker Servisini Ba\u015flatma:<\/strong> Docker servisini ba\u015flat\u0131r ve sistem ba\u015flang\u0131c\u0131nda otomatik olarak ba\u015flamas\u0131 i\u00e7in etkinle\u015ftirir.<br \/>\n*   <strong>Docker Grubunu Olu\u015fturma ve Kullan\u0131c\u0131 Ekleme:<\/strong> <code>docker<\/code> grubunu olu\u015fturur (Ubuntu&#8217;da genellikle zaten vard\u0131r) ve <code>ansible_user<\/code> de\u011fi\u015fkenindeki kullan\u0131c\u0131y\u0131 bu gruba ekler. Bu, kullan\u0131c\u0131n\u0131n <code>sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131na olanak tan\u0131r.<br \/>\n*   <strong>Daemon Yap\u0131land\u0131rmas\u0131:<\/strong> \u0130ste\u011fe ba\u011fl\u0131 olarak <code>\/etc\/docker\/daemon.json<\/code> dosyas\u0131n\u0131 bir \u015fablon arac\u0131l\u0131\u011f\u0131yla yap\u0131land\u0131r\u0131r. Bu, \u00f6rne\u011fin \u00f6zel bir registry veya g\u00fcnl\u00fck ayarlar\u0131 i\u00e7in kullan\u0131labilir. Bu ad\u0131m, <code>docker_daemon_config<\/code> de\u011fi\u015fkeni tan\u0131mland\u0131\u011f\u0131nda ve bo\u015f olmad\u0131\u011f\u0131nda \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong>Servis Durumu Kontrol\u00fc:<\/strong> Kurulum sonras\u0131 Docker servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olur.<\/p>\n<h5><code>roles\/docker\/handlers\/main.yml<\/code> (Servis Yeniden Ba\u015flatma)<\/h5>\n<p>Handlers, belirli bir g\u00f6revin durumu de\u011fi\u015fti\u011finde (\u00f6rne\u011fin bir yap\u0131land\u0131rma dosyas\u0131 de\u011fi\u015fti\u011finde) tetiklenen g\u00f6revlerdir.<\/p>\n<pre><code class=\"language-yaml\"># roles\/docker\/handlers\/main.yml\n---\n- name: Docker servisini yeniden baslat\n  ansible.builtin.service:\n    name: docker\n    state: restarted\n  listen: \"Docker servisini yeniden baslat\" # <code>notify<\/code> ile e\u015fle\u015fen isim<\/code><\/pre>\n<p>Bu handler, <code>daemon.json<\/code> dosyas\u0131 de\u011fi\u015fti\u011finde veya kullan\u0131c\u0131 <code>docker<\/code> grubuna eklendi\u011finde Docker servisini yeniden ba\u015flatmak i\u00e7in kullan\u0131l\u0131r. <code>listen<\/code> anahtar kelimesi, bu handler&#8217;\u0131n hangi <code>notify<\/code> komutlar\u0131na yan\u0131t verece\u011fini belirtir.<\/p>\n<h5><code>roles\/docker\/templates\/daemon.json.j2<\/code> (Docker Daemon Yap\u0131land\u0131rmas\u0131)<\/h5>\n<p>Bu dosya, Docker daemon&#8217;u i\u00e7in iste\u011fe ba\u011fl\u0131 yap\u0131land\u0131rmalar\u0131 i\u00e7erir. Jinja2 \u015fablon motoru sayesinde dinamik de\u011fi\u015fkenler kullanabiliriz.<\/p>\n<pre><code class=\"language-json\">{# roles\/docker\/templates\/daemon.json.j2 #}\n{\n  \"log-driver\": \"json-file\",\n  \"log-opts\": {\n    \"max-size\": \"10m\",\n    \"max-file\": \"3\"\n  },\n  \"insecure-registries\": [\n    {% for registry in docker_daemon_config.insecure_registries %}\n    \"{{ registry }}\"{% if not loop.last %},{% endif %}\n    {% endfor %}\n  ],\n  \"data-root\": \"{{ docker_data_root | default('\/var\/lib\/docker') }}\"\n}<\/code><\/pre>\n<p>Bu \u015fablon, \u00f6rnek olarak g\u00fcnl\u00fck ayarlar\u0131n\u0131 ve g\u00fcvensiz registry&#8217;leri yap\u0131land\u0131r\u0131r. <code>docker_daemon_config<\/code> ve <code>docker_data_root<\/code> gibi de\u011fi\u015fkenler, <code>defaults\/main.yml<\/code> veya <code>playbook.yml<\/code> \u00fczerinden tan\u0131mlanabilir.<\/p>\n<h5><code>roles\/docker\/defaults\/main.yml<\/code> (Varsay\u0131lan De\u011fi\u015fkenler)<\/h5>\n<p>Bu dosya, rol i\u00e7inde kullan\u0131lacak varsay\u0131lan de\u011fi\u015fkenleri tan\u0131mlar. Bu de\u011fi\u015fkenler, playbook veya envanter dosyalar\u0131nda ge\u00e7ersiz k\u0131l\u0131nabilir.<\/p>\n<pre><code class=\"language-yaml\"># roles\/docker\/defaults\/main.yml\n---\n<h2>Docker daemon yap\u0131land\u0131rmas\u0131 i\u00e7in varsay\u0131lan de\u011fi\u015fkenler<\/h2>\ndocker_daemon_config:\n  insecure_registries: [] # Ornek: [\"myregistry.local:5000\"]\ndocker_data_root: \/var\/lib\/docker # Docker'\u0131n verilerini saklayaca\u011f\u0131 dizin<\/code><\/pre>\n<p>Burada, <code>daemon.json.j2<\/code> \u015fablonunda kullan\u0131lan de\u011fi\u015fkenler i\u00e7in varsay\u0131lan de\u011ferler tan\u0131mlanm\u0131\u015ft\u0131r. <code>insecure_registries<\/code> varsay\u0131lan olarak bo\u015f bir liste olarak gelir.<\/p>\n<h3>Playbook&#8217;u \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>T\u00fcm dosyalar\u0131 olu\u015fturduktan sonra, kontrol makinenizdeki <code>ansible-docker-ubuntu<\/code> dizininde oldu\u011funuzdan emin olun ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook playbook.yml<\/code><\/pre>\n<p>E\u011fer hedef makinede <code>sudo<\/code> \u015fifresi gerekiyorsa, komuta <code>-K<\/code> (veya <code>--ask-become-pass<\/code>) parametresini eklemeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook playbook.yml -K<\/code><\/pre>\n<p>Ansible, playbook&#8217;u ad\u0131m ad\u0131m y\u00fcr\u00fctecek ve her g\u00f6revin durumunu (de\u011fi\u015fti mi, ba\u015far\u0131l\u0131 m\u0131, atland\u0131 m\u0131) g\u00f6sterecektir. Ye\u015fil \u00e7\u0131kt\u0131lar bir de\u011fi\u015fikli\u011fin olmad\u0131\u011f\u0131n\u0131, sar\u0131 \u00e7\u0131kt\u0131lar bir de\u011fi\u015fikli\u011fin yap\u0131ld\u0131\u011f\u0131n\u0131 ve k\u0131rm\u0131z\u0131 \u00e7\u0131kt\u0131lar ise bir hatan\u0131n meydana geldi\u011fini g\u00f6sterir.<\/p>\n<h3>Kurulumu Do\u011frulama<\/h3>\n<p>Playbook ba\u015far\u0131yla tamamland\u0131ktan sonra, hedef makineye SSH ile ba\u011flanarak Docker kurulumunu do\u011frulayabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">ssh your_username@YOUR_TARGET_IP_ADDRESS<\/code><\/pre>\n<p>Ard\u0131ndan a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<p>*   <strong>Docker versiyonunu kontrol et:<\/strong><\/p>\n<pre><code class=\"language-bash\">docker --version<\/code><\/pre>\n<p>    Bu, kurulu Docker Engine s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6stermelidir.<\/p>\n<p>*   <strong>Docker servisi durumunu kontrol et:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo systemctl status docker<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131da &#8220;active (running)&#8221; ifadesini g\u00f6rmelisiniz.<\/p>\n<p>*   <strong>&#8220;Hello World&#8221; konteynerini \u00e7al\u0131\u015ft\u0131rarak Docker&#8217;\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frula:<\/strong><\/p>\n<pre><code class=\"language-bash\">docker run hello-world<\/code><\/pre>\n<p>    Bu komut, bir test imaj\u0131n\u0131 \u00e7ekecek ve basit bir mesaj yazd\u0131rarak Docker&#8217;\u0131n d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterecektir. E\u011fer kullan\u0131c\u0131y\u0131 <code>docker<\/code> grubuna eklediyseniz ve oturumu yeniden ba\u015flatt\u0131ysan\u0131z, <code>sudo<\/code> kullanmadan da \u00e7al\u0131\u015facakt\u0131r.<\/p>\n<p>    E\u011fer <code>docker run hello-world<\/code> komutu <code>permission denied<\/code> hatas\u0131 veriyorsa, hedef makinede oturumunuzu kapat\u0131p tekrar a\u00e7man\u0131z gerekebilir. Bu, kullan\u0131c\u0131n\u0131n <code>docker<\/code> grubuna dahil olmas\u0131n\u0131n etkinle\u015fmesi i\u00e7in gereklidir.<\/p>\n<h3>Ek Docker Yap\u0131land\u0131rmalar\u0131 (\u0130ste\u011fe Ba\u011fl\u0131)<\/h3>\n<p>Docker kurulumu genellikle temel bir yap\u0131land\u0131rmadan daha fazlas\u0131n\u0131 gerektirir. \u0130\u015fte baz\u0131 yayg\u0131n ek yap\u0131land\u0131rmalar:<\/p>\n<h4>Non-root Kullan\u0131c\u0131 i\u00e7in Docker Eri\u015fimi<\/h4>\n<p>Yukar\u0131daki playbook&#8217;ta, <code>ansible_user<\/code>&#8216;\u0131 <code>docker<\/code> grubuna ekleyerek bu ad\u0131m\u0131 zaten otomatikle\u015ftirdik. Ancak, bu de\u011fi\u015fikli\u011fin etkili olmas\u0131 i\u00e7in kullan\u0131c\u0131n\u0131n oturumu kapat\u0131p a\u00e7mas\u0131 gerekti\u011fini unutmay\u0131n. Bu, Ansible taraf\u0131ndan otomatik olarak yap\u0131labilecek bir \u015fey de\u011fildir, \u00e7\u00fcnk\u00fc Ansible mevcut SSH oturumunu kesintiye u\u011fratmak istemez.<\/p>\n<h4>Docker Compose Kurulumu<\/h4>\n<p>Docker Compose, \u00e7ok konteynerli Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir ara\u00e7t\u0131r. Yukar\u0131daki playbook&#8217;ta <code>docker-compose-plugin<\/code>&#8216;i kurarak Docker CLI ile entegre bir \u015fekilde kullan\u0131lmas\u0131n\u0131 sa\u011flad\u0131k. Art\u0131k <code>docker compose<\/code> komutunu do\u011frudan kullanabilirsiniz.<\/p>\n<h4>G\u00fcvenlik Duvar\u0131 Ayarlar\u0131<\/h4>\n<p>G\u00fcvenlik, herhangi bir sunucu kurulumunun kritik bir par\u00e7as\u0131d\u0131r. Ubuntu&#8217;da varsay\u0131lan g\u00fcvenlik duvar\u0131 arac\u0131 <code>ufw<\/code>&#8216;dir. Docker, varsay\u0131lan olarak <code>iptables<\/code> kurallar\u0131n\u0131 y\u00f6netir, ancak <code>ufw<\/code> ile \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek ve ek g\u00fcvenlik sa\u011flamak i\u00e7in dikkatli olunmal\u0131d\u0131r.<\/p>\n<p>Ansible ile <code>ufw<\/code>&#8216;yi yap\u0131land\u0131rmak i\u00e7in <code>common<\/code> rol\u00fcne veya yeni bir <code>firewall<\/code> rol\u00fcne a\u015fa\u011f\u0131daki g\u00f6revleri ekleyebilirsiniz:<\/p>\n<pre><code class=\"language-yaml\"># roles\/common\/tasks\/main.yml veya roles\/firewall\/tasks\/main.yml i\u00e7ine eklenecek\n- name: UFW'yi etkinlestir\n  community.general.ufw:\n    state: enabled\n    default: deny\n  when: ansible_os_family == \"Debian\" # Ubuntu icin gecerli\n\n- name: SSH icin port 22'ye izin ver\n  community.general.ufw:\n    rule: allow\n    port: '22'\n    proto: tcp\n  when: ansible_os_family == \"Debian\"\n\n- name: Docker'\u0131n kullanacagi portlara izin ver (ornegin 80 ve 443)\n  community.general.ufw:\n    rule: allow\n    port: '80'\n    proto: tcp\n  when: ansible_os_family == \"Debian\"\n\n- name: Docker'\u0131n kullanacagi portlara izin ver (ornegin 80 ve 443)\n  community.general.ufw:\n    rule: allow\n    port: '443'\n    proto: tcp\n  when: ansible_os_family == \"Debian\"\n\n<h2>Docker'\u0131n iptables kurallar\u0131n\u0131 UFW ile \u00e7ak\u0131\u015fmadan y\u00f6netebilmesi i\u00e7in<\/h2>\n<h2>UFW'nin varsay\u0131lan politikas\u0131 \"deny\" iken Docker'\u0131n k\u00f6pr\u00fc a\u011f trafi\u011fine izin vermesi i\u00e7in<\/h2>\n<h2>\/etc\/default\/ufw dosyas\u0131nda DEFAULT_FORWARD_POLICY=\"ACCEPT\" ayar\u0131n\u0131 yapmak gerekebilir.<\/h2>\n<h2>Ancak bu, g\u00fcvenlik a\u00e7\u0131s\u0131ndan riskli olabilir ve dikkatli d\u00fc\u015f\u00fcn\u00fclmelidir.<\/h2>\n<h2>Alternatif olarak, Docker konteynerlerine do\u011frudan eri\u015fim yerine bir reverse proxy (nginx\/traefik) kullanmak daha g\u00fcvenlidir.<\/code><\/pre>\n<\/h2>\n<p>Bu g\u00f6revler, SSH trafi\u011fine izin verir ve <code>ufw<\/code>&#8216;yi etkinle\u015ftirir. Docker&#8217;\u0131n kendi a\u011f kurallar\u0131n\u0131 y\u00f6netme \u015fekli nedeniyle, <code>ufw<\/code> ile entegrasyon bazen karma\u015f\u0131k olabilir. Genellikle, Docker konteynerleri i\u00e7in bir ters proxy (Nginx, Traefik) kullanmak ve sadece proxy&#8217;nin portlar\u0131n\u0131 a\u00e7mak daha g\u00fcvenli ve y\u00f6netilebilir bir yakla\u015f\u0131md\u0131r.<\/p>\n<h3>Sorun Giderme<\/h3>\n<p>Ansible playbook&#8217;lar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rken veya Docker kurulumunda sorunlarla kar\u015f\u0131la\u015fabilirsiniz. \u0130\u015fte baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>SSH Ba\u011flant\u0131 Hatalar\u0131:<\/strong><br \/>\n    *   <code>ansible_host<\/code>, <code>ansible_user<\/code> veya SSH anahtar yolu do\u011fru mu?<br \/>\n    *   Hedef makineye manuel olarak SSH yapabiliyor musunuz?<br \/>\n    *   G\u00fcvenlik duvar\u0131 SSH portunu (22) engelliyor olabilir mi?<br \/>\n*   <strong>Sudo Hatalar\u0131 (<code>become<\/code> ile ilgili):<\/strong><br \/>\n    *   Hedef kullan\u0131c\u0131 <code>sudo<\/code> yetkisine sahip mi?<br \/>\n    *   \u015eifresiz <code>sudo<\/code> yap\u0131land\u0131r\u0131ld\u0131 m\u0131? E\u011fer de\u011filse, <code>ansible-playbook -K playbook.yml<\/code> kullanman\u0131z gerekir.<br \/>\n    *   <code>ansible.cfg<\/code> veya <code>inventory.ini<\/code> dosyas\u0131ndaki <code>become_user<\/code>, <code>become_method<\/code> ayarlar\u0131 do\u011fru mu?<br \/>\n*   <strong>Paket Kurulum Hatalar\u0131:<\/strong><br \/>\n    *   Hedef makinenin internet eri\u015fimi var m\u0131?<br \/>\n    *   APT depolar\u0131 do\u011fru yap\u0131land\u0131r\u0131ld\u0131 m\u0131?<br \/>\n    *   GPG anahtarlar\u0131 ba\u015far\u0131yla eklendi mi?<br \/>\n    *   <code>sudo apt update<\/code> manuel olarak \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda hata veriyor mu?<br \/>\n*   <strong>Docker Servisi Ba\u015flam\u0131yor:<\/strong><br \/>\n    *   <code>sudo systemctl status docker<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak loglar\u0131 kontrol edin.<br \/>\n    *   <code>journalctl -xeu docker.service<\/code> ile daha detayl\u0131 loglara bak\u0131n.<br \/>\n    *   <code>\/etc\/docker\/daemon.json<\/code> dosyas\u0131nda bir s\u00f6zdizimi hatas\u0131 olabilir mi?<br \/>\n*   <strong><code>docker run<\/code> \u0130zin Hatas\u0131 (<code>permission denied<\/code>):<\/strong><br \/>\n    *   Kullan\u0131c\u0131n\u0131n <code>docker<\/code> grubuna eklenip eklenmedi\u011fini kontrol edin: <code>groups your_username<\/code>.<br \/>\n    *   Kullan\u0131c\u0131n\u0131n oturumunu kapat\u0131p tekrar a\u00e7t\u0131\u011f\u0131ndan emin olun. Bu, grup \u00fcyeli\u011fi de\u011fi\u015fikliklerinin uygulanmas\u0131 i\u00e7in gereklidir.<\/p>\n<p>Hata mesajlar\u0131n\u0131 dikkatlice okumak ve Google&#8217;da aratmak, \u00e7o\u011fu sorunun \u00e7\u00f6z\u00fcm\u00fcne ula\u015fman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Ansible&#8217;\u0131n <code>-vvv<\/code> (\u00e7ok detayl\u0131) veya <code>-C<\/code> (dry run) gibi parametreleri de sorun gidermede faydal\u0131 olabilir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Ansible&#8217;\u0131 kullanarak Ubuntu 22.04 i\u015fletim sistemi \u00fczerine Docker&#8217;\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve temel olarak nas\u0131l yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ayr\u0131nt\u0131l\u0131 bir \u015fekilde ele ald\u0131k. Ansible&#8217;\u0131n deklaratif yap\u0131s\u0131 ve ajans\u0131z mimarisi sayesinde, bu s\u00fcreci tamamen otomatize ederek tekrarlanabilir, \u00f6l\u00e7eklenebilir ve hatas\u0131z bir da\u011f\u0131t\u0131m y\u00f6ntemi olu\u015fturduk.<\/p>\n<p>Olu\u015fturdu\u011fumuz Ansible rolleri, Docker kurulumunun t\u00fcm ad\u0131mlar\u0131n\u0131 (paket g\u00fcncellemeleri, GPG anahtar\u0131 ekleme, depo yap\u0131land\u0131rmas\u0131, Docker Engine kurulumu, kullan\u0131c\u0131 grubuna ekleme ve iste\u011fe ba\u011fl\u0131 daemon yap\u0131land\u0131rmas\u0131) kapsad\u0131. Bu yap\u0131, hem yeni sunucular\u0131n h\u0131zl\u0131 bir \u015fekilde haz\u0131rlanmas\u0131n\u0131 sa\u011flar hem de mevcut sunucular\u0131n yap\u0131land\u0131rmas\u0131n\u0131 kolayca g\u00fcncellemeyi m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<p>Ansible ve Docker&#8217;\u0131n birle\u015fimi, modern DevOps uygulamalar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc bir temel sunar. Altyap\u0131n\u0131z\u0131 kod olarak y\u00f6netmek (Infrastructure as Code &#8211; IaC) prensiplerini benimseyerek, geli\u015ftirme, test ve \u00fcretim ortamlar\u0131n\u0131z aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 art\u0131rabilir, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi h\u0131zland\u0131rabilir ve operasyonel maliyetlerinizi d\u00fc\u015f\u00fcrebilirsiniz. Bu rehber, kendi otomasyon yolculu\u011funuzda size sa\u011flam bir ba\u015flang\u0131\u00e7 noktas\u0131 sa\u011flamal\u0131d\u0131r. Gelecekte, bu playbook&#8217;u Docker Compose uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131, konteyner a\u011flar\u0131 veya depolama \u00e7\u00f6z\u00fcmleri gibi daha karma\u015f\u0131k senaryolar\u0131 i\u00e7erecek \u015fekilde geni\u015fletebilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131\nAnsible, IT otomasyonu i\u00e7in g\u00fc\u00e7l\u00fc, a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7t\u0131r. Basitli","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-33482","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131\" \/>\n<meta property=\"og:description\" content=\"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131 Ansible, IT otomasyonu i\u00e7in g\u00fc\u00e7l\u00fc, a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7t\u0131r. Basitli\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-03T07:41:06+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131\",\"datePublished\":\"2025-11-03T07:41:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/\"},\"wordCount\":2642,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/\",\"name\":\"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-03T07:41:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/","og_locale":"tr_TR","og_type":"article","og_title":"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131","og_description":"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131 Ansible, IT otomasyonu i\u00e7in g\u00fc\u00e7l\u00fc, a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7t\u0131r. Basitli","og_url":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-03T07:41:06+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131","datePublished":"2025-11-03T07:41:06+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/"},"wordCount":2642,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/","url":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/","name":"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-03T07:41:06+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-22-04-uzerine-docker-kurulumu-ve-yapilandirmasi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ansible ile Ubuntu 22.04 \u00dczerine Docker Kurulumu ve Yap\u0131land\u0131rmas\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33482"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33482\/revisions"}],"predecessor-version":[{"id":33483,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33482\/revisions\/33483"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}