docker使用笔记
配置国内镜像
由于很多docker镜像源都在国外,国内访问速度相对比较慢,并且极易断开。我们配置国内代理后会加速下载。我们需要修改或新建配置文件
/etc/docker/daemon.json,执行tee命令将配置文件内容写入文件中。
tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://docker.nju.edu.cn" ] } EOF
将配置文件加载到daemon中,并执行重启命令。
systemctl daemon-reload
systemctl restart docker
查看docker配置信息,检查镜像是否有生效
docker info
初始化docker状态:
这个命令很危险:删除所有容器和镜像,缓存;遇到文件损坏,不理解的报错有用,重置docker后需要重新下载或配置镜像
docker system prune -af
磁盘空间思路排查:
### docker system df ## docker system prune 命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。 ## 命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了,所以使用之前一定要想清楚吶。 docker system prune -a ### 强制清理容器磁盘空间 docker system prune -af
查找
## docker info
# 进入overlay2目录 cd /var/lib/docker/overlay2
## 查看1G以上的文件大小 u -sh * |grep 'G' | sort
## 查看占用空间的pid,以及对应的容器名称 docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep "f9228ed87e0f82a8cf5cefb88c9388e69fee2a2889bbd6204230c39a92d32beb" ### 解决方法(删除对应的容器和对应镜像) docker stop “镜像名称” && docker rm “镜像名称” && docker rmi “image_id”
清理容器日志
## cd /var/lib/docker/ du -sh * # 清理 > edf477404e43456bfe3ddad2041963e84b54523e5b6f8a2fe31e020290cdbc05-json.log
其他问题
在centos镜像容器,使用systemctl 管理服务出错:
参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/115337684
Failed to get D-Bus connection: Operation not permitted
解决:
#先把原先创建的容器停止服务并移除
docker stop centos7
docker rm centos7
#以特权模式运行容器
docker run -d --name centos7 --privileged=true centos:7 /usr/sbin/init
原因:
Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。
再说到systemd,这个套件已经成为主流Linux发行版(比如CentOS7、Ubuntu14+)默认的服务管理,取代了传统的SystemV风格服务管理。systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!
因此,请遵守容器设计原则,一个容器里运行一个前台服务!
容器内访问宿主机的服务(容器使用的是bridge网络)
1,查看容器所在的bridge网络network:docker inspect con_name
2,通过访问网关ip就能访问到宿主服务:docker network inspect net_name
关于docker-compose up启动时报文件编码错误的经历(浪费我2小时)
这个绝对是玄学,或者说是计算机过于精密导致的脆弱性,并不是什么字符错误,也不是自己的错,就是tmd的计算机软件有病!
同样的配置文件在不同目录下加载,结果就有问题,就算是删除了还是报错!