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的计算机软件有病!

同样的配置文件在不同目录下加载,结果就有问题,就算是删除了还是报错!

 

 

 

 

posted @ 2024-06-25 10:08  小匡程序员  阅读(10)  评论(0编辑  收藏  举报