Docker-compose ile oluşturulan görüntünün adını nasıl tanımlarım


206

Geliştirme ortamımı oluşturmak için docker-compose kullanıyorum . Belirli bir görüntü oluşturmak istiyorum, ancak bu görüntü için nasıl ad ayarlayacağımı bilmiyorum.

wildfly:
  build: /path/to/dir/Dockerfile
  container_name: wildfly_server
  ports:
   - 9990:9990
   - 80:8080
  environment:
   - MYSQL_HOST=mysql_server
   - MONGO_HOST=mongo_server
   - ELASTIC_HOST=elasticsearch_server
  volumes:
   - /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
  links:
   - mysql:mysql_server
   - mongo:mongo_server
   - elasticsearch:elasticsearch_server

Ne zaman yürütmek docker-composeher şey yolunda, ama yeni görüntü için rastgele bir ad alıyorum. Derleme görüntüsüne bir ad ayarlamak mümkün mü?


18
Görüntüyü oluşturmak için docker-compose kullanıyorsanız, görüntü adı her zaman olacaktır <project>_<service>, <service>bu örnekte budur wildflyve proje varsayılanı bulunduğunuz dizin adına göre değişir. Bunu -pveya COMPOSE_PROJECT_NAMEortam değişkeniyle değiştirebilirsiniz. Özel bir görüntü adı ayarlamanın bir yolu yoktur.
dnephin

1
kabul edilebilir bir cevap yok mu?
AmanicA


2
Ayrıca ayarlayabilirsiniz COMPOSE_PROJECT_NAME=xiçinde .envve Kaysayıcılar adı verilecek{x}_{service}_{#}
eMPee584

Yanıtlar:


184

Docker-compose sürüm 2 dosya formatı için, bir hizmet için bir görüntü oluşturup etiketleyebilir ve sonra aynı yerleşik görüntüyü başka bir hizmet için kullanabilirsiniz.

Benim durumum için, 2 düğümlü elastik bir arama kümesi oluşturmak istiyorum, her ikisinin de aynı görüntüyü kullanması gerekiyor, ancak farklı çalışacak şekilde yapılandırılmış. Ayrıca kendi Dockerfile dosyamdan kendi özel elasticsearch resmimi oluşturmak istiyorum. Ben de öyle yaptım (docker-compose.yml):

version: '2'

services:
  es-master:
    build: ./elasticsearch
    image: porter/elasticsearch
    ports:
      - "9200:9200"
    container_name: es_master

  es-node:
    image: porter/elasticsearch
    depends_on:
      - es-master
    ports:
      - "9200"
    command: elasticsearch --discovery.zen.ping.unicast.hosts=es_master

İlk hizmet tanımında "es-master", ./elasticsearch içindeki Dockerfile'dan bir görüntü oluşturmak için "derleme" seçeneğini kullandığımı görebilirsiniz. Resmi "porter / elasticsearch" adıyla "image" seçeneğiyle etiketliyorum. Daha sonra "resim" seçeneği ile "es-node" hizmet tanımındaki bu yerleşik görüntüye başvurmak ve diğer kapsayıcı "es-master" inşa ve ilk önce çalıştığından emin olmak için bir "depends_on" kullanın.


57
Seçenek container_name:gerçekten yardımcı oldu.
Bruno Bieri

2
Bunun işe yaradığından emin misin? buildve imagebirbirini dışlar. "Hizmet xxx'te hem bir görüntü hem de oluşturma yolu belirtildi. Bir hizmet, her ikisini birden değil, görüntüye oluşturmak veya varolan bir görüntüyü kullanmak için oluşturulabilir."
Burhan Ali

3
Oh aldırma. Bu ikisi v2 biçiminde ve sonrasında birlikte kullanılabilir. Test ettiğim şey bir sürüm belirtmedi, bu yüzden sanırım v1 olduğu varsayıldı.
Burhan Ali

3
Container_name seçeneği: gerçekten
thks

2
@BrunoBieri dosyadaki depends_onhizmetin adını kullanır, doker-composebir kapsayıcı adı belirtmeye gerek yoktur. Hatta örnek bunu gösteriyor depends_on: es-masterve göstermiyordepends_on: es_master
blueFast

65

Gereğince liman işçisi-oluşturmadeneyimine 1.6.0 :

Artık yeni dosya biçimini kullanıyorsanız hem bir derleme hem de bir görüntü anahtarı belirtebilirsiniz. docker-compose buildresmi oluşturup belirttiğiniz adla etiketlerken, docker-compose pullçekmeye çalışır.

Yani sen docker-compose.ymlolurdun

version: '2'
services:
  wildfly:
      build: /path/to/dir/Dockerfile
      image: wildfly_server
      ports:
       - 9990:9990
       - 80:8080

Docker-compose'u güncellemek için

sudo pip install -U docker-compose==1.6.0

1
HATA: Doğrulama başarısız oldu, neden (ler): cornsoup öğesinin hem bir görüntü hem de oluşturma yolu belirtildi. Bir hizmet her ikisine birden değil, görüntüye kurulabilir veya mevcut bir görüntüyü kullanabilir. (docker-compose 1.6.2)
zx1986 16:16

@ zx1986 bunun için docker-compose.yml dosyasının yeni sürümünü kullanmanız gerekiyor bu docs.docker.com/compose/compose-file/#upgrading Cevabımı güncellediğime dayanarak
arulraj.net

50

1. Seçenek: Varsayılan resim adını ipucu verme

Docker-compose tarafından oluşturulan görüntünün adı varsayılan olarak klasör adına bağlıdır, ancak --project-nameargüman kullanarak geçersiz kılabilirsiniz :

$ docker-compose --project-name foo build bar
$ docker images foo_bar

2. Seçenek: Resim adını belirtme

Docker-compose 1.6.0 çıktıktan sonra , açık bir görüntü adı belirtebilir build:ve image:bu ada sahip olabilirsiniz ( arulraj.net'in cevabına bakınız ).

Seçenek 3: Kaptan resim oluşturma

Üçüncüsü, kaptan bir görüntü oluşturmaktır:

$ docker-compose up -d bar
$ docker commit $(docker-compose ps -q bar) foo_bar
$ docker-compose rm -f bar

1
--project-nameartık kabul edilmiyor gibi görünüyor. 1.23.2
Steven Vachon ile

21

Kullanım durumunuza bağlı olarak, önceden oluşturulmuş bir resmi kullanabilir ve içinde adını belirtebilirsiniz docker-compose.

CI sunucumuzun adlandırılmış bir Docker görüntüsü oluşturduğu bir üretim kullanım durumumuz var. ( docker build -t <specific_image_name> .). Adlandırılmış görüntü belirtildikten sonra, docker-composeher zaman belirli görüntüden oluşturulur. Bu, birkaç farklı olasılığa izin verir:

1- Nereden çalıştırırsanız çalışın docker-compose, her zaman o görüntünün en son sürümünü kullanacağınızdan emin olabilirsiniz .

2- docker-composeDosyanızda birden fazla adlandırılmış görüntü belirtebilir ve önceki oluşturma adımında otomatik olarak bağlanmasına izin verebilirsiniz.

Dolayısıyla, resminiz önceden oluşturulmuşsa, resmi adlandırabilirsiniz docker-compose. Kaldır buildve belirtimage:

wildfly:
  image: my_custom_wildfly_image
  container_name: wildfly_server
  ports:
   - 9990:9990
   - 80:8080
  environment:
   - MYSQL_HOST=mysql_server
   - MONGO_HOST=mongo_server
   - ELASTIC_HOST=elasticsearch_server
  volumes:
   - /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
  links:
   - mysql:mysql_server
   - mongo:mongo_server
   - elasticsearch:elasticsearch_server

10

resminizi oluşturduktan sonra aşağıdakileri yapın:

docker tag <image id> mynewtag:version

bundan sonra görüntünüzün <none>gittiğinizde artık adlandırılmadığını göreceksiniz docker images.


3
Docker-compose ile etiketleri belirtmek mümkün mü?
Robert

etiketler şu anda desteklenmiyor gibi görünüyor.
GHETTO.CHiLD

1
Bu yüzden görüntüyü oluşturmalı ve daha sonra yeniden etiketlemeliyim? Gerçekten yararlı değil, umarım docker-compose hızlı bir şekilde bu sorunu gidermek?
Robert

1
Çok kaplı bir ortam inşa ediyorsanız evet. tek bir konteyner ortamı inşa ediyorsanız her zaman gidebilirsinizdocker build -t mytag:version .
GHETTO.CHiLD
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.