玖叶教程网

前端编程开发入门

Docker Build用法大全:构建与推送Docker镜像的终极指南

Docker Build是Docker提供的一个核心命令,用于根据Dockerfile中的指令构建自定义的

Docker镜像。以下是Docker Build的十种主要用法及其示例的优化文章:

一、构建镜像并指定标签

命令:

docker build -t my-image:tag .

说明:
此命令在当前目录下查找名为Dockerfile的文件,并根据其中的指令构建一个Docker镜像。-t参数用于指定镜像的名称和标签。

二、在构建过程中传递构建参数

命令:

docker build --build-arg ARG_NAME=value -t my-image:tag .

说明:

使用--build-arg参数,您可以在构建过程中传递自定义的参数值给Dockerfile中的ARG指令。

三、从远程Git仓库构建镜像

命令:

docker build -t my-image:tag https://github.com/username/repo.git

说明:

Docker可以直接从Git仓库克隆代码并构建镜像。这通常用于自动化持续集成/持续部署(CI/CD)流程。


四、多阶段构建

Dockerfile示例:

# 第一阶段:构建应用  
FROM maven:3.8.1-openjdk-11-slim AS builder  
WORKDIR /app  
COPY . .  
RUN mvn clean install  
  
# 第二阶段:运行应用  
FROM openjdk:11-jre-slim  
WORKDIR /app  
COPY --from=builder /app/target/my-app.jar .  
CMD ["java", "-jar", "my-app.jar"]


说明:
多阶段构建允许您在一个Dockerfile中定义多个构建阶段,并在每个阶段中使用不同的基础镜像。这通常用于减少最终镜像的大小。

五、使用Docker Compose构建

docker-compose.yml示例:

version: '3'  
services:  
  my-service:  
    build:  
      context: .  
      dockerfile: Dockerfile  
      args:  
        ARG_NAME: value  
    image: my-image:tag

说明:
Docker Compose允许您使用YAML文件定义多个服务及其依赖关系。在build部分,您可以指定构建上下文、Dockerfile的路径和传递的构建参数。

六、使用缓存策略

Dockerfile示例:

# 使用缓存  
RUN apt-get update && apt-get install -y \  
    package1 \  
    package2  
  
# 不使用缓存  
RUN apt-get update && apt-get install -y --no-cache \  
    package3 \  
    package4

说明:
Docker会缓存每个RUN指令的结果。通过使用--no-cache标志,您可以禁用此功能并强制Docker重新运行指令。

七、构建并推送镜像到Docker仓库

命令:

docker build -t my-image:tag .  
docker push my-image:tag

说明:
首先,使用docker build命令构建镜像。然后,使用docker push命令将镜像推送到Docker Hub或其他Docker仓库。

八、通过Dockerfile目录构建镜像

命令:

docker build -t my-image:tag /path/to/dockerfile/dir

说明:
使用-f或--file参数(或简写为-f),您可以指定Dockerfile的路径。如果省略该参数,Docker将默认在当前目录下查找名为Dockerfile的文件。

九、设置构建进度输出模式

命令:

docker build --progress=plain -t my-image:tag .

说明:
通过--progress参数,您可以控制Docker构建过程中输出进度的格式。plain是一个简单的输出模式,仅显示必要的进度信息。

十、构建无需Dockerfile的上下文镜像

命令:

cat Dockerfile | docker build -t my-image:tag -

说明:
使用-作为构建上下文,Docker会从标准输入中读取Dockerfile的内容。这在某些高级场景(如脚本中的自动化)中可能很有用。但是,通常更常见的是使用文件系统上的Dockerfile文件。

请注意,对于第十种用法,虽然技术上可行,但在实践中并不常见,因为通常建议将Dockerfile存储在文件系统上的文件中以便于管理和版本控制。


@关注和转发,就是最大的支持



发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言