docker build命令(docker buildx 开启及使用(模拟器构建和远程构建))

本文目录
docker buildx 开启及使用(模拟器构建和远程构建)
默认情况下,buildx已经在安装包里面了
在 ~/.docker/config.json增加,是家目录的client端的配置不是/etc下的配置
"experimental": "enabled"
即可永久开启buildx命令
为了良好的支持性,如果是centos版本需要升级内核到5.12.9才能正常使用
内核升级过程(略)
在 Docker 19.03+ 版本中可以使用 docker buildx build 命令使用 BuildKit 构建镜像。该命令支持--platform 参数可以同时构建支持多种系统架构的 Docker 镜像,大大简化了构建步骤。
1、由于 Docker 默认的 builder 实例不支持同时指定多个 --platform ,我们必须首先创建一个新的 builder 实例。
$ docker buildx create --name mybuilder --driver docker-container
2、使用新创建好的builder实例
$ docker buildx use mybuilder
3、查看已有的builder实例
$ docker buildx ls
4、安装模拟器(用于多平台镜像构建)
$ docker run --privileged --rm tonistiigi/binfmt --install all
docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes
5、本地构建镜像并推送
$ docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t test/arch --push -f ./dockerfile .
准备:
192.168.1.1 amd系统 buildx 本机 (以下操作都需要在该节点执行)
192.168.1.2 arm系统 远端机 (只需要装好docker环境即可)
buildx 支持远程构建,默认本机使用的是套接字,然后再添加一个远端的连接即可
先在buildx本机创建一个节点
查看该节点
配置ssh 到user1@192.168.1.1免密登录
创建远程节点关联
两种方式各有优劣,
模拟器的方式不太稳定,需要本机服务器驱动支持,部分镜像可能打不出来
远程构建需要准备相应的服务器资源,比较浪费资源,但相对稳定
笔者使用远程构建方式
docker build 中的 -f 选项
需要注意的是,在 docker build 命令接收的参数中,提供给 docker build 命令的 -f 选项应该 Dockerfile 路径名。如果 Dockerfile 文件就叫 Dockerfile 那么文件名可省略,如果 Dockerfile 文件就在当前目录下,那么 -f 选项可省略。
如果你的 Dockerfile 在别处,而且还不叫 Dockerfile 那么你的 docker build 命令就应该形如如下形式:
在上面的例子中,你的 Dockerfile 在 /xxx/yyy 下,名为 zzz 。
docker镜像构建
基本的构建命令为: docker build -t name:tag -f Dockerfile .
-t : 表示构建出来的镜像名称
-f : 表示构建使用的dockerfile文件名称
. : 表示构建使用当前路径作为上下文(contex),如果你是在根目录 / 下面构建,不建议使用 . (不建议使用根路径作为上下文),因为根路径下面有虚拟文件系统,如 /proc 之类的,构建的时候会报找不到文件的错误。
镜像构建流程为首先将指定的上下文(contextpath)路径下的文件打包,发送到服务端。服务端再将收到的文件解压,然后以解压后的路径作为上下文,进行镜像构建。
docker构建命令中如果没有以 -f 指定Dockerfile,则以上下文中的Dockerfile文件作为构建文件;如果通过 -f 指定了Dockerfile文件路径及名称,则在构建上下文中寻找指定的文件。
docker build的时候,如果某一层无法使用上一次的构建缓存,则后续层均无法使用,故若大多数层均未改变,建议将未改动的层放在前面。如 RUN apt get install -y tmux 命令,如果tmux版本有变化,则无法继续使用构建缓存,建议将该语句放到后面。
***隐藏网址***
--no-cache=true 可以不使用缓存,不知道能否解决构建时提示缓存不足的问题。
可以直接编译得到最终镜像: docker build -t go/helloworld:3 .
也可以只构建 builder 阶段的镜像: docker build --target builder -t username/imagename:tag .
构建时,可以复制上一阶段的镜像中的文件,也可以复制任意镜像中的文件。
COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf
as 后面的名字可以任意填写,主要作用是作为一个标识,方便单独构建其中一个镜像,或者是其他镜像从中获取部分文件。
***隐藏网址***
没有守护进程,不需要 root 特权,而且生成的是符合 OCI 的镜像,因此你的镜像的运行方式与使用 Docker 构建的镜像完全相同。它还能使用 Dockerfile 或 Containerfile 构建镜像, Dockerfile 与 Containerfile 实际上是同一个东西,只是叫法不同罢了。除此之外,Buildah 还提供了对镜像层更精细的控制,支持提交大量的变更到单个层。我认为,它与 Docker 之间有一个出乎意料的区别(但这个区别是好事),那就是使用 Buildah 构建的镜像特定于用户,因此你可以只列出自己构建的镜像。
Google 发布了“ Kaniko ”,一种用于在未授权容器或 Kubernetes 集群中构建容器镜像的开源工具。虽然 Kaniko 也是根据用户给定的 Dockerfile 构建镜像,但是并不依赖于 Docker 守护进程,而是在用户空间中完全执行每个命令,并对所导致的文件系统更改做快照。一般多用于在流水线中执行的编译构建。它与 Buildah 的主要区别在于,Kaniko 更加侧重于 Kubernetes 中的镜像构建。
另外需要制定镜像仓库名字,从而自动推送到目标仓库。
--context :指定构建上下文(可以挂载本地目录,也可以指定git地址,如 git://github.com/mycorp/my-app.git ),
--destination :指定要推送的仓库地址,
--dockerfile :指定dockerfile文件。存在一个问题是,tag是写死的,每次得到的镜像会覆盖。
***隐藏网址***
并行构建、跳过未使用的阶段、更好的增量构建以及不需要 root 权限等构建。但是,它仍然需要运行守护进程 (buildkitd)。因此,如果你不想摆脱 Docker,同时又想要一些新的功能和改进,那么可以考虑一下 buildkit。
通过查看帮助文档查看dockerbuild命令作用
通过查看帮助文档查看dockerbuild命令作用是build命令用于使用Dockerfile创建镜像。dockerbuild命令用于从Dockerfile构建镜像。可以在dockerbuild命令中使用-f命令也就是指定要构建的脚本,通过-t输出镜像名称还可以跟:加上版本。
docker如何编写网页
Docker 是一种流行的容器化技术,可以帮助开发人员快速创建和部署应用程序。如果您想在 Docker 中编写网页,可以按照以下步骤:
1. 选择一个适合您的 Web 开发框架,例如 Node.js、Ruby on Rails 或 Flask 等。
2. 创建一个 Dockerfile 文件,用于构建 Docker 镜像。您可以在 Dockerfile 中指定所需的操作系统、安装所需的软件包、将应用程序复制到容器中等。
3. 在 Dockerfile 中设置端口映射。这将允许您将容器内部的端口映射到主机上的端口,以便您可以通过 Web 浏览器访问您的网页。
4. 在 Dockerfile 中设置 CMD 指令,以便在容器启动时运行您的应用程序。
5. 使用 docker build 命令构建 Docker 镜像。
6. 使用 docker run 命令启动 Docker 容器,并将主机端口与容器端口进行映射。
7. 在 Web 浏览器中访问您的网页,以确保它可以正常工作。
需要注意的是,Docker 可以帮助您轻松地创建和部署应用程序,但是网页的编写和设计仍然需要您自己完成。

更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40






