指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

关于docker悬空镜像

$ docker rmi $(docker images -q --filter "dangling=true")
dangling=true 是 Docker 镜像过滤器的一种选项,用于查找“悬空”(无标签)的镜像。

悬空镜像(Dangling Images)是 没有标签(tag)的镜像,通常出现在:
重新构建镜像时,旧的中间层镜像未被删除
docker build 失败后,留下未使用的临时镜像
docker tag 被更新,导致旧镜像的 tag 失效

如果没有悬空镜像,docker rmi 可能会报错 must specify at least one image
更安全的删除:
$ docker images -q --filter "dangling=true" | xargs -r docker rmi

定期清理悬空镜像,以释放 Docker 存储空间


// 以下是两种场景
$ docker image ls
REPOSITORY                                                                     TAG               IMAGE ID       CREATED             SIZE
local-nuxt-nginx-my-nginx                                                      latest            a910ae53e1a8   About an hour ago   192MB
localhost:5000/my-vue-app                                                      latest            4a1252aaebb4   4 hours ago         418MB
localhost:5000/my-vue-app                                                      main              4a1252aaebb4   4 hours ago         418MB


$ docker image ls
REPOSITORY                                                                     TAG               IMAGE ID       CREATED              SIZE
local-nuxt-nginx-my-nginx                                                      latest            165e5bdc91f1   About a minute ago   192MB
<none>                                                                         <none>            a910ae53e1a8   About an hour ago    192MB
localhost:5000/my-vue-app                                                      latest            4a1252aaebb4   4 hours ago          418MB
localhost:5000/my-vue-app                                                      main              4a1252aaebb4   4 hours ago          418MB
nginx                                                                          latest            97662d24417b   9 days ago           192MB

如下是一个nginx的启动脚本:

#!/bin/bash
set -u

cd "$(dirname "$0")"

# the local user's UID & GID are required to build the php Docker container
export USER_ID=$(id -u)
export GROUP_ID=$(id -g)

if [[ $(docker images -q --filter "dangling=true") ]]; then
    echo "Removing untagged Docker images..."
    docker images -q --filter "dangling=true" | xargs -r docker rmi
fi

echo "Building Docker images..."
#docker compose build my-nginx //不需要这个,在 up 的时候加上 --build
docker compose build my-nginx

# compose up the stack in detached mode and start to follow the logs output
echo "Starting Docker Compose stack in detached mode..."
#clear
#docker-compose up -d --build
docker-compose up -d

上面有两种启动nginx的方式

1>.
直接 docker-compose up -d --build
2>.
docker compose build my-nginx
docker-compose up -d

这两种方式都会重新构建nginx的镜像,然后nginx服务每次都是最新的, 但是有时候会出现,image tag 为null的情况,就需要在启动之前,通过上面的if条件做个判断。

还有一个启动方式:

docker-compose up,这个会服用之前生成的镜像,即使Dockerfile文件发生了变化,也不会重新build,所以要避免这个情况,一般会单独在前面县buildf一次

通过自定义的Dockerfile build生成的镜像的默认命名规则如下:

<项目名>_<服务名>:<tag>

项目名(Project Name)默认是 docker-compose.yml 所在目录的名称。
服务名(Service Name)来自 docker-compose.yml 里的 services 定义。

如果想 自定义镜像名称,可以在 docker-compose.yml 里添加 image:

services:
my-nginx:
build: .
image: my-nginx:latest   # 指定镜像名称,避免默认前缀

如果想 自定义项目名称,可以运行:

docker-compose -p customname up -d --build //通过-p 参数指定项目的名称