[docker] docker-compose로 작성된 이미지 이름을 어떻게 정의합니까?

docker-compose 를 사용하여 개발 환경을 만들고 있습니다. 특정 이미지를 만들고 싶지만 해당 이미지의 이름을 설정하는 방법을 모르겠습니다.

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

docker-compose모든 것을 실행할 때 괜찮지 만 새 이미지의 이름이 임의입니다. 빌드 이미지에 이름을 설정할 수 있습니까?



답변

docker-compose 버전 2 파일 형식의 경우 한 서비스의 이미지를 작성하고 태그를 지정한 다음 다른 서비스에 동일한 빌드 이미지를 사용할 수 있습니다.

필자의 경우 두 개의 노드로 탄력적 검색 클러스터를 설정하려고합니다. 둘 다 동일한 이미지를 사용해야하지만 다르게 실행되도록 구성되었습니다. 또한 내 Dockerfile에서 사용자 정의 elasticsearch 이미지를 만들고 싶습니다. 그래서 이것이 내가 한 일입니다 (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

첫 번째 서비스 정의 “es-master”에서 “build”옵션을 사용하여 ./elasticsearch의 Dockerfile에서 이미지를 빌드합니다. “image”옵션을 사용하여 이름이 “porter / elasticsearch”인 이미지에 태그를 지정합니다. 그런 다음 “image”옵션을 사용하여 “es-node”서비스 정의에서이 빌드 된 이미지를 참조하고 “depends_on”을 사용하여 다른 컨테이너 “es-master”가 먼저 빌드되고 실행되는지 확인하십시오.


답변

당으로 고정 표시기-작성 1.6.0 :

새 파일 형식을 사용하는 경우 이제 빌드 및 이미지 키를 모두 지정할 수 있습니다. docker-compose build이미지를 빌드하고 지정한 이름으로 태그를 지정 docker-compose pull하고 가져 오려고 시도합니다.

그래서 당신 docker-compose.yml

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

docker-compose를 업데이트하려면

sudo pip install -U docker-compose==1.6.0


답변

옵션 1 : 힌트 기본 이미지 이름

docker-compose 에 의해 생성 된 이미지의 이름은 기본적으로 폴더 이름에 따라 다르지만 --project-name인수 를 사용하여 재정의 할 수 있습니다 .

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

옵션 2 : 이미지 이름 지정

docker-compose 1.6.0 이 종료 되면 명시 적 이미지 이름을 지정 build:하고 image:가질 수 있습니다 ( arulraj.net ‘s answer 참조 ).

옵션 3 : 컨테이너에서 이미지 생성

세 번째는 컨테이너에서 이미지를 만드는 것입니다.

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


답변

사용 사례에 따라 이미 생성 된 이미지를 사용하고에 이름을 지정할 수 docker-compose있습니다.

CI 서버가 명명 된 Docker 이미지를 빌드하는 프로덕션 유스 케이스가 있습니다. ( docker build -t <specific_image_name> .). 명명 된 이미지가 지정되면 docker-compose항상 특정 이미지를 생성합니다. 이것은 몇 가지 다른 가능성을 허용합니다.

1- 어디에서 실행 docker-compose하든 항상 해당 특정 이미지의 최신 버전을 사용하게 할 수 있습니다.

2- docker-compose파일 에 여러 개의 명명 된 이미지를 지정 하고 이전 빌드 단계를 통해 이미지를 자동으로 연결할 수 있습니다.

따라서 이미지가 이미 빌드 된 경우 이미지 이름을로 지정할 수 있습니다 docker-compose. 제거 build및 지정image:

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


답변

이미지를 빌드 한 후 다음을 수행하십시오.

docker tag <image id> mynewtag:version

그 후 당신은 <none>당신이 갈 때 이미지가 더 이상 이름이 표시되지 않습니다 볼 수 있습니다 docker images.


답변