docker-compose build
과 의 차이점은 무엇입니까 docker build
?
고정 된 프로젝트 경로에 docker-compose.yml
파일 이 있다고 가정 합니다.
docker-compose build
과
docker build
답변:
docker-compose
고정 표시기의 CLI 래퍼로 간주 할 수있다 (사실은 파이썬에서 또 다른 구현 코멘트 말했다 이득 시간과 피할 500 자 길이의 선 (또한 동시에 여러 컨테이너를 시작)에 순서가). docker-compose.yml
매개 변수를 검색하기 위해 라는 파일을 사용합니다 .
여기 에서 docker-compose 파일 형식에 대한 참조를 찾을 수 있습니다 .
따라서 기본적으로을 docker-compose build
읽고 문을 docker-compose.yml
포함하는 모든 서비스를 찾고 각각에 대해 build:
실행합니다 docker build
.
각각build:
은 Dockerfile
도커에 전달할, 컨텍스트 및 인수를 지정할 수 있습니다 .
예제 docker-compose.yml
파일로 마무리하려면 :
version: '3.2'
services:
database:
image: mariadb
restart: always
volumes:
- ./.data/sql:/var/lib/mysql
web:
build:
dockerfile: Dockerfile-alpine
context: ./web
ports:
- 8099:80
depends_on:
- database
를 호출 할 때 타겟 docker-compose build
만 web
빌드 할 이미지가 필요합니다. docker build
명령과 같을 것이다 :
docker build -t web_myproject -f Dockerfile-alpine ./web
web
컨테이너 이름에서 가져옵니다. myproject
현재 폴더의 이름입니다. web
컨테이너가 포함 된 두 프로젝트에서 작업 할 경우 충돌을 방지 합니다.
docker-compose.yml
위에 제공된 web
서비스 이름을 기반으로합니다 .
docker-compose build
docker-compose.yml
파일에 서비스를 빌드 합니다.
https://docs.docker.com/compose/reference/build/
docker build
Dockerfile에서 정의한 이미지를 빌드합니다.
기본적으로 docker-compose는 docker 명령보다 docker를 사용하는 더 좋은 방법입니다.
여기서 질문이 docker-compose build 명령인지 여부가 여러 이미지를 포함하는 zip 종류를 빌드합니다. 그렇지 않으면 일반적인 Dockerfile과 별도로 빌드되었을 것이므로 생각이 잘못되었습니다.
Docker-compose 빌드는 docker-compose.yml의 개별 서비스 항목으로 이동하여 개별 이미지를 빌드합니다.
도커 이미지, 명령을 사용하면 모든 개별 이미지가 저장되는 것을 볼 수 있습니다.
진정한 마술은 도커 구성입니다.
이것은 기본적으로 호스트 이름과 유사한 컨테이너 이름으로 서로 통신 할 수있는 상호 연결된 컨테이너 네트워크를 생성합니다.
첫 번째 답변에 추가 중 ...
서비스 정의 아래에 이미지 이름과 컨테이너 이름을 제공 할 수 있습니다.
예를 들어 아래의 docker-compose 예제에서 'web'이라는 서비스의 경우 이미지 이름과 컨테이너 이름을 명시 적으로 제공하여 docker가 기본값을 사용할 필요가 없도록 할 수 있습니다.
그렇지 않으면 docker가 사용할 이미지 이름은 폴더 (Directory)와 서비스 이름의 연결이됩니다. 예 : myprojectdir_web
따라서 docker build 명령이 실행될 때 생성 될 원하는 이미지 이름을 명시 적으로 입력하는 것이 좋습니다.
예 : 이미지 : mywebserviceImage container_name : my-webServiceImage-Container
docker-compose.yml 파일 예 :
version: '3.2'
services:
web:
build:
dockerfile: Dockerfile-alpine
context: ./web
ports:
- 8099:80
image: mywebserviceImage
container_name: my-webServiceImage-Container
depends_on:
- database
build:
정확한 파일 이름이 Dockerfile
. 예를 들어, build: ./web
.So 사용은 context:
좋은 것입니다!
docker build
과 의 차이점에 대한 추가 단어가 거의 없습니다 docker-compose build
. 둘 다 기존 이미지를 레이어 캐시로 사용하여 이미지를 빌드하는 옵션이 있습니다.
docker build
옵션은--cache-from <image>
docker-composer
태그 cache_from
가 build
있습니다.안타깝게도 지금까지이 수준에서 하나가 만든 이미지는 레이어 캐시로 다른 하나와 호환되지 않습니다 ( ID는 호환되지 않음 ). 그러나 docker-compose
v1.25.0 (2019-11-18) 은 네이티브 도커 빌더 를 사용 하도록 실험적인 기능인 COMPOSE_DOCKER_CLI_BUILD를 도입했습니다 docker-compose
(따라서에서 만든 이미지를 docker build
에서 레이어의 캐시로 사용할 수 있음 docker-compose build
).