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.