giriiş
Docker, uygulama süreçlerini kapsayıcılarda yönetme sürecini basitleştiren bir programdır. Kapsayıcılar, uygulamalarınızı kaynaktan izole süreçlerde çalıştırmanıza olanak tanır. Sanal makinelere benzerler, ancak kapsayıcılar daha taşınabilir, kaynak dostudur ve ana bilgisayar işletim sistemine daha az bağımlıdır.
Docker konteynerinin farklı bileşenlerine dair detaylı bir giriş için Docker Ekosistemi: Ortak Bileşenlere Giriş adlı makaleye göz atın.
Bu eğitimde, Ubuntu 20.04'te Docker Community Edition'ı (CE) kuracak ve kullanacaksınız. Docker'ın kendisini kuracak, kapsayıcılar ve imajlarla çalışacak ve bir imajı bir Docker deposuna göndereceksiniz.
Not
Bu makale, Docker'ı bir Ubuntu sunucusuna kurma konusunda size rehberlik edecektir. Bir Docker uygulamasını canlı bir sunucuya tek tıklamayla dağıtmanın bir yolunu arıyorsanız, DigitalOcean uygulama platformuna göz atın.
Ön koşullar
Bu eğitimi takip etmek için aşağıdakilere ihtiyacınız olacak:
- Ubuntu 20.04 sunucusu, Ubuntu 20.04 sunucusunun ilk kurulum kılavuzu izlenerek, root olmayan bir sudo kullanıcısı ve bir güvenlik duvarı ile kuruldu.
- 7. ve 8. adımlarda gösterildiği gibi, kendi görüntülerinizi oluşturup Docker Hub'a göndermek istiyorsanız bir Docker Hub hesabınızın olması gerekir.
Adım 1 – Docker'ı yükleyin
Resmi Ubuntu deposunda bulunan Docker kurulum paketi en son sürüm olmayabilir. En son sürümü edindiğinizden 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.
Öncelikle mevcut paketlerinizin listesini güncelleyin:
sudo apt update
Daha sonra, apt'ın HTTPS üzerinden paketleri kullanmasına izin verecek birkaç ön koşul paketini yükleyin:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Daha sonra resmi Docker deposunun GPG anahtarını sisteminize ekleyin:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Docker deposunu APT kaynaklarına ekleyin:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Bu aynı zamanda paket veritabanımızı yeni eklenen depodaki Docker paketleriyle güncelleyecektir.
Varsayılan Ubuntu deposu yerine Docker deposundan kurulum yaptığınızdan emin olun:
apt-cache policy docker-ce
Docker sürüm numarası farklı olsa da aşağıdaki gibi bir çıktı göreceksiniz:
docker-ce:
Installed: (none)
Candidate: 5:19.03.9~3-0~ubuntu-focal
Version table:
5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packagesdocker-ce'nin kurulu olmadığını, ancak Ubuntu 20.04 (kanonik) için Docker deposundan kurulum adayı olduğunu unutmayın.
Son olarak Docker'ı kurun:
sudo apt install docker-ce
Docker artık kurulmuş, daemon başlatılmış ve işlemin önyükleme sırasında başlatılması etkinleştirilmiş olmalıdır. Çalıştığından emin olun:
sudo systemctl status docker
Çıktı aşağıdakine benzer olmalı ve hizmetin çalışır durumda olduğunu göstermelidir:
Output
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
└─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockDocker'ı kurmak size yalnızca Docker servisini (daemon) değil, aynı zamanda Docker komut satırı aracını veya Docker istemcisini de sağlar. Bu eğitimin geri kalanında, Docker komutunun nasıl kullanılacağına bakacağız.
Adım 2 – Sudo Olmadan Docker Komutunu Çalıştırın (İsteğe Bağlı)
Varsayılan olarak, docker komutu yalnızca kök kullanıcı veya Docker kurulum işlemi sırasında otomatik olarak oluşturulan docker grubundaki bir kullanıcı tarafından çalıştırılabilir. Docker komutunu sudo öneki eklemeden veya docker grubunda olmadan çalıştırmayı denerseniz, aşağıdaki gibi bir çıktı alırsınız:
Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.Docker komutunu çalıştırırken 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ğıdakileri yazın:
su - ${USER}
Devam etmek için kullanıcı şifrenizi girmeniz istenecektir.
Kullanıcınızın artık docker grubuna eklendiğini doğrulamak için şunu yazın:
groups
sammy sudo docker
Docker grubuna giriş yapmadığınız bir kullanıcıyı eklemeniz gerekiyorsa, bu kullanıcı adını açıkça şu şekilde bildirin:
sudo usermod -aG docker usernameBu makalenin geri kalanında, docker komutunu docker grubundaki bir kullanıcı olarak çalıştırdığınız varsayılmaktadır. İstemiyorsanız, lütfen komutları sudo ile ekleyin.
Şimdi docker komutunu inceleyelim.
Adım 3 – Docker komutunu kullanma
Docker kullanımı, bir dizi seçenek ve komutun ardından gelen argümanların iletilmesinden oluşur. Sözdizimi aşağıdaki gibidir:
docker [option] [command] [arguments]
Kullanılabilir tüm alt komutları görmek için şunu yazın:
dockerDocker 19 itibarıyla kullanılabilir alt komutların tam listesi şunları içerir:
Output
attach 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ılabilir seçenekleri görmek için şunu yazın:
docker docker-subcommand --help
Docker hakkında sistem genelindeki bilgileri görüntülemek için aşağıdakileri kullanın:
docker info
Bu komutlardan bazılarını inceleyelim. Öncelikle görsellerle çalışalım.
Adım 4 – Docker Görüntüleriyle Çalışma
Docker kapsayıcıları, Docker görüntülerinden oluşturulur. Docker, varsayılan olarak bu görüntüleri, Docker projesini yöneten şirket olan Docker tarafından işletilen bir Docker kayıt defteri olan Docker Hub'dan alır. Herkes kendi Docker görüntülerini Docker Hub'da barındırabilir, bu nedenle ihtiyaç duyduğunuz çoğu uygulama ve Linux dağıtımının görüntüleri orada barındırılacaktır.
Docker Hub'dan görüntülere erişip erişemeyeceğinizi ve bunları indirip indiremeyeceğinizi kontrol etmek için şunu yazın:
docker run hello-world
Çıktı Docker'ın düzgün çalıştığını gösteriyor:
Output
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
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 hello-world imajını yerel olarak bulamadı, bu yüzden imajı varsayılan depo olan Docker Hub'dan indirdi. İmaj indirildikten sonra Docker, imajdan bir kapsayıcı oluşturdu ve kapsayıcının içindeki uygulama çalışarak mesajı görüntüledi.
Docker komutunu ve search alt komutunu kullanarak Docker Hub'da görüntü arayabilirsiniz. Örneğin, bir Ubuntu görüntüsü aramak için şunu yazın:
docker search ubuntu
Betik, Docker Hub'ı tarar ve adları arama dizesiyle eşleşen tüm görsellerin bir listesini döndürür. Bu durumda çıktı şuna benzer olacaktır:
Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 10908 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 428 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 244 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 218 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 108 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with
...
RESMİ sütununda "TAMAM", projenin arkasındaki şirket tarafından oluşturulan ve desteklenen bir görseli belirtir. Kullanmak istediğiniz görseli belirledikten sonra, çekme alt komutunu kullanarak bilgisayarınıza indirebilirsiniz.
Bilgisayarınıza resmi Ubuntu imajını indirmek için aşağıdaki komutu çalıştırın:
docker pull ubuntu
Aşağıdaki çıktıyı göreceksiniz:
Output
Using default tag: latest
latest: Pulling from library/ubuntu
d51af753c3d3: Pull complete
fc878cd0a91c: Pull complete
6154df8ff988: Pull complete
fee5db0ff82f: Pull complete
Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latestBir görüntüyü indirdikten sonra, indirilen görüntüyü kullanarak run alt komutunu kullanarak bir kapsayıcı çalıştırabilirsiniz. Hello-World örneğinde gördüğünüz gibi, Docker'ı run alt komutuyla çalıştırdığınızda bir görüntü indirilmezse, Docker istemcisi önce görüntüyü indirir, ardından bu görüntüyü kullanarak bir kapsayıcı çalıştırır.
Bilgisayarınıza indirilen görselleri görüntülemek için şunu yazın:
docker images
Çıktı aşağıdaki şekle benzer olacaktır:
Output
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB
hello-world latest bf756fb1ae65 4 months ago 13.3kBBu eğitimde daha sonra göreceğiniz gibi, konteynerleri çalıştırmak için kullandığınız imajlar değiştirilebilir ve yeni imajlar üretmek için kullanılabilir; bu imajlar Docker Hub'a veya diğer Docker kayıt defterlerine (teknik terim budur) yüklenebilir.
Konteynerlerin nasıl çalıştığını daha detaylı inceleyelim.
Adım 5 – Bir Docker Konteyneri Çalıştırın
Önceki adımda çalıştırdığınız "merhaba dünya" konteyneri, bir test mesajı gönderdikten sonra çalışan ve çıkan bir konteyner örneğidir. Konteynerler bundan çok daha kullanışlı ve etkileşimli olabilir. Sonuçta, sanal makinelere benzerler, sadece daha kaynak dostudurlar.
Örneğin, en son Ubuntu imajını kullanarak bir kapsayıcı çalıştıralım. -i ve -t anahtarlarının birleşimi, kapsayıcıya etkileşimli kabuk erişimi sağlar:
docker run -it ubuntu
Komut satırınız artık bir kapsayıcının içinde çalıştığınızı yansıtacak şekilde değişmeli ve aşağıdaki gibi görünmelidir:
Output
root@d9b100f2f636:/#Komut satırındaki kapsayıcı kimliğini not edin. Bu örnekte, d9b100f2f636'dır. Kapsayıcıyı kaldırmak istediğinizde tanımlamak için daha sonra kapsayıcı kimliğine ihtiyacınız olacak.
Artık konteynerin içinde herhangi bir komutu çalıştırabilirsiniz. Örneğin, konteynerin içindeki paket veritabanını güncelleyelim. Konteynerin içinde kök kullanıcı olarak çalıştığınız için herhangi bir komutun başına sudo eklemenize gerek yok:
apt updateArdından içine herhangi bir uygulama yükleyelim. Node.js'i kuralım:
apt install nodejs
Node.js'yi resmi Ubuntu deposundan yükleyecektir. Kurulum tamamlandıktan sonra Node.js'nin kurulu olduğunu kontrol edin:
node -v
Terminalinizde sürüm numarasını göreceksiniz:
Output
v10.19.0Bir kapsayıcının içinde yaptığınız herhangi bir değişiklik yalnızca o kapsayıcıya uygulanacaktır.
Konteynerden çıkmak için komut istemine exit yazın.
Şimdi sistemimizdeki konteynerleri yönetmeye bakalım.
Adım 6 – Docker Konteynerlerini Yönetin
Docker'ı bir süre kullandıktan sonra, bilgisayarınızda birçok etkin (çalışan) ve etkin olmayan konteyner olacaktır. Etkin olanları görüntülemek için şunu kullanın:
docker ps
Aşağıdakine benzer bir çıktı göreceksiniz:
Output
CONTAINER ID IMAGE COMMAND CREATED
Bu eğitimde iki kapsayıcı başlattınız. Biri hello-world imajından, diğeri Ubuntu imajından. Her iki kapsayıcı da artık çalışmıyor, ancak sisteminizde hâlâ mevcutlar.
Tüm kapsayıcıları (aktif ve aktif olmayan) görüntülemek için docker ps komutunu -a anahtarıyla çalıştırın:
docker ps -a
Şuna benzer bir çıktı göreceksiniz:
1c08a7a0d0e4 ubuntu "/bin/bash" 2 minutes ago Exited (0) 8 seconds ago quizzical_mcnulty
a707221a5f6c hello-world "/hello" 6 minutes ago Exited (0) 6 minutes ago youthful_curie
Oluşturduğunuz son konteyneri görmek için ona -l anahtarını geçirin:
docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "/bin/bash" 2 minutes ago Exited (0) 40 seconds ago quizzical_mcnulty
Durdurulmuş bir konteyneri başlatmak için docker start komutunu ve ardından konteyner kimliğini veya konteyner adını kullanın. Ubuntu tabanlı konteyneri 1c08a7a0d0e4 kimliğiyle başlatalım:
docker start 1c08a7a0d0e4docker start 1c08a7a0d0e4
Konteyner başlayacak ve durumunu görüntülemek için docker ps'yi kullanabilirsiniz:
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "/bin/bash" 3 minutes ago Up 5 seconds quizzical_mcnulty
Çalışan bir konteyneri durdurmak için docker stop komutunu ve ardından konteyner kimliğini veya adını kullanın. Bu sefer Docker'ın konteynere atadığı quizical_mcnulty adını kullanacağız:
docker stop quizzical_mcnulty
Konteynere artık ihtiyacınız olmadığına karar verdiğinizde, yine konteyner kimliğini veya adını kullanarak docker rm komutuyla konteyneri kaldırın. Hello-world görüntüsüyle ilişkili konteyner kimliğini veya adını bulmak ve kaldırmak için docker ps -a komutunu kullanın.
docker rm youthful_curie
–name anahtarını kullanarak yeni bir kapsayıcı başlatabilir ve ona bir ad verebilirsiniz. Durdurulduktan sonra kendini kaldıracak bir kapsayıcı oluşturmak için –rm anahtarını da kullanabilirsiniz. Bu ve diğer seçenekler hakkında daha fazla bilgi için docker run help komutuna bakın.
Konteynerler, yeni konteynerler oluşturmak için kullanabileceğiniz görsellere dönüştürülebilir. Nasıl çalıştığına bakalım.
Adım 7 - Docker görüntüsündeki bir kapsayıcıda değişiklik yapma
Bir Docker imajını başlattığınızda, tıpkı bir sanal makinede olduğu gibi dosya oluşturabilir, değiştirebilir ve silebilirsiniz. Yaptığınız değişiklikler yalnızca o konteynere uygulanır. Başlatıp durdurabilirsiniz, ancak docker rm komutuyla yok ettiğinizde değişiklikler sonsuza dek kaybolur.
Bu bölümde bir konteynerin durumunun yeni bir Docker görüntüsü olarak nasıl kaydedileceği gösterilmektedir.
Node.js'yi bir Ubuntu konteynerine yükledikten sonra, artık bir imajdan çalışan bir konteyneriniz olur, ancak konteyner, onu oluşturmak için kullandığınız imajdan farklıdır. Ancak bu Node.js konteynerini daha sonra yeni imajlar için temel olarak kullanmak isteyebilirsiniz.
Daha sonra aşağıdaki komutu kullanarak yeni bir Docker görüntü örneğinde değişiklikleri yapı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 bir commit mesajı içindir; -a ise yazarı belirtmek için kullanılır. container_id, eğitimde daha önce etkileşimli Docker oturumunu başlatırken belirttiğiniz değerdir. Docker Hub'da ek depolar oluşturmadıysanız, bu genellikle Docker Hub kullanıcı adınızdır.
Örneğin, d9b100f2f636 kapsayıcı kimliğine sahip sammy kullanıcısı için komut şu şekilde olacaktır:
docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs
Bir imajı gönderdiğinizde, yeni imaj bilgisayarınıza yerel olarak kaydedilir. Bu eğitimin ilerleyen kısımlarında, başkalarının erişebilmesi için bir imajı Docker Hub gibi bir Docker kayıt defterine nasıl göndereceğinizi öğreneceksiniz.
Docker görüntülerinin yeniden listelenmesi, yeni görüntünün yanı sıra türetildiği eski görüntüyü de gösterecektir:
docker images
Çıktıyı şu şekilde göreceksiniz:
Output
REPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB
...
Bu örnekte, ubuntu-nodejs, Docker Hub'daki mevcut Ubuntu imajından türetilen yeni bir imajdır. Boyut farkı, yapılan değişiklikleri gösterir. Bu örnekte ise değişiklik, NodeJS'nin yüklenmiş olmasıydı. Dolayısıyla, bir dahaki sefere NodeJS yüklü Ubuntu kullanarak bir kapsayıcı çalıştırmanız gerektiğinde, yeni imajı kullanabilirsiniz.
Ayrıca, Dockerfile'dan imajlar oluşturabilir ve bu sayede yazılımların yeni bir imaja otomatik olarak yüklenmesini sağlayabilirsiniz. Ancak bu, bu eğitimin kapsamı dışındadır.
Şimdi yeni görseli başkalarıyla paylaşalım ki, onlar da görselden konteynerler oluşturabilsinler.
Adım 8 – Docker Görüntülerini Docker Deposuna Aktarın
Mevcut bir görüntüden yeni bir görüntü oluşturduktan sonraki mantıklı adım, onu seçtiğiniz birkaç arkadaşınızla, tüm dünyayla Docker Hub veya erişiminiz olan diğer Docker kayıt defterlerinde paylaşmaktır. Docker Hub'a veya başka bir Docker kayıt defterine görüntü göndermek için orada bir hesabınızın olması gerekir.
Bu bölüm, bir Docker imajını Docker Hub'a nasıl göndereceğinizi gösterir. Kendi özel Docker kayıt defterinizi nasıl oluşturacağınızı öğrenmek için Ubuntu 18.04'te Özel Bir Docker Kayıt Defteri Nasıl Kurulur? başlıklı makaleye göz atın.
Görüntünüzü göndermek için öncelikle Docker Hub'a giriş yapın.
docker login -u docker-registry-username
Docker Hub parolanızı kullanarak kimlik doğrulaması yapmanız istenecektir. Doğru parolayı belirttiyseniz, kimlik doğrulama başarılı olacaktır.
Not: Docker kayıt defteri 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 yazmanız gerekir:
docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
Daha sonra resminizi şu şekilde kullanabilirsiniz:
docker push docker-registry-username/docker-image-name
Ubuntu-nodejs imajını Sami deposuna göndermek için komut şu şekilde olacaktır:
docker push sammy/ubuntu-nodejs
Resim yükleme işlemi biraz zaman alabilir, ancak tamamlandığında çıktı şu şekilde görünecektir:
Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
...Bir resmi kayıt defterine gönderdikten sonra, aşağıdaki resimde gösterildiği gibi hesap panonuzda listelenmelidir.
Eğer push girişimi bu tür bir hatayla sonuçlanırsa, muhtemelen oturum açmamışsınızdır:
Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication requiredDocker hesabınıza giriş yapın ve push işlemini tekrar deneyin. Ardından, Docker Hub depo sayfanızda olup olmadığını kontrol edin.
Artık docker pull sammy/ubuntu-nodejs komutunu kullanarak imajı yeni bir makineye çekebilir ve yeni bir konteyner çalıştırmak için kullanabilirsiniz.
Sonuç
Bu eğitimde Docker'ı kurdunuz, imajlar ve kapsayıcılarla çalıştınız ve değiştirilmiş bir imajı Docker Hub'a aktardınız. Artık temel bilgileri öğrendiğinize göre, DigitalOcean topluluğundaki diğer Docker eğitimlerini keşfedin.










