$ ls ~yifei/notes/

Docker 小技巧

Posted on:

Last modified:

构建更小的镜像

可以使用 dive 来查看每一层的大小。https://github.com/wagoodman/dive

还可以使用 docker-slim 来压缩镜像:https://github.com/docker-slim/docker-slim

日志过大导致磁盘占满

docker 默认使用的是 json driver, 也就是说会把打到标准输出的日志以 json 文件的形式存储起来, 时间一长,如果日志也多的话,很容易就会产生几个 G 的日志。

在 /etc/docker/daemon.json 中增加如下配置:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

监控系统容器状态 ctop

Mac:

brew install ctop

Linux:

sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.5/ctop-0.7.5-linux-amd64 -O /usr/local/bin/ctop
sudo chmod +x /usr/local/bin/ctop

还可以使用 lazydocker: https://github.com/jesseduffield/lazydocker

Docker 删除镜像“Permission Denied”

sudo aa-remove-unknown

这种一般是因为使用了 ubuntu snap 安装的 docker。建议 snap remove docker 然后安装官方版。

Web tty

https://github.com/wrfly/container-web-tty

删除所有停止的容器

docker rm `docker ps -aq`

删除所有没有 tag 的镜像

docker rmi `docker images | grep "^<none>" | awk '{print $3}'`

进入运行中的镜像

docker exec -it CONTAINER_NAME bash

杀死所有运行中的镜像

docker kill $(docker ps -q)

删除所有镜像

docker rmi $(docker images -q)

查看日志的时候只显示最近的

docker logs --tail 10 container

使用 docker 的时候不使用 sudo

sudo gpasswd -a ${USER} docker

然后登出再登录当前用户即可

docker 复制文件

docker cp <containerId>:/file/path/within/container /host/path/target

备份镜像 volume

除了直接用 docker cp 之外,还可以使用 volume-backup 这个镜像。

docker run -v [volume-name]:/volume --rm loomchild/volume-backup backup - > [archive-name]

长时间运行的空环境

docker run -d --name ubuntu ubuntu:22.04 sleep infinity
docker exec -it ubuntu bash

把 docker 镜像移到其他目录

在 /etc/docker/daemon.json 中更改:

{
    "data-root": "/new/path/docker-data-root"
}

复制数据过去

sudo cp -axT /var/lib/docker /new/path/docker-data-root

重启 docker

参考

  1. https://stackoverflow.com/questions/52119832/how-to-tail-a-docker-log-from-the-current-position-in-the-log-without-seeing-the
  2. https://stackoverflow.com/questions/49104733/docker-on-ubuntu-16-04-error-when-killing-container
  3. https://docs.docker.com/config/containers/logging/json-file/
  4. https://mp.weixin.qq.com/s?__biz=MzU4MzA0MTc3Nw==&mid=2247484232&idx=1&sn=88654ca57d06fadb59b7a40a8bb1f338
  5. https://github.com/bcicen/ctop
  6. Docker 的一些坑
  7. https://stackoverflow.com/questions/22049212/copying-files-from-docker-container-to-host
  8. https://github.com/loomchild/volume-backup
  9. https://www.digitalocean.com/community/questions/how-to-move-the-default-var-lib-docker-to-another-directory-for-docker-on-linux
WeChat Qr Code

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.

友情链接: MySQL 教程站