docker

Debian 10’da Docker Nasıl Kurulur ve Kullanılır

Giriş

Docker, kapsayıcılarda uygulama süreçlerini yönetme sürecini basitleştiren bir uygulamadır. Kapsayıcılar, uygulamalarınızı kaynaktan yalıtılmış süreçlerde çalıştırmanıza olanak tanır. Sanal makinelere benzerler, ancak kapsayıcılar daha taşınabilir, daha kaynak dostu ve ana bilgisayar işletim sistemine daha bağımlıdır.

Bu yazıda, Docker Community Edition’ı (CE) Debian 10’a yüklemeyi ve kullanmayı okuyacaksınız. Docker’ın kendisini kuracak, kapsayıcılar ve görüntülerle çalışacak ve bir görüntüyü Docker Deposuna göndereceksiniz.

Önkoşullar

Bu yazıyı takip etmek için aşağıdakilere ihtiyacınız olacak:

  • Bir sudo root olmayan kullanıcı ve bir güvenlik duvarı da dahil olmak üzere, bir Debian 10 sunucusu kurulur.
  • Adım 7 ve 8’de gösterildiği gibi kendi görüntülerinizi oluşturmak ve bunları Docker Hub’a göndermek istiyorsanız Docker Hub’da bir hesap.

Adım 1 — Docker’ı Yükleme

Resmi Debian deposunda bulunan Docker kurulum paketi en son sürüm olmayabilir. En son sürümü aldığımızdan emin olmak için Docker’ı resmi Docker deposundan yükleyeceğiz. Bunu yapmak için yeni bir paket kaynağı ekleyeceğiz, indirmelerin geçerli olduğundan emin olmak için Docker’dan GPG anahtarını ekleyeceğiz ve ardından paketi yükleyeceğiz.

İlk olarak, mevcut paket listenizi güncelleyin:

sudo apt update

Ardından, apt’nin paketleri HTTPS üzerinden kullanmasına izin veren birkaç önkoşul paketi kurun:

sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Ardından resmi Docker deposu için GPG anahtarını sisteminize ekleyin:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Docker deposunu APT kaynaklarına ekleyin:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Ardından, paket veritabanını yeni eklenen depodan Docker paketleri ile güncelleyin:

sudo apt update

Varsayılan Debian deposu yerine Docker deposundan yüklemek üzere olduğunuzdan emin olun:

apt-cache policy docker-ce

Docker’ın sürüm numarası farklı olsa da, şöyle bir çıktı göreceksiniz:

docker-ce:
  Installed: (none)
  Candidate: 5:20.10.12~3-0~debian-buster
  Version table:
     5:20.10.12~3-0~debian-buster 500
        500 https://download.docker.com/linux/debian buster/stable amd64 Packages

docker-ce’nin kurulu olmadığına dikkat edin, ancak kurulum için aday Debian 10 (buster) için Docker deposundandır.

Son olarak, Docker’ı yükleyin:

sudo apt install docker-ce

Docker şimdi yüklendi, arka plan programı başladı ve işlem önyüklemede başlamak için etkinleştirildi. Çalıştığını kontrol edin:

sudo systemctl status docker

Çıktı, hizmetin etkin ve çalıştığını gösteren aşağıdakine benzer olacaktır:

Output● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-07-08 15:11:19 UTC; 58s ago
     Docs: https://docs.docker.com
 Main PID: 5709 (dockerd)
    Tasks: 8
   Memory: 31.6M
   CGroup: /system.slice/docker.service
           └─5709 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Bunun yanında docker.io isminde ücretli bir versiyon da mevcuttur. Docker-Ce ücretsiz ve açık kaynaklıdır, Docker.Io ise bir abonelik kapsamında kullanılabilir.

Ücretli ve kurumsal sürüm docker.io ‘yu kurmak için aşağıdaki komutları kullanın.

sudo apt install docker.io
sudo systemctl start docker

Docker’ı yüklemek size yalnızca Docker hizmetini (arka plan programı) değil, aynı zamanda docker komut satırı yardımcı programını veya Docker istemcisini de sağlar. Daha sonra docker komutunun nasıl kullanılacağını keşfedeceğiz.

Adım 2 — Docker Komutunu Sudo Olmadan Yürütme (İsteğe Bağlı)

Varsayılan olarak, docker komutu yalnızca kök kullanıcı veya Docker’ın yükleme işlemi sırasında otomatik olarak oluşturulan docker grubundaki bir kullanıcı tarafından çalıştırılabilir. Docker komutunu sudo ile önek eklemeden veya docker grubunda olmadan çalıştırmayı denerseniz, şöyle bir çıktı alırsınız:

Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Docker komutunu her çalıştırdığınızda sudo yazmaktan kaçınmak istiyorsanız, kullanıcı adınızı docker grubuna ekleyin:

sudo usermod -aG docker ${USER}

Yeni grup üyeliğini uygulamak için sunucudan çıkış yapın ve tekrar giriş yapın veya aşağıdakini yazın:

su - ${USER}

Devam etmek için kullanıcı parolanızı girmeniz istenecektir.

Şunu yazarak kullanıcınızın docker grubuna eklendiğini onaylayın:

id -nG
Output
sammy sudo docker

Docker grubuna oturum açmadığınız bir kullanıcı eklemeniz gerekiyorsa, bu kullanıcı adını açıkça şunu kullanarak bildirin:

sudo usermod -aG docker username

Bu makalenin geri kalanında, docker komutunu docker grubunda bir kullanıcı olarak çalıştırdığınız varsayılmaktadır. Yapmamayı seçerseniz, lütfen komutları sudo ile hazırlayın.

Şimdi docker komutunu inceleyelim.

Adım 3 — Docker Komutunu Kullanma

Docker’ı kullanmak, ona bir seçenekler ve komutlar zincirini ve ardından argümanları iletmekten oluşur. Sözdizimi şu biçimi alır:

docker [option] [command] [arguments]

Mevcut tüm alt komutları görüntülemek için şunu yazın:

docker

Docker 18’den itibaren mevcut alt komutların tam listesi şunları içerir:

Outputattach      Attach local standard input, output, and error streams to a running container
build       Build an image from a Dockerfile
commit      Create a new image from a container's changes
cp          Copy files/folders between a container and the local filesystem
create      Create a new container
diff        Inspect changes to files or directories on a container's filesystem
events      Get real time events from the server
exec        Run a command in a running container
export      Export a container's filesystem as a tar archive
history     Show the history of an image
images      List images
import      Import the contents from a tarball to create a filesystem image
info        Display system-wide information
inspect     Return low-level information on Docker objects
kill        Kill one or more running containers
load        Load an image from a tar archive or STDIN
login       Log in to a Docker registry
logout      Log out from a Docker registry
logs        Fetch the logs of a container
pause       Pause all processes within one or more containers
port        List port mappings or a specific mapping for the container
ps          List containers
pull        Pull an image or a repository from a registry
push        Push an image or a repository to a registry
rename      Rename a container
restart     Restart one or more containers
rm          Remove one or more containers
rmi         Remove one or more images
run         Run a command in a new container
save        Save one or more images to a tar archive (streamed to STDOUT by default)
search      Search the Docker Hub for images
start       Start one or more stopped containers
stats       Display a live stream of container(s) resource usage statistics
stop        Stop one or more running containers
tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top         Display the running processes of a container
unpause     Unpause all processes within one or more containers
update      Update configuration of one or more containers
version     Show the Docker version information
wait        Block until one or more containers stop, then print their exit codes

Belirli bir komut için kullanılabilen seçenekleri görüntülemek için şunu yazın:

docker docker-subcommand --help

Docker hakkında sistem genelindeki bilgileri görüntülemek için şunu kullanın:

docker info

Bu komutlardan bazılarını inceleyelim. Resimlerle çalışmaya başlayacağız.

Adım 4 — Docker Görüntüleriyle Çalışmak

Docker kapsayıcıları, Docker görüntülerinden oluşturulur. Varsayılan olarak Docker, bu görüntüleri Docker projesinin arkasındaki şirket olan Docker tarafından yönetilen bir Docker kayıt defteri olan Docker Hub’dan çeker. Herkes Docker görüntülerini Docker Hub’da barındırabilir, bu nedenle ihtiyaç duyacağınız çoğu uygulama ve Linux dağıtımında görüntüler burada barındırılır.

Docker Hub’dan görüntülere erişip erişemeyeceğinizi kontrol etmek için şunu yazın:

docker run hello-world

Çıktı, Docker’ın doğru çalıştığını gösterecektir:

OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Docker başlangıçta merhaba dünya görüntüsünü yerel olarak bulamadı, bu nedenle görüntüyü varsayılan depo olan Docker Hub’dan indirdi. Görüntü indirildikten sonra, Docker görüntüden bir kapsayıcı oluşturdu ve kapsayıcı içindeki uygulama yürütüldü ve mesajı görüntülendi.

Arama alt komutuyla docker komutunu kullanarak Docker Hub’da bulunan görüntüleri arayabilirsiniz. Örneğin, Ubuntu görüntüsünü aramak için şunu yazın:

docker search ubuntu

Komut dosyası, Docker Hub’ı tarayacak ve adı arama dizesiyle eşleşen tüm görüntülerin bir listesini döndürecektir. Bu durumda çıktı şuna benzer olacaktır:

OutputNAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   9704                [OK]
dorowu/ubuntu-desktop-lxde-vnc                            Docker image to provide HTML5 VNC interface …   319                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   224                                     [OK]
consol/ubuntu-xfce-vnc                                    Ubuntu container with "headless" VNC session…   183                                     [OK]
ubuntu-upstart                                            Upstart is an event-based replacement for th…   99                  [OK]
ansible/ubuntu14.04-ansible                               Ubuntu 14.04 LTS with ansible                   97                                      [OK]
neurodebian                                               NeuroDebian provides neuroscience research s…   57                  [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          50                                      [OK]
ubuntu
...

OFFICIAL sütunundaki OK ifadesi, projenin arkasında şirket tarafından oluşturulan ve desteklenen görüntüyü belirtir. Kullanmak istediğiniz görüntüyü belirledikten sonra, pull alt komutunu kullanarak onu bilgisayarınıza indirebilirsiniz.

Resmi ubuntu görüntüsünü bilgisayarınıza indirmek için aşağıdaki komutu yürütün:

docker pull ubuntu

Aşağıdaki çıktıyı göreceksiniz:

OutputUsing default tag: latest
latest: Pulling from library/ubuntu
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:latest

Bir görüntü indirildikten sonra, indirilen görüntüyü run alt komutuyla kullanarak bir kapsayıcı çalıştırabilirsiniz. Merhaba dünya örneğinde gördüğünüz gibi, docker run alt komutuyla çalıştırıldığında bir görüntü indirilmemişse, Docker istemcisi önce görüntüyü indirecek, ardından onu kullanarak bir kapsayıcı çalıştıracaktır.

Bilgisayarınıza indirilen görüntüleri görmek için şunu yazın:

docker images

Çıktı aşağıdakine benzer görünmelidir:

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              4c108a37151f        2 weeks ago         64.2MB
hello-world         latest              fce289e99eb9        6 months ago        1.84kB

Bu yazıda daha sonra göreceğiniz gibi, kapsayıcıları çalıştırmak için kullandığınız görüntüler değiştirilebilir ve yeni görüntüler oluşturmak için kullanılabilir; bunlar daha sonra Docker Hub’a veya diğer Docker kayıtlarına yüklenebilir.

Adım 5 — Docker Kapsayıcısını Çalıştırma

Önceki adımda çalıştırdığınız merhaba-dünya kapsayıcısı, bir test mesajı gönderdikten sonra çalışan ve çıkan bir kapsayıcı örneğidir. Konteynerler bundan çok daha faydalı olabilir ve etkileşimli olabilirler. Sonuçta, sanal makinelere benzerler, yalnızca daha fazla kaynak dostudurlar.

Örnek olarak, Ubuntu’nun en son görüntüsünü kullanarak bir kapsayıcı çalıştıralım. -i ve -t anahtarlarının kombinasyonu, kapsayıcıya etkileşimli kabuk erişimi sağlar:

docker run -it ubuntu

Komut isteminiz, şu anda kapsayıcı içinde çalıştığınız gerçeğini yansıtacak şekilde değişmeli ve şu formu almalıdır:

Outputroot@d9b100f2f636:/#

Komut istemindeki kapsayıcı kimliğini not edin. Bu örnekte, d9b100f2f636’dır. Kaldırmak istediğinizde kapsayıcıyı tanımlamak için bu kapsayıcı kimliğine daha sonra ihtiyacınız olacak.

Artık kapsayıcı içinde herhangi bir komutu çalıştırabilirsiniz. Örneğin, container içindeki paket veritabanını güncelleyelim. Root kullanıcı olarak kapsayıcının içinde çalıştığınız için sudo ile herhangi bir komutun önüne eklemeniz gerekmez:

apt update

Ardından içine herhangi bir uygulama yükleyin. Node.js’yi yükleyelim:

apt install nodejs

Bu, Node.js’yi resmi Ubuntu deposundaki kapsayıcıya yükler. Kurulum tamamlandığında Node.js’nin kurulu olduğunu doğrulayın:

node -v

Terminalinizde görüntülenen sürüm numarasını göreceksiniz:

Outputv10.19.0

Kapsayıcının içinde yaptığınız tüm değişiklikler yalnızca o kapsayıcı için geçerlidir.

Kapsayıcıdan çıkmak için istemde exit yazın.

Şimdi sistemimizdeki kapsayıcıları yönetmeye bakalım.

Adım 6 — Docker Konteynerlerini Yönetme

Docker’ı bir süre kullandıktan sonra bilgisayarınızda birçok aktif (çalışan) ve aktif olmayan kapsayıcınız olacaktır. Aktif olanları görüntülemek için şunu kullanın:

docker ps

Aşağıdakine benzer bir çıktı göreceksiniz:

OutputCONTAINER ID        IMAGE               COMMAND             CREATED             

Yukarıdaki yazıda iki kapsayıcı başlattınız; biri merhaba dünya görüntüsünden, diğeri ubuntu görüntüsünden. Her iki kapsayıcı da artık çalışmıyor, ancak sisteminizde hala varlar.

Etkin ve etkin olmayan tüm kapsayıcıları görüntülemek için docker ps’yi -a anahtarıyla çalıştırın:

docker ps -a

Şuna benzer bir çıktı göreceksiniz:

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
d42d0bbfbd35        ubuntu              "/bin/bash"         About a minute ago   Exited (0) 20 seconds ago                       friendly_volhard
0740844d024c        hello-world         "/hello"            3 minutes ago        Exited (0) 3 minutes ago                        elegant_neumann

Oluşturduğunuz en son kapsayıcıyı görüntülemek için -l anahtarını iletin:

docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
d42d0bbfbd35        ubuntu              "/bin/bash"         About a minute ago   Exited (0) 34 seconds ago                       friendly_volhard

To start a stopped container, use docker start, followed by the container ID or the container’s name. Let’s start the Ubuntu-based container with the ID of d9b100f2f636:

docker start d42d0bbfbd35

Kapsayıcı başlayacak ve durumunu görmek için docker ps’yi kullanabilirsiniz:

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
d42d0bbfbd35        ubuntu              "/bin/bash"         About a minute ago   Up 8 seconds                            friendly_volhard

Çalışan bir kapsayıcıyı durdurmak için, docker stop’u ve ardından kapsayıcı kimliğini veya adını kullanın. Bu sefer, Docker’ın kapsayıcıya atadığı, yani friendly_volhard adını kullanacağız:

docker stop friendly_volhard

Artık bir kapsayıcıya ihtiyacınız olmadığına karar verdiğinizde, yine kapsayıcı kimliğini veya adını kullanarak docker rm komutuyla kaldırın. Merhaba dünya görüntüsüyle ilişkili kapsayıcının kapsayıcı kimliğini veya adını bulmak için docker ps -a komutunu kullanın ve kaldırın.

docker rm elegant_neumann

Yeni bir kapsayıcı başlatabilir ve –name parametresini kullanarak ona bir ad verebilirsiniz. Durduğunda kendini kaldıran bir kapsayıcı oluşturmak için –rm parametresini de kullanabilirsiniz. Bu seçenekler ve diğerleri hakkında daha fazla bilgi için docker run help komutuna bakın.

Adım 7 — Bir Kapsayıcıdaki Değişiklikleri Docker Görüntüsüne Aktarma

Bir Docker görüntüsü başlattığınızda, tıpkı bir sanal makinede olduğu gibi dosyalar oluşturabilir, değiştirebilir ve silebilirsiniz. Yaptığınız değişiklikler yalnızca o kapsayıcı için geçerli olacaktır. Başlatıp durdurabilirsiniz, ancak docker rm komutuyla yok ettiğinizde, değişiklikler tamamen kaybolacaktır.

Bu bölüm, bir kapsayıcının durumunu yeni bir Docker görüntüsü olarak nasıl kaydedeceğinizi gösterir.

Node.js’yi Ubuntu kapsayıcısının içine yükledikten sonra, artık bir görüntü çalıştıran bir kapsayıcınız olur, ancak kapsayıcı, onu oluşturmak için kullandığınız görüntüden farklıdır. Ancak bu Node.js kapsayıcısını daha sonra yeni görüntüler için temel olarak yeniden kullanmak isteyebilirsiniz.

Ardından, aşağıdaki komutu kullanarak değişiklikleri yeni bir Docker görüntüsü örneğine uygulayın.

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

-m anahtarı, sizin ve başkalarının yaptığınız değişiklikleri bilmesine yardımcı olan taahhüt mesajı içindir, -a ise yazarı belirtmek için kullanılır. Container_id, etkileşimli Docker oturumunu başlattığınızda öğreticide daha önce not ettiğinizdir. Docker Hub’da ek depolar oluşturmadığınız sürece, depo genellikle Docker Hub kullanıcı adınızdır.

Örneğin, d9b100f2f636 kapsayıcı kimliğine sahip sammy kullanıcısı için komut şöyle olacaktır:

docker commit -m "added Node.js" -a "sammy" d42d0bbfbd35 sammy/ubuntu-nodejs

Bir görüntü kaydettiğinizde, yeni görüntü bilgisayarınıza yerel olarak kaydedilir. Bu öğreticinin ilerleyen bölümlerinde, başkalarının erişebilmesi için bir görüntüyü Docker Hub gibi bir Docker kayıt defterine nasıl göndereceğinizi öğreneceksiniz.

Docker görüntülerini tekrar listelemek, yeni görüntünün yanı sıra türetildiği eski görüntüyü de gösterecektir:

docker images

Çıktıyı şöyle göreceksiniz:

OutputREPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
sammy/ubuntu-nodejs   latest              d441c62350b4        10 seconds ago      152MB
ubuntu                latest              4c108a37151f        2 weeks ago         64.2MB
hello-world           latest              fce289e99eb9        6 months ago        1.84kB

Bu örnekte, ubuntu-nodejs, Docker Hub’daki mevcut ubuntu görüntüsünden türetilen yeni görüntüdür. Boyut farkı, yapılan değişiklikleri yansıtır. Ve bu örnekte, değişiklik NodeJS’nin kurulu olmasıydı. Bu nedenle, bir dahaki sefere NodeJS önceden yüklenmiş Ubuntu kullanarak bir kapsayıcı çalıştırmanız gerektiğinde, yeni görüntüyü kullanabilirsiniz.

Şimdi yeni görüntüyü başkalarıyla paylaşalım, böylece onlardan kapsayıcı oluşturabilsinler.

Adım 8 — Docker Görüntülerini Docker Deposuna Göndermek

Mevcut bir görüntüden yeni bir görüntü oluşturduktan sonraki mantıklı adım, onu birkaç arkadaşınızla, Docker Hub’daki tüm dünyayla veya erişiminiz olan diğer Docker kayıt defteriyle paylaşmaktır. Bir görüntüyü Docker Hub’a veya başka bir Docker kayıt defterine göndermek için orada bir hesabınızın olması gerekir.

Resminizi göndermek için önce Docker Hub’da oturum açın.

docker login -u docker-registry-username

Docker Hub parolanızı kullanarak kimlik doğrulamanız istenir. Doğru parolayı belirttiyseniz, kimlik doğrulama başarılı olmalıdır.

Not: Docker kayıt kullanıcı adınız, görüntüyü oluşturmak için kullandığınız yerel kullanıcı adından farklıysa, görüntünüzü kayıt defteri kullanıcı adınızla etiketlemeniz gerekir. Son adımda verilen örnek için şunu yazarsınız:

docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Ardından, aşağıdakileri kullanarak kendi resminizi itebilirsiniz:

docker push docker-registry-username/docker-image-name

ubuntu-nodejs görüntüsünü sammy deposuna göndermek için komut şöyle olacaktır:

docker push sammy/ubuntu-nodejs

Görüntüleri yüklerken işlemin tamamlanması biraz zaman alabilir, ancak tamamlandığında çıktı şöyle görünecektir:

OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed

...


Bir resmi bir kayıt defterine gönderdikten sonra, aşağıdaki resimde gösterildiği gibi hesabınızın gösterge tablosunda listelenmelidir.

Push denemesi bu tür bir hatayla sonuçlanırsa, büyük olasılıkla oturum açmamışsınızdır:

OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

Docker girişi ile giriş yapın ve push girişimini tekrarlayın. Ardından, Docker Hub veri havuzu sayfanızda bulunduğunu doğrulayın.

Artık görüntüyü yeni bir makineye çekmek ve onu yeni bir kapsayıcı çalıştırmak için kullanmak için docker pull sammy/ubuntu-nodejs’yi kullanabilirsiniz.

Yazının orijinalini buradan okuyabilirsiniz.

Bir yorum

Yorumlar kapalı.