Hizmet kapsayıcıları
Azure Pipelines
İşlem hatlarınız bir veya daha fazla hizmetin desteğini gerektiriyorsa, çoğu durumda her hizmeti iş başına olarak oluşturmak, bağlanmak ve temizlemek isteyeceksiniz. Örneğin, bir işlem hattı bir veritabanına ve bir bellek önbelleğine erişim gerektiren tümleştirme testlerini çalıştırabilir. İşlem hattındaki her iş için veritabanı ve bellek önbelleğinin yeniden oluşturulması gerekir.
Bir kapsayıcı, işlem hattınıza bağlı bir hizmeti çalıştırmak için basit ve taşınabilir bir yol sağlar. Hizmet kapsayıcısı Kapsayıcılı hizmetinizin yaşam döngüsünü otomatik olarak oluşturmanızı, ağınızı ve yönetmenizi sağlar. Her hizmet kapsayıcısına yalnızca bunu gerektiren iş tarafından erişilebilir. Hizmet kapsayıcıları her türlü işleçalışır, ancak en yaygın olarak kapsayıcı işleriile kullanılır.
Gereksinimler
Hizmet kapsayıcıları bir veya tanımlamalıdır CMDENTRYPOINT .
İşlem hattı, docker run ek bağımsız değişkenler olmadan, belirtilen kapsayıcıyı kullanacaktır.
Azure Pipelines, Linux veya Windows kapsayıcılarıçalıştırabilir. Linux kapsayıcıları için barındırılan ubuntu ya da Windows kapsayıcıları için barındırılan Windows kapsayıcı havuzunu kullanın. (Barındırılan macOS havuzu, kapsayıcıları çalıştırmayı desteklemez.)
Tek bir kapsayıcı işi
Kapsayıcı işlerininkullanımına ilişkin basit bir örnek:
resources:
containers:
- container: my_container
image: buildpack-deps:focal
- container: nginx
image: nginx
pool:
vmImage: 'ubuntu-20.04'
container: my_container
services:
nginx: nginx
steps:
- script: |
curl nginx
displayName: Show that nginx is running
Bu işlem hattı, nginxbuildpack-depsnginx ve kapsayıcılarını getirir ve sonra kapsayıcıları başlatır. Kapsayıcılar, birbirleriyle birbirlerine ulaşabilmeleri için birbirine bağlı olarak kullanılır services .
Bu iş kapsayıcısının içinde, nginx ana bilgisayar adları Docker ağı kullanarak doğru hizmetlere çözümlenir.
Ağdaki tüm kapsayıcılar otomatik olarak birbirlerine tüm bağlantı noktalarını kullanıma sunar.
Tek iş
Hizmet kapsayıcılarını iş kapsayıcısı olmadan da kullanabilirsiniz. Basit bir örnek:
resources:
containers:
- container: nginx
image: nginx
ports:
- 8080:80
env:
NGINX_PORT: 80
- container: redis
image: redis
ports:
- 6379
pool:
vmImage: 'ubuntu-18.04'
services:
nginx: nginx
redis: redis
steps:
- script: |
curl localhost:8080
echo $AGENT_SERVICES_REDIS_PORTS_6379
Bu işlem hattı, en son nginx kapsayıcıları başlatır. İş bir kapsayıcıda çalışmadığı için otomatik ad çözümlemesi yoktur.
Bu örnek, kullanarak hizmetlere nasıl ulaşabulakullanabileceğinizi gösterir localhost .
Yukarıdaki örnekte, bağlantı noktasını açıkça sağlıyoruz (örneğin, 8080:80 ).
Alternatif bir yaklaşım, rastgele bir bağlantı noktasının çalışma zamanında dinamik olarak atanmasını sağlar. Daha sonra değişkenlerikullanarak bu dinamik bağlantı noktalarına erişebilirsiniz.
Bash betiğine, işlem ortamını kullanarak bir değişkene erişebilirsiniz. Bu değişkenler şu biçimdedir: agent.services.<serviceName>.ports.<port> .
Yukarıdaki örnekte, redis konakta rastgele kullanılabilir bir bağlantı noktası atanır.
agent.services.redis.ports.6379Değişken, bağlantı noktası numarasını içerir.
Birden çok iş
Hizmet kapsayıcıları aynı adımların aynı hizmetin birden çok sürümüne karşı çalıştırılması için de kullanışlıdır. Aşağıdaki örnekte, aynı adımlar PostgreSQL 'in birden çok sürümüne karşı çalışır.
resources:
containers:
- container: my_container
image: ubuntu:18.04
- container: pg12
image: postgres:12
- container: pg11
image: postgres:11
pool:
vmImage: 'ubuntu-18.04'
strategy:
matrix:
postgres12:
postgresService: pg12
postgres11:
postgresService: pg11
container: my_container
services:
postgres: $[ variables['postgresService'] ]
steps:
- script: printenv
Bağlantı noktaları
Bir kapsayıcı kaynağını veya satır içi kapsayıcıyı belirtirken, ports kapsayıcıda göstermek için bir dizisi belirtebilirsiniz.
resources:
containers:
- container: my_service
image: my_service:latest
ports:
- 8080:80
- 5432
services:
redis:
image: redis
ports:
- 6379/tcp
portsAynı Docker ağı üzerindeki kapsayıcılar varsayılan olarak tüm bağlantı noktalarını otomatik olarak kullanıma sunduğundan, işiniz bir kapsayıcıda çalışıyorsa belirtme gerekli değildir.
İşiniz konakta çalışıyorsa, ports hizmete erişmeniz gerekir. Bir bağlantı noktası, <hostPort>:<containerPort> ya da isteğe bağlı olarak, örneğin, <containerPort>/<protocol>6379/tcptcp ana makinede rastgele bir bağlantı noktasına bağlı olarak, bağlantı noktası üzerinde kullanıma sunulacak şekilde formu alır 6379 .
Konak makinedeki rastgele bir bağlantı noktasına bağlı bağlantı noktaları için, işlem hattı, agent.services.<serviceName>.ports.<port> iş tarafından erişilebilecek şekilde form değişkeni oluşturur. Örneğin, agent.services.redis.ports.6379 ana makinedeki Rastgele atanan bağlantı noktasına çözümler.
Birimler
Birimler, hizmetler arasında veri paylaşımı veya bir işin birden fazla çalıştırması arasındaki kalıcı veriler için yararlıdır.
Birim takmaları bir dizisi olarak belirtebilirsiniz volumes . Birimler, Docker birimleri, anonim Docker birimleri olarak adlandırılabilir veya konağa bağlama bağlanabilir.
services:
my_service:
image: myservice:latest
volumes:
- mydockervolume:/data/dir
- /data/dir
- /src/dir:/dst/dir
Birimler, her <source>:<destinationPath> yerde <source> adlandırılmış bir birim veya konak makinede mutlak bir yol olabilir ve <destinationPath> kapsayıcıda mutlak bir yoldur.
Not
Barındırılan havuzlarımızı kullanıyorsanız, iş tamamlandıktan sonra ana makine temizlendiğinden, birimleriniz işler arasında kalıcı olmayacaktır.
Diğer seçenekler
Hizmet kapsayıcıları aynı kapsayıcı kaynaklarını kapsayıcı işleri olarak paylaşır. Bu, aynı ek seçeneklerikullanabileceğiniz anlamına gelir.
Healthcheck
İsteğe bağlı olarak, herhangi bir hizmet kapsayıcısı bir Healthcheckbelirtiyorsa, aracı, işi çalıştırmadan önce kapsayıcı sağlıklı olana kadar bekler.