[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
.