docker-compose build
和 docker build
有什么区别?假设在 Docker 化项目路径中存在一个 docker-compose.yml
文件:
docker-compose build
和
docker build
docker-compose build
和 docker build
有什么区别?假设在 Docker 化项目路径中存在一个 docker-compose.yml
文件:
docker-compose build
和
docker build
docker-compose
可以被认为是docker CLI的一个包装器(实际上它是另一种用Python实现的方式,正如评论中所说的那样),以节省时间并避免500个字符长的行(还可以同时启动多个容器)。 它使用名为docker-compose.yml
的文件来检索参数。
您可以在此处找到docker-compose文件格式的参考here。
因此,基本上docker-compose build
将读取您的docker-compose.yml
,查找所有包含build:
语句的服务,并为每个服务运行docker build
。
每个build:
都可以指定一个Dockerfile
、一个上下文和要传递给docker的args。
最后举一个例子: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
docker-compose build
命令将构建 docker-compose.yml
文件中定义的服务。
https://docs.docker.com/compose/reference/build/
docker build
命令将构建 Dockerfile 定义的镜像。
简而言之,docker-compose是比仅使用docker命令更好的使用docker的方法。
如果问题在于使用docker-compose build命令是否会构建一个包含多个镜像的zip文件,则这种想法是错误的。
docker-compose build将通过进入docker-compose.yml中的单个服务条目来构建单个镜像。
使用docker images命令,我们也可以看到所有单独的镜像被保存了。
真正的魔力在于docker-compose up命令。
这个命令将创建一个相互连接并可以使用容器名称相似于主机名相互通信的容器网络。
补充第一条回答...
在服务定义下,您可以提供映像名称和容器名称。
例如,在下面的docker-compose示例中,对于名为“web”的服务,您可以显式地指定映像名称和容器名称,这样docker就不必使用默认值了。
否则,Docker将使用文件夹(目录)和服务名称的拼接。例如:myprojectdir_web
因此,最好明确地放置期望的映像名称,以便在执行docker build命令时生成。
例如: image: 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
中。因此,使用 context:
是一个好选择! - daparicdocker build
和 docker-compose build
之间的区别,以下是一些补充说明。两者都有使用现有镜像作为层缓存来构建映像的选项。
docker build
命令的选项是--cache-from <image>
docker-compose
中,在 build
部分有一个名为cache_from
的标签。docker-compose
v1.25.0 (2019-11-18) 引入了一个实验性功能COMPOSE_DOCKER_CLI_BUILD ,使得 docker-compose
使用本地 docker 构建器(因此,使用 docker build
生成的映像可以作为 docker-compose build
的层缓存)。
web
来自容器名称。myproject
是您所在的文件夹名称。 这样可以避免在您同时处理包含web
容器的两个项目时出现冲突。 - hugoShakadocker-compose.yml
文件,web
是服务名称。 - daparic