关于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 参数指定项目的名称
