Ubuntu 20.04’te Docker Compose Nasıl Kurulur ve Kullanılır
Adım 1 — Docker Compose’u Yükleme
Docker Compose’un en güncel kararlı sürümünü edindiğinizden emin olmak için bu yazılımı resmi Github deposundan indireceksiniz .
İlk olarak, sürümler sayfasında bulunan en son sürümü onaylayın . Bu yazının yazıldığı sırada en güncel kararlı sürüm 1.29.2
.
Aşağıdaki komut, sürümü indirecek 1.29.2
ve yürütülebilir dosyayı konumuna kaydedecek ve /usr/local/bin/docker-compose
bu yazılımın küresel olarak şu şekilde erişilebilir olmasını sağlayacaktır docker-compose
:
docker-compose
Ardından, komutun yürütülebilir olması için doğru izinleri ayarlayın :
sudo chmod +x /usr/local/bin/docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Yüklemenin başarılı olduğunu doğrulamak için şunları çalıştırabilirsiniz:
docker-compose --version
Şuna benzer bir çıktı göreceksiniz:
Outputdocker-compose version 1.29.2, build 5becea4c
Docker Compose artık sisteminize başarıyla yüklendi. docker-compose.yml
Sonraki bölümde, bir dosyanın nasıl kurulacağını ve bu araçla kapsayıcılı bir ortamın nasıl kurulup çalıştırılacağını göreceksiniz .
docker-compose.yml
Adım 2 — Dosya Ayarlama
Bir dosyanın nasıl kurulacağını ve Docker Compose ile nasıl çalışılacağını göstermek için , genel Docker kayıt defteri olan Docker Hub’ın resmi Nginx görüntüsünü
docker-compose.yml
kullanarak bir web sunucusu ortamı oluşturacaksınız . Bu kapsayıcılı ortam, tek bir statik HTML dosyası sunacaktır.
Ana klasörünüzde yeni bir dizin oluşturarak başlayın ve ardından bu dizin içine gidin:
mkdir ~/compose-demo
cd ~/compose-demo
Bu dizinde, Nginx ortamınız için belge kökü görevi görecek bir uygulama klasörü ayarlayın:
mkdir app
Tercih ettiğiniz metin düzenleyiciyi kullanarak klasör içinde yeni bir index.html
dosya oluşturun app
:
nano app/index.html
Aşağıdaki içeriği bu dosyaya yerleştirin: ~/compose-demo/app/index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>
İşiniz bittiğinde dosyayı kaydedin ve kapatın. kullanıyorsanız , bunu , ardından ve onaylamak için nano
yazarak yapabilirsiniz. CTRL+X Y ENTER
Ardından, docker-compose.yml
dosyayı oluşturun:
nano docker-compose.yml
Aşağıdaki içeriği docker-compose.yml
dosyanıza ekleyin: docker-compose.yml
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
Dosya docker-compose.yml
genellikle version
tanımla başlar. Bu, Docker Compose’a hangi yapılandırma sürümünü kullandığınızı söyleyecektir.
Ardından services
, bu ortamın parçası olan hizmetleri kurduğunuz bloğa sahip olursunuz. Sizin durumunuzda, adında tek bir hizmetiniz var web
. Bu hizmet nginx:alpine
görüntüyü kullanır ve yönergeyle bir bağlantı noktası yeniden yönlendirmesi kurar ports
. Host 8000
makinenin (Docker Compose’u çalıştırdığınız sistem) bağlantı noktasındaki tüm istekler, Nginx’in çalışacağı bağlantı noktasındaki kapsayıcıya yönlendirilecektir .web80
Yönerge , ana makine ile kapsayıcı arasında paylaşılan
volumes
bir birim oluşturacaktır . Bu, yerel klasörü kapsayıcıyla paylaşacak ve birim, daha sonra Nginx için varsayılan belge kökünün üzerine yazılacak olan kapsayıcının içinde yer alacaktır. app
/usr/share/nginx/html
Dosyayı kaydedin ve kapatın.
docker-compose.yml
Ona hizmet edecek kapsayıcılı bir web sunucusu ortamı oluşturmak için bir demo sayfası ve bir dosya kurdunuz . Bir sonraki adımda, bu ortamı Docker Compose ile ortaya çıkaracaksınız.
Adım 3 — Docker Compose’u Çalıştırmak
Dosya yerindeyken , docker-compose.yml
ortamınızı yükseltmek için artık Docker Compose’u çalıştırabilirsiniz. Aşağıdaki komut, gerekli Docker görüntülerini indirecek, web
hizmet için bir kapsayıcı oluşturacak ve kapsayıcı ortamı arka plan modunda çalıştıracaktır:
docker-compose up -d
Docker Compose önce yerel sisteminizde tanımlı görüntüyü arar ve görüntüyü bulamazsa görüntüyü Docker Hub’dan indirir. Çıktıyı şöyle göreceksiniz:
OutputCreating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... done
Ortamınız artık arka planda çalışıyor ve çalışıyor. Kapsayıcının etkin olduğunu doğrulamak için şunları çalıştırabilirsiniz:
docker-compose ps
Bu komut, çalışan kapsayıcılar ve durumları ile şu anda yürürlükte olan tüm bağlantı noktası yeniden yönlendirmeleri hakkında size bilgi gösterecektir:
Output Name Command State Ports
----------------------------------------------------------------------------------
compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
localhost:8000
Artık bu demoyu yerel makinenizde your_server_domain_or_IP:8000
çalıştırıyorsanız veya bu demoyu uzak bir sunucuda çalıştırıyorsanız , tarayıcınızı işaret ederek demo uygulamasına erişebilirsiniz .
Bunun gibi bir sayfa göreceksiniz:
Dosya içinde ayarladığınız paylaşılan birim , klasör dosyalarınızı kapsayıcının belge köküyle senkronize halde docker-compose.yml
tutar . app
Dosyada herhangi bir değişiklik yaparsanız index.html
, bunlar kapsayıcı tarafından otomatik olarak alınır ve böylece sayfayı yeniden yüklediğinizde tarayıcınıza yansıtılır.
Sonraki adımda, kapsayıcılı ortamınızı Docker Compose komutlarıyla nasıl yöneteceğinizi göreceksiniz.
Adım 4 — Docker Oluşturma Komutlarını Tanımak
Bir docker-compose.yml
dosyanın nasıl kurulacağını ve ortamınızı docker-compose up
. Artık kapsayıcı ortamınızı yönetmek ve bunlarla etkileşim kurmak için Docker Compose komutlarını nasıl kullanacağınızı göreceksiniz.
Nginx kapsayıcınız tarafından üretilen günlükleri kontrol etmek için şu logs
komutu kullanabilirsiniz:
docker-compose logs
Şuna benzer bir çıktı göreceksiniz:
OutputAttaching to compose-demo_web_1
web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
Kapsayıcılarınızın mevcut durumunu değiştirmeden ortam yürütmesini duraklatmak istiyorsanız, şunları kullanabilirsiniz:
docker-compose pause
OutputPausing compose-demo_web_1 ... done
Bir duraklama verdikten sonra yürütmeye devam etmek için:
docker-compose unpause
OutputUnpausing compose-demo_web_1 ... done
Komut , stop
kapsayıcı yürütmesini sonlandıracak, ancak kapsayıcılarınızla ilişkili hiçbir veriyi yok etmeyecek:
docker-compose stop
OutputStopping compose-demo_web_1 ... done
Bu kapsayıcılı ortamla ilişkili kapsayıcıları, ağları ve birimleri kaldırmak istiyorsanız şu down
komutu kullanın:
docker-compose down
OutputRemoving compose-demo_web_1 ... done
Removing network compose-demo_default
Bunun, ortamınızı döndürmek için Docker Compose tarafından kullanılan temel görüntüyü kaldırmayacağına dikkat edin (sizin durumunuzda, nginx:alpine
). Bu şekilde, ortamınızı bir ile tekrar docker-compose up
açtığınızda, görüntü zaten sisteminizde olduğundan işlem çok daha hızlı olacaktır.
Temel görüntüyü de sisteminizden kaldırmak isterseniz, şunları kullanabilirsiniz:
docker image rm nginx:alpine
OutputUntagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a