Kısaca Docker

Hatice Ergün
Kodcular
Published in
4 min readOct 15, 2017

--

Bu yazının amacı, docker komutlarından bahsetmek ve kısaca ne anlama geldiklerini açıklamak.

Docker’ı bilgisayarınıza kurduktan sonra root olmanız gerekiyor.
sudo su komutunu girip root olduktan sonra
systemctl start docker komutuyla docker servisini başlatıyoruz.

Örnek: Wordpress + Mysql

Şimdi bir örnek ile hub.docker.com üzerinden image çekelim ve container oluşturalım.
docker search wordpress hub.docker’da wordpress image’larını listeledik.
docker pull wordpress ile wordpress image çektik.
docker pull mysql ile mysql image çektik.

Şimdi mysql için container oluşturalım,
docker run -d --name container_ismi -e MYSQL_ROOT_PASSWORD="" mysql
run; container oluşturmak için girilir.
-d ; container arka planda da çalışmaya devam etsin diye parametreyi girdik.
name; oluşturulan container için isim girmemizi sağlıyor (mysqlcon dedim).
-e MYSQL_ROOT_PASSWORD=” ” ile parola giriyoruz.
mysql; son olarakta bu container oluşurken kullanılacak image’ı belirtiyoruz.

Şimdi wordpress için container oluşturalım,
docker run -d --link mysqlcon:mysql -p 8080:80 wordpress
link; bu iki containerın birlikte çalışmasını sağlar.
-p; ile çalışacak port bilgisini verdik.
(Container ismi belirtmediğimiz zaman docker kendisi bir isim atıyor.)

Tarayıcınızda localhost:8080 yazarsanız wordpressin ayakta olduğunu göreceksiniz.

Komutlar

docker ps ile çalışan containerları listeleyebiliriz.
docker ps -a ile çalışan çalışmayan tüm containerlar listelenir.
docker images ile çektiğimiz imagelar listelenir.

Burada container ve image listeleme komutları farklı olduğu için sonraki sürümlerde buna bir düzenleme getirilmiş. Güncel listeleme komutları şöyle;
docker container ls
docker image ls

Containerlar üzerinde işlem yapmak için, verilen id veya isim kullanılabilir.
docker logs container_ismi veya container_id

docker logs container_ismi ile loglara bakarak hata analizi yapılabilir.
docker stop container_ismi bu komutla çalışan bir container durdurulabilir.
docker start container_ismi ile başlatılabilir.
docker stop container_ismi && rm container_ismi komutu ile bir container durdurulup silinebilir. Docker, containerlar durdurulmadan silinmesine izin vermez.
docker rm -f container_ismi ile çalışır durumda olan containerı zorla sildik.
docker rm -f $(docker ps -aq) komutu ile tüm containerlar silinir.

docker rmi image_ismi rmi komutu ile de image silebiriz.
docker rmi $(docker images) ile tüm imagelar silinir.

Image Oluşturma

Şimdi kendi imagemizi oluşturalım. Bunun için bir image çekip ondan container oluşturacağız. Oluşturduğumuz container içinde işlemler yapıp bunu image haline getireceğiz. Son olarak bunu hub.docker.com hesabımıza yükleyeceğiz.
hub.docker hesabınıza girip, create repository seçeneği ile reponuza isim verin. Yükleyeceğimiz ortamı hazırlamış olalım.

Konsol ekranında;
docker run --name ubuntum -i -t ubuntu ile ubuntu imagenı kullanarak ubuntum adında bir container oluşturduk (Eğer ubuntu image yoksa run komutu image çeker sonra container oluşturur).
-i ve -t parametrelerini container içine erişebilmemiz için kullanıyoruz (-it şeklinde beraber kullanılabilirler).

docker exec -it ubuntum bash komutu ile container içine girdik.
apt-get update ile güncelleme yaptık.
apt-get install nano ile nano kuralım.
Gördüğünüz gibi burda kullandığımız komutlar tamamıyla terminal komutları. Burada dilediğiniz dizinde bir klasör oluşturabilir, dosya açabilirsiniz. Burda istediğiniz işlemleri yaptıktan sonra,
exit komutu ile container içinden çıkın.

Şimdi image oluşturalım;
Burada image için vereceğimiz ismi hub.docker repo ismiyle aynı verelim. benimki, hadeyici/deneme olacak.
docker commit -a "Hatice Ergün <haticergun5295@gmail.com>" ubuntum hadeyici/deneme
burada -a ile (author) kişinin bilgisini giriyoruz. Sizin imagenizi kullanan biri sorun yaşadığında size ulaşabilmesi için mail adresini de ekliyoruz.
docker image ls ile listede, oluşturduğunuz image görünecektir.

Bunu hub.docker hesabına atalım;
docker login ile giriş yapıp kullanıcı adınızı ve şifrenizi girin.
docker push hadeyici/deneme ile oluşturduğum image repoma gitmiş oldu.

Şimdi docker üzerinde image silip repomuzdan çekelim;
docker rmi hadeyici/deneme
docker image ls
docker run -d -it hadeyici/deneme
kendi repomuzdan image kullanarak container oluşturduk.
docker image ls

  • Eğer oluşturduğunuz image ismi ile hub.docker hesabınızdaki reponun ismi aynı değilse;
    docker tag image_ismi hubhesapadı/repoismi
    docker push hubhesapadı/repoismi

Yereldeki çalışma ortamını container ile bağlama

docker run -d -p 80:80 --name php-apache -v "$PWD":/home/hadeyici/Desktop/Sunucum/Proje -v /home/hadeyici/Desktop/Sunucum/Proje:/var/www/html php:7.0-apache

php-apache adında bir container oluşturuyorum. 80 portundan çalışacak ve php:7.0-apache image kullanarak oluşacak. Benim yereldeki Proje adındaki klasörüm ile php-apache containerı bağlanacak.
Bu bağlanmayı sağlayan -v (valume) parametresi.

Bu bağlanma sayesinde, ben yerel makinamda proje içerisinde ne değişkliği yaparsam yapayım container içinde de bu değişiklik gerçekleşecek. Aynı şekilde container içinde çalışırken de yerel makinamda değişiklik otomatik olmuş olacak.

Dockerfile

Image oluşturma işlemini biraz daha kısa yoldan yapmak için Dockerfile kullanılıyor. Image oluşturmak için gerekli komutları Dockerfile dosyasına ekliyoruz. Sonrasında docker build -t image_ismi . komutu ile image oluşmuş oluyor.

Dockerfile dosyasını kendimiz oluşturuyoruz. Kullanacağınız image için hub.docker sitesinde ilgili image sayfasında Dockerfile içine yazmanız gereken komutlar mevcut. Her image için farklı komut dizisi var.

Docker Compose

Gerekli ortamı biraz daha kısa yoldan oluşturmak için Compose kullanılıyor. Tek tek image indirip daha sonra onlardan container üretmek ve birbirlerine bağlamak için uzun işlemler yapmak yerine, docker-compose.yml dosyası oluşturulur.

Bu dosya içerisine gerekli komutlar yazılır. Sonrasında docker-compose up komutu ile ortam oluşmuş olur. Image ve containerlar bu dosya içerisindeki komutlar ile tek seferde kurulmuş olur.

İyi çalışmalar.

Kaynaklar:

https://docs.docker.com/
https://medium.com/monitisemea/docker-serisi-4-docker-compose-cfc51b6b455
http://www.gokhansengun.com/docker-ipuclari-soru-ve-cevaplar-bolum-1/
https://www.youtube.com/watch?v=DGVxpFeV16M
https://www.youtube.com/watch?v=isbsABbZghs&list=PL_Z0TaFYSF3LTfMIRjPUlVoUipQA0JlL2

--

--