Docker, containerization olarak da bilinen işletim sistemi düzeyinde sanallaştırmayı gerçekleştiren bir programdır.

Container Nedir?

Container'lar, uygulama katmanında kodu ve bağımlılıkları paketleyen bir soyutlamadır. Virtual Machine'in aksine host işletim sisteminin çekirdeğini kullanır. Bir makinede birden fazla container çalışabilir. Aynı makinede çalışan container'lar host işletim sisteminin çekirdeğini paylaşır. Her bir container user space'te izole bir process olarak çalışır.

Docker Image Nedir?

Docker image, Docker container'ı oluşturmak için kullanılan read-only bir template'tir.

Neden Docker?

  • Bir Docker container'ı Docker çalışan her sistemde aynı çalışır.
  • Her bir container diğer container'lardan ve host işletim sisteminden izole çalışır.
  • Bir container tehlike altındaysa diğerleri bundan etkilenmez.
  • Docker registery'de image aramak ve paylaşmak çok kolaydır.
  • Continuous Integration&Deployment süreçleriyle çok iyi çalışır.
  • Farklı versiyonların yönetimi kolaydır.

Kullanım

docker pull

docker pull nginx

Yukarıdaki komut nginx imajını indirir. Varsayılan olarak latest tag'i indirilir.

docker pull ngix:latest

Yukarıdaki gibi istenen tag belirtilebilir. Yukarıdaki komut nginx'in latest versiyonunu indirir.

docker pull nginx:stable

Yukarıdaki komut nginx'in stable versiyonunu indirir.

docker image ls

docker image ls

Yukarıdaki komut image'ları listeler.

docker image ls -q

Yukarıdaki komut image'ların sadece IMAGE ID'lerini listeler.

docker run

docker run -d nginx

Yukarıdaki komut nginx imajını kullanarak bir container oluşturur. -d opsiyonu verildiği için de deatached modda çalışır.

docker run --name some-nginx -d nginx

Yukarıdaki komut bir önceki komuta ek olarak, oluşturulan container'a some-nginx ismini atar.

docker run --rm --name remove-nginx -d nginx

Yukarıdaki komut bir önceki komuta ek olarak, container ya da deamon exit olduğunda container'ı siler.

docker run --name port-nginx -p 8080:80 -d nginx

Yukarıdaki komut container içindeki 80 port'unu host işletim sistemindeki 8080 port'una bind eder.

curl localhost:8080

Bir önceki komutu çalıştırdıktan sonra yukarıdaki komutu çalıştırırsak aşağıdaki gibi bir çıktı alırız.

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
mkdir nginx
echo "<h1>Hello, World</h1>" > nginx/index.html
docker run -p 80:80 -v $(pwd)/nginx:/usr/share/nginx/html -d nginx

Yukarıdaki Docker komutu, bulunduğumuz dizinde oluşturulan nginx dizinini container içerisindeki /usr/share/nginx/html dizinine bind eder.

curl localhost

Bir önceki komutu çalıştırdıktan sonra yukarıdaki komutu çalıştırırsak aşağıdaki gibi bir çıktı alırız.

<h1>Hello, World</h1>

docker ps

docker ps

Yukarıdaki komut çalışan container'ları listeler.

docker ps -a

Yukarıdaki komut bütün container'ları listeler.

docker ps -q

Yukarıdaki komut çalışan container'ların CONTAINER ID'lerini listeler.

docker stop

docker stop some-nginx

Yukarıdaki komut some-nginx adındaki container'ı durdurur. Adı yerine CONTAINER ID'si de kullanılabilir.

docker start

docker start some-nginx

Yukarıdaki komut some-ngix adındaki container'ı başlatır. Adı yerine CONTAINER ID'si de kullanılabilir.

docker restart

docker restart some-nginx

Yukarıdaki komut some-nginx adındaki container'ı baştan başlatır. Adı yerine CONTAINER ID'si de kullanılabilir.