Skip to content

常用指令

安装

shell
curl -fsSL https://get.docker.com | sh
curl -fsSL https://get.docker.com | sh

Dockerfile给ubuntu换源

dockerfile
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

macOS运行容器时同步宿主机时间

shell
-e TZ=`ls -la /etc/localtime | cut -d/ -f8-9`
-e TZ=`ls -la /etc/localtime | cut -d/ -f8-9`

MacOS中容器访问宿主机

可以用host.docker.internal来访问宿主机

https://docs.docker.com/desktop/networking/#use-cases-and-workarounds

构建跨平台镜像

docker buildx

shell
# 创建builder
docker buildx create --name cross-platform-builder --driver docker-container --use
# 执行构建
docker buildx build --platform linux/amd64,linux/arm64 -t 镜像名:tag [-o type=registry | --push] . 
# 查看推送到远程的镜像信息
docker buildx imagetools inspect 镜像名:tag
# 创建builder
docker buildx create --name cross-platform-builder --driver docker-container --use
# 执行构建
docker buildx build --platform linux/amd64,linux/arm64 -t 镜像名:tag [-o type=registry | --push] . 
# 查看推送到远程的镜像信息
docker buildx imagetools inspect 镜像名:tag

buildx 实例通过两种方式来执行构建任务,两种执行方式被称为使用不同的「驱动」:

  • docker 驱动:使用 Docker 服务程序中集成的 BuildKit 库执行构建。
  • docker-container 驱动:启动一个包含 BuildKit 的容器并在容器中执行构建。

docker 驱动无法使用一小部分 buildx 的特性(如在一次运行中同时构建多个平台镜像),此外在镜像的默认输出格式上也有所区别:docker 驱动默认将构建结果以 Docker 镜像格式直接输出到 docker 的镜像目录(通常是 /var/lib/overlay2),之后执行 docker images 命令可以列出所输出的镜像;而 docker container 则需要通过 --output 选项指定输出格式为镜像或其他格式。

docker buildx build 支持丰富的输出行为,通过--output=[PATH,-,type=TYPE[,KEY=VALUE] 选项可以指定构建结果的输出类型和路径等,常用的输出类型有以下几种:

  • local:构建结果将以文件系统格式写入 dest 指定的本地路径, 如 --output type=local,dest=./output
  • tar:构建结果将在打包后写入 dest 指定的本地路径。
  • oci:构建结果以 OCI 标准镜像格式写入 dest 指定的本地路径。
  • docker:构建结果以 Docker 标准镜像格式写入 dest 指定的本地路径或加载到 docker 的镜像库中。同时指定多个目标平台时无法使用该选项。
  • image:以镜像或者镜像列表输出,并支持 push=true 选项直接推送到远程仓库,同时指定多个目标平台时可使用该选项。
  • registry:type=image,push=true 的精简表示。

https://waynerv.com/posts/building-multi-architecture-images-with-docker-buildx/