Seviye: Ba■lang■ç
Buras■ Container yap■lar■n■ ke■fetmeniz ve Docker' ■ ö■renmeniz için olu■turulmu■
playground ortam■d■r.
Docker Nedir?
Docker, aç■k kaynak bir Container motorudur. Daha iyi anlamak için mimarisini ve bile■enlerini
inceleyelim:
How does Docker work
Docker Client, docker komutlar■n■ çal■■t■rd■■■n■z komut sat■r■ arayüzü arac■d■r. Gelen
talepleri Docker API üzerinden Docker Daemon' a iletir.
Docker Host üzerinde Docker Daemon çal■■maktad■r.
Docker Daemon, API üzerinden gelen istekleri dinlemekte ve gerçekle■tirmektedir. Tüm container
süreçleri burada yönetilir.
Docker Registry ise aç■k kaynakl■ olarak image' lar■n■z■ yükleyebilece■iniz ve DockerHub' da
payla■abilece■iniz bir kay■t defteri arac■d■r. Docker içerisinde çal■■t■rabilece■iniz image' lar
burada saklan■r. DockerHub, docker taraf■ndan hizmet veren herkesin kullan■m■na aç■k public
bir kay■t defteridir.
Docker Image, container olu■tururken kulland■■■m■z template'lerdir. Çal■■acak
uygulaman■z■n ve uygulaman■z■n altyap■s■nda çal■■an gerekli i■letim sistemi
kütüphanelerinin bulundu■u bir yap■d■r. Container' lar■n yeteneklerini ve ihtiaçlar■n■
tan■mlayan metadata verilerini de saklamaktad■r.
Docker Container, docker image' lardan olu■turulan uygulamalard■r. Docker Image'■n çal■■an
bir örne■idir. Uygulamay■ çal■■t■rmak için gereken tüm paketleri containerlar bünyesinde
tutmaktad■r. Image bir ■ablondur ve containerlar da bu ■ablonun çal■■an bir kopyas■d■r.
Container nedir?
Container'lar içlerinde uygulamay■, uygulaman■n çal■■mas■n■ sa■layan sistem araçlar■n■
(dependencies) ve sistem kütüphanelerini (libraries) bar■nd■r■r. Bir "Container Engine" olan
Docker ise sanal makine görevi gören ama sanal makine olmayan bu container'lar■ yaratmay■
sa■lar. Container'lar sanal makinelere benzetilebilir fakat bilinmelidir ki Container'lar sanal
makineler kadar kaynak tüketmezler. Çünkü tüm i■letim sistemi gereksinimlerini, üzerinde kurulu
olduklar■ i■letim sistemi ile ortak kullan■[Link] çal■■t■klar■ sunucunun veya host'un çekirdek
seviyesinde ayn■ i■letim sistemini payla■■[Link] makine ise kendi i■letim sistemini ve tüm
bile■enlerini çal■■t■r■r. Container'lar■n boyutlar■ da bu yüzden çok küçüktür (ortalama 100MB).
Sistem yönetimini oldukça kolay bir hale getirirken, kaynak israf■n■ da dramatik bir ■ekilde
azaltan Container teknolojisi, sektörde oldukça önemli bir yer edinmi■tir.
Ö■renme Hedefleri
Docker Playground ortam■n■ tamamlad■ktan sonra;
Container olu■turma, çal■■t■rma, silme, listeleme gibi i■lemleri yapabileceksiniz.
Docker Image yap■s■na ve komutlar■na hakim olacaks■n■z.
Dockerfile komutlar■na hakim olacak ve katmanl■ dockerfile dosyalar■yla çal■■abileceksiniz.
Docker üzerinde Data Volume ve Bind Volume tan■mlamas■ yapabilecek, bunlar■ container
içerisine ba■layabileceksiniz.
Docker Network objeleri üzerinde i■lemler yapabileceksiniz.
Temel Komutlar
Bu bölümde temel Docker komutlar■ üzerinde duraca■■z.
docker komutunu kullanarak docker komutlar■na dair seçenekleri, yönetim komutlar■n■ ve di■er
tüm komutlar■ aç■klamalar■yla birlikte görüntüleyebilirsiniz:
■lk Komut: docker
>> Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default
"/root/.docker")
-c, --context string Name of the context to use to connect to the
daemon (overrides DOCKER_HOST env var and
default context set with "docker context use")
-D, --debug Enable debug mode
■kinci Komut: docker images --help
root@bulutbilisimciler:~#
>> Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
Üçüncü Komut: docker version
docker client ve docker engine hakk■nda detayl■ bilgileri ö■renebilirsiniz. Ayn■ zamanda docker
client'■n docker daemon ile sorunsuz bir ■ekilde ileti■ime geçti■ini test etmi■ olacaks■n■z:
# docker version
>> Client:
Cloud integration: v1.0.22
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Dördüncü Komut: docker info
komutu ile docker yap■n■z hakk■nda detayl■ bilgilere sahip olabilirsiniz. Docker üzerinde
olu■turdu■unuz container bilgileri (running, paused, stopped), image bilgileri, storage driver
bilgileri, sistem üzerinde swarm'■ aktif edip etmedi■inize dair bilgiler gibi genel bilgileri elde
edebilirsiniz:
# docker info
>> Client:
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc., v0.7.1)
compose: Docker Compose (Docker Inc., v2.2.3)
scan: Docker Scan (Docker Inc., v0.17.0)
Be■inci Komut: docker -D info
komutu ile docker üzerinde debug modu aktif hale getirebilirsiniz:
# docker -D info
>> Client:
Context: default
Debug Mode: true
Plugins:
buildx: Docker Buildx (Docker Inc., v0.7.1)
compose: Docker Compose (Docker Inc., v2.2.3)
scan: Docker Scan (Docker Inc., v0.17.0)
Alt■nc■ Komut: docker container run hello-world
komutu hello-world isimli image ile yeni container olu■turur ve ba■lat■r. Docker Daemon, Image'
■n localde olup olmad■■■n■ kontrol eder. Image localde yer al■yorsa bu image'■ kullanarak yeni
bir container olu■turur. E■er image lokalde yoksa varsay■lan kay■t defteri olan [Link]
adresinde hello-world isimli image'■ sorgular. Burada image yer al■yorsa image'■ locale indirir ve
bu image'■ baz alarak yeni bir container olu■turur ve çal■■t■r■r. Böylece servis aya■a kalkm■■
olur:
# docker container run hello-world
>> Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
Yedinci Komut: docker search
komutu ile istedi■iniz image'■ [Link] adresinde arayabilir ve detayl■ bir liste elde
edebilirsiniz:
# docker search centos
>> NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 7190 [OK]
Sekizinci Komut: docker pull komutu ile belirtilen image'■, [Link] adresinden sisteminize
çekebilirsiniz: Örne■in httpd image'■ için:
# docker pull httpd
>>Using default tag: latest
latest: Pulling from library/httpd
42c077c10790: Pull complete
77a357ba66a8: Pull complete
e9e2f87fc2ce: Pull complete
0b3c9bceb738: Pull complete
de91965861a5: Pull complete
Digest: sha256:f899e432292e4ee92772d35e43b2e3dcf30042b1c6385d33f00a9300c69ee729
Status: Downloaded newer image for httpd:latest
[Link]/library/httpd:latest
Dokuzuncu komut: docker images
komutuyla sistemdeki image'lar■ listeleyebilirsiniz:
# docker images
>>REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest b260a49eebf9 a seconds ago 145MB
Not=> Docker'da baz■ komutlar, daha uzun tam komutlar■n k■saltmalar■ olarak sunulmu■[Link]
aslunda docker image ls komutunun k■saltmas■d■r
Onuncu komut: docker container run --help
komutu ile container olu■tururken kullanabilece■iniz parametrelere dair bilgi edinebilirsiniz:
# docker container run --help
>> Usage: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
Options:
--add-host list Add a custom host-to-IP mapping
(host:ip)
-a, --attach list Attach to STDIN, STDOUT or STDERR
--blkio-weight uint16 Block IO (relative weight),
between 10 and 1000, or 0 to
disable (default 0)
--blkio-weight-device list Block IO weight (relative device
weight) (default [])
Not => Bu komut da asl■nda docker run diyerek k■saca da kullan■r■z.Çünkü container d■s■nda
■mage veya volume do■rudan çal■■t■r■labilir varl■klar de■ildir.
Docker'da container üzerinde yapaca■■m■z i■lemlere geçmeden önce, önemli bir kaç komuta
bakal■m. Öncelikle docker container run komutu, docker container create ve docker container start
komutunun birle■imidir.
Her image'da, o image'dan bir container create etti■imiz zaman default çal■■mas■ için
ayarlanm■■ bir uygulama vard■r. Container, bu uygulama çal■■t■■■ sürece ayakta kal■r.
Uygulama çal■■may■ b■rakt■■■nda container da kapat■l■r.
Peki image'■n içinde sadece tek bir uygulama m■ var? Hay■r bir Docker image'■n■n içinde
birden fazla uygulama olabilir. Sadece tek bir uygulama içermelidir gibi bir kural yok. Fakat Docker,
container start edildi■inde default çal■■mas■ için yaln■z tek bir uygulaman■n ayarlanmas■na
izin verir. Bunun hangi uygulama olaca■■n■ container yarat■l■rken belirtebiliriz.
docker container run -d -p 80:80 httpd komutunu çal■■t■r■rsak, httpd registry'sindeki default
uygulamay■ "80:80" portundan ça■■r■r■z. "-d" komutu sayesinde container'■ detach ederiz yani
arkaplanda çal■■t■r■r■z. Yani loglar■n■/ç■kt■lar■n■ kendi shell'imizde görmeyiz ama
container arkada çal■■maya devam eder:
root@/root/workspace:~# docker container run -d -p 80:80 httpd
Gördü■ünüz gibi herhangi bir ç■kt■ al■nmad■ fakat container'■n arkaplanda çal■■t■■■n■
biliyoruz. O halde çal■■an/çal■■mayan tüm container'lar■m■z■ görmek için docker container ls
-a veya docker ps -a komutunu çal■■t■ral■m. Bu iki komut da ayn■ görevi görür:
# docker container ls -a
>> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
940d1da952e5 httpd "httpd-foreground" 5 seconds ago Up 4 seconds [Link]:80->80/tcp
musing_ardinghelli
# docker ps -a
>> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
940d1da952e5 httpd "httpd-foreground" About a minute ago Up About a minute [Link]:80->80/tcp
musing_ardinghelli
Container'lar■ silmek için ise docker container rm diyip container'lar■n ID'lerinin ilk 3-digit'ini
girebiliriz. Bu komut çal■■an container'lar■ silemez. Çal■■an bir container'■ silmek için docker
container rm -f ilk3Digit komutunu kullanabiliriz.
# docker container rm 940
>> Error response from daemon: You cannot remove a running container
940d1da952e5d3ae548786286f3aa4f0cc38df67db867194b1fd1be1b3b882d3. Stop the container
before attempting removal or force remove
# docker container rm -f 940
>> 940
Bu komutlar■n ard■ndan container listeleme yani docker container ls -a komutunu çal■■t■ral■m
ve ayakta container olmad■■■n■ görelim:
root@bulutbilisimciler:~# docker container ls -a
>> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES