Docker更新镜像-myself

一、我找到并使用过的方法

1.对于使用docker命令部署的应用

查看容器名字

1
docker ps

查看是否有挂载卷,以及容器映射到本地的路径

1
docker inspect 容器名 --format '{{json .Mounts}}'

1.1 第一种情况:没有挂载

image|690x43

  • 拉取最新镜像
    1
    docker pull 镜像名称:标签
    一般 xxx:latest
  • 停止并删除旧容器
    1
    docker stop 容器名
    1
    docker rm 容器名
  • 删除旧的镜像(可选)
    1
    docker rmi xxx:旧标签

    如果镜像一直都是名为xxx:latest的话就别这样删,我是搭配docker desktop for Windows使用的,旧的镜像会变成灰色显示未使用,直接点击删除即可

  • 使用新的镜像启动容器
    1
    docker run -d --name 新容器名称 -p port_yourself_wanted:container_port xxx:tag

    在desktop点一下run就行


1.2第二种情况:有挂载

数据卷挂载

image|690x34

绑定挂载

image|690x50

  • 备份(可选)——以veloera为例
    1
    2
    tar -czvf veloera-backup-logs.tar.gz -C /mnt/d/Veleora/veloera/logs .
    tar -czvf veloera-backup-data.tar.gz -C /mnt/d/Veleora/veloera/data .
    ——以openwebui为例
    1
    docker cp open-webui:/app/backend/data ./open-webui-backup
  • 停止并删除旧容器
    1
    2
    docker stop 容器名
    docker rm 容器名
  • 拉取新镜像
    1
    docker pull xxx:latest
  • 启动新容器并直接挂载旧数据

    绑定挂载

    1
    2
    3
    4
    5
    6
    docker run -d \
    --name <新容器名称> \
    -p 3000:8080 \
    -v /mnt/d/Veleora/veloera/logs:/app/logs \
    -v /mnt/d/Veleora/veloera/data:/data \
    <镜像名称>:<版本>

    数据卷挂载

    1
    docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main
    OpenWebUI文档参考

    绑定挂载和数据卷挂载(不使用-v)在删除旧容器时仍保留

如果采用备份

1.创建新的数据卷

1
>docker volume create open-webui-new

2.备份数据恢复到新数据卷(麻烦)
3.启动新容器


  • 直接恢复到宿主机目录
    绑定挂载:
    解压
    1
    2
    tar -xzvf veloera-data-backup.tar.gz -C /path/to/data
    tar -xzvf veloera-logs-backup.tar.gz -C /path/to/logs
    1
    2
    3
    4
    5
    docker run -d --name 容器名 \
    -p 3000:8080 \
    -v /path/to/data:/app/data \
    -v /path/to/logs:/app/logs \
    xxx:latest
    数据卷挂载:
    创建新容器
    恢复备份
    1
    docker cp ./open-webui-backup open-webui-new:/app/backend/data

2.使用docker compose部署的应用

2.1到docker-compose所在文件夹下

1
docker-compose pull

2.2重启容器

1
docker-compose up -d --remove-orphans

2.3删除旧镜像(可选⚠)

1
docker image prune 

不建议直接用,还是指定某个没用的镜像吧,我用的desktop点一下删除就完了(删错了当我倒霉)

总结:

1.尽可能避免使用docker run运行容器,所有容器尽可能使用 <任意路径>/<软件名称>/ docker-compose.yaml,挂载的文件使用本地路径./映射,
2.需要迁移的时候整个文件夹打包带走,docker compose up -d运行即可。


腾讯云参考

二、找到但没用过的方法

1.使用Portainer面板

2.使用watchtower