‹ 返回笔记 Esc·

Docker 命令

build 默认集成 buildx 特性 --- buildx 创建支持跨架构的构建器 如果你想在本地直接运行这个镜像,请加 --load 参数重新构建: 运行时会自动拉取这个镜像:moby/buil…

build

默认集成 buildx 特性

1docker build --load --platform linux/amd64 -t intelligence-ai:1.0.0 .

buildx

创建支持跨架构的构建器

1docker buildx create --name mybuilder --use

如果你想在本地直接运行这个镜像,请加 –load 参数重新构建:

运行时会自动拉取这个镜像:moby/buildkit:buildx-stable-1

1docker buildx build --platform linux/amd64 -t intelligence-ai:1.0.0 . --load

如果出现网络问题可用以下命令替代:

注意: 从 Docker 23.0 开始,BuildKit 就已经成为默认选项了

1DOCKER_BUILDKIT=1 docker build --platform linux/amd64 -t hr-ai:1.0.0 . --load
2
3或在环境变量中启用:
4export DOCKER_BUILDKIT=1
5docker build -t hr-ai .

运行这个镜像:

1docker run -it --rm -p 9101:9101 intelligence-ai:1.0.0

注意 127.0.0.1 是容器内部自身 ip 无法连接到宿主机的本地服务。

导出这个镜像:

1docker tag intelligence-ai:1.0.0 intelligence-ai:1.1.5
2docker save -o ~/Downloads/intelligence-ai-1.1.5.tar intelligence-ai:1.1.5

操作命令

容器

1docker ps                           # 列出正在运行的容器
2docker ps -a                        # 列出所有容器(包括停止的)
3docker rename <old_container_name> <new_container_name> # 重命名容器
4docker run <options> <image_name>   # 运行新容器 [-rm 退出后自动删除]
5docker run -d <image_name>          # 以后台模式运行容器
6docker run -it <image_name>         # 交互模式运行容器
7docker start <container_id_or_name> # 启动已停止的容器
8docker stop <container_id_or_name>  # 停止正在运行的容器
9docker kill <container_id_or_name>  # 强制停止容器
10docker restart <container_id_or_name> # 重启容器
11docker rm <container_id_or_name>    # 删除指定容器 [-f 强制]
12docker exec -it <container_id_or_name> bash # 进入正在运行的容器(或 /bin/bash)
13docker logs <container_id_or_name>  # 查看指定容器的日志
14docker inspect <container_id_or_name> # 查看容器的详细信息
15docker port <container_id_or_name>  # 查看容器暴露的端口(正在运行的)
16
17docker cp <container_id_or_name>:<src_path> <dest_path>  # 从容器拷贝文件到主机
18docker cp <src_path> <container_id_or_name>:<dest_path>  # 将主机拷贝文件到容器
19docker pause <container_id_or_name> # 暂停正在运行的容器
20docker unpause <container_id_or_name> # 恢复暂停的容器
21docker diff <container_id_or_name>  # 查看容器文件系统中相对于镜像的更改
22docker export <container_id_or_name> -o <file>  # 导出容器文件系统为 tar 文件
23docker top <container_id_or_name>   # 显示容器内的进程
24docker create <options> <image_name>  # 创建但不启动一个新的容器
25docker commit <container_id_or_name> <new_image_name> # 提交容器的更改并保存为新镜像

镜像

1docker images                       # 列出所有镜像
2docker images --digests             # 列出所有镜像(附带唯一标识)
3docker pull <image_name>            # 拉取指定镜像(hello-world 测试镜像)
4docker pull <image_name>@sha256:7655a4841da9 # 使用 Digest 拉取镜像
5docker rmi <image_id_or_name>        # 删除指定镜像
6docker save <image_name> -o <file_name> # 保存镜像到文件
7docker load -i <file_name>           # 从 tar 文件加载镜像
8docker build -t <image_name> <path>  # 根据 Dockerfile 构建镜像
9docker push <image_name>             # 推送镜像到仓库
10docker history <image_name>          # 查看镜像的构建历史
11docker import <file> <new_image_name> # 从 tar 文件导入为镜像
12docker tag <image_name> <new_image_name>  # 复制此镜像并打标签
13docker search <image_name>           # 在 Docker Hub 上搜索镜像

构建器

1docker buildx ls                                        # 查看构建器列表
2docker buildx create --name mybuilder --use # 创建构建器
3docker buildx use mybuilder                    # 切换构建器
4docker buildx stop mybuilder                # 停止构建器容器
5docker buildx rm mybuilder                    # 删除构建器
6docker buildx inspect mybuilder            # 检查构建器状态

1docker volume ls                            # 列出所有卷
2docker volume create <volume_name>          # 创建卷
3docker volume inspect <volume_name>     # 查看卷的详细信息
4docker volume rm <volume_name>          # 删除卷

网络

1docker network ls                           # 列出所有网络
2docker network create <network_name>    # 创建自定义网络
3docker network inspect <network_name>   # 查看网络的详细信息
4docker network rm <network_name>        # 删除自定义网络
5docker network connect <network_name> <container_name>  # 将容器连接到网络
6docker network disconnect <network_name> <container_name>  # 将容器从网络中断开

资源管理

1docker info                         # 查看镜像源信息
2docker system df -v                 # 查看容器镜像占用空间
3docker stats                        # 查看 Docker 进程的实时统计信息
4docker update <container_id_or_name> <options> # 更新容器的资源限制(CPU、内存)
5docker system info                  # 显示 Docker 系统的低级信息
6docker system prune                    # 清理未使用的容器、镜像和网络
7docker container prune              # 删除所有停止的容器
8docker image prune                  # 删除未使用的镜像
9docker volume prune                 # 删除所有未使用的卷
10docker network prune                # 删除所有未使用的网络
11docker events                          # 实时显示 Docker 的事件流(如容器启动、停止等)

身份验证

1docker login                        # 登录 Docker Hub 仓库
2docker logout                       # 登出 Docker Hub 仓库

compose 命令用法

1docker-compose --version              # 查看 Docker Compose 版本
2docker-compose ls
3docker-compose start                   # 启动已存在的服务容器
4docker-compose up                      # 启动服务(根据 docker-compose.yml 文件)
5docker-compose up -d                   # 以后台模式启动服务
6docker-compose up --build              # 构建镜像并启动服务
7docker-compose down                    # 停止并删除服务(容器和网络)
8docker-compose stop                    # 停止服务,但不删除容器
9docker-compose rm                      # 删除已停止的服务容器
10docker-compose rm -f                   # 强制删除已停止的服务容器,不提示确认
11docker-compose rm -s                   # 删除已停止的服务容器及其关联的网络
12docker-compose restart                 # 重启服务
13docker-compose logs                    # 查看服务日志
14docker-compose logs -f                 # 实时查看服务日志
15docker-compose ps                      # 列出运行中的服务
16docker-compose exec <service_name> <command>  # 在指定服务中执行命令
17docker-compose run <service_name> <command>   # 运行一次性的命令(并启动新容器)
18docker-compose pull                    # 拉取服务的最新镜像
19docker-compose push                    # 推送服务的镜像到远程仓库
20docker-compose config                  # 验证并显示配置文件内容
21docker-compose scale <service_name>=<num>  # 扩展指定服务的实例数量
22docker-compose exec <service_name> <command>  # 在指定服务的容器中执行命令
23docker-compose exec -it <service_name> /bin/bash # 以交互模式进入指定服务的容器

多平台构建打包

1docker build --platform linux/amd64 -t intelligence-ai:1.1.26 . --load

创建并切换到 buildx 的 docker-container 驱动

docker-container 驱动支持多平台构建,且基于容器的构建环境,可以模拟不同架构。

  1. 创建一个新的 builder(构建器)实例
1docker buildx create --name mybuilder --driver docker-container --use

该命令创建并切换到名为 mybuilder 的 builder,使用 docker-container 驱动。

  1. 初始化 builder
1docker buildx inspect --bootstrap
  1. 重新执行多平台构建命令
1docker buildx build --platform linux/amd64,linux/arm64 -t hr-ai:1.0.0 .

删除容器及其挂载的匿名卷

1docker rm -v <容器ID或名>

手动清理未使用的悬空镜像层

如果在拉取 Docker 镜像的过程中中断了拉取操作,Docker 可能会留下未完成下载的部分数据,这些部分下载的数据会占用磁盘空间,但它们不是完整的镜像文件。 docker image prune: 删除所有悬空(dangling)的镜像层,即那些没有被任何容器使用的层。 docker system prune: 删除所有未使用的镜像、网络、已停止的容器和构建缓存,进一步清理磁盘空间。 docker system prune -a: 如果想彻底清理所有未使用的镜像,可以加上 -a 参数 注意:-a 参数会删除所有未被容器使用的镜像,包括那些你可能想要保留的镜像,所以使用前请确保你不需要这些镜像。


拉取镜像时指定特定的架构

比如在 ARM64 的 Mac 上拉取 AMD64 架构的镜像

  1. 使用 –platform 标志 Docker 支持使用 –platform 标志来指定你想要拉取的镜像架构。
1docker pull --platform <platform> <image>
2docker pull --platform linux/amd64 langgenius/dify-sandbox:0.2.6@sha256:5d1a83f98ec4b2a5a2183c2427c17811063042299898516a7957ad824f28bdec
  1. 启用跨平台支持 在某些情况下,可能需要先启用 Docker 的跨平台支持:
1docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  1. 验证拉取的镜像架构 拉取完成后,你可以使用以下命令来验证镜像的架构:
1docker inspect <image_id> | grep Architecture

检查本地镜像的 Digest

1docker inspect --format='{{index .RepoDigests 0}}' postgres:latest
2
3docker images --digests

将值与 DockerHub 中 Explore / milvusdb/milvus / v2.4.5 (需要点击进入)中的INDEX DIGEST值比对


设置容器开机自动重启

  1. 可以使用 docker update 命令直接修改正在运行的容器的重启策略。
1docker update --restart always my_container
  1. 停止容器后重新启动并设置重启策略
1docker stop my_container
2docker rm my_container
3docker run -d --name my_container --restart always my_image

阿里云容器镜像服务推送

  1. 登录阿里云Docker Registry
1docker login --username=zailiang registry.cn-shanghai.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

  1. 从Registry中拉取镜像
1$ docker pull registry.cn-shanghai.aliyuncs.com/zailiang/milvus:[镜像版本号]
  1. 将镜像推送到Registry
1docker login --username=zailiang registry.cn-shanghai.aliyuncs.com
2docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/zailiang/milvus:[镜像版本号]
3docker push registry.cn-shanghai.aliyuncs.com/zailiang/milvus:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

  1. 选择合适的镜像仓库地址 从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-shanghai.aliyuncs.com 作为Registry的域名登录。

  1. 示例 使用“docker tag”命令重命名镜像,并将它通过专有网络地址推送至Registry。
1docker images
2REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
3registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
4$ docker tag 37bb9c63c8b2 registry-vpc.cn-shanghai.aliyuncs.com/acs/agent:0.7-dfb6816

查看容器网络类型

  1. docker inspect docker inspect <container_id> | grep '"NetworkMode"' 这个命令将返回一个包含网络模式的输出
  2. 使用docker network ls命令: 这将显示所有网络,包括bridgehostnone等。

运行容器增加命令

1docker run -d -rm centos ping baidu.com

compose 运行方式

如果你想在后台运行服务,可以将 -d 标志(表示“分离”模式)传递给 docker compose up , 使用 docker compose ps 查看当前正在运行的内容: 这个 docker compose ps 命令只能在有 docker-compose.yaml 目录下运行

  1. 切换到项目目录
1cd /root/deploy/dify/docker
2docker compose ps
  1. 直接指定 docker-compose.yaml 文件路径
1docker compose -f /root/deploy/dify/docker/docker-compose.yaml ps
  1. 使用 COMPOSE_FILE 环境变量
1export COMPOSE_FILE=/root/deploy/dify/docker/docker-compose.yaml
2docker compose ps

使用 export 命令后,在当前终端会话中,所有后续的 docker compose 命令都会使用这个指定的 docker-compose.yaml 文件。