Docker
########## 注意:安装的时候一定按照官方的安装方式,别用yum install docker,不然会坑死你 ##########
sudo systemctl start docker # 启动 Docker
sudo systemctl stop docker
systemctl enable docker # 开启自启动
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose up
docker volume prune #清理所有无用数据卷
docker image rm
docker rmi -f 54fcd8fd38cc # 删除多个
#删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
docker rmi -f `docker images | grep 'laradock' | awk '{print $3}'`
docker rmi $(docker images | grep "none" | awk '{print $3}')
#清理所有悬挂(<none>)镜像:
docker image prune or docker rmi $(docker images -qf "dangling=true")
docker rm `docker ps -a | grep Exited | awk '{print $1}'` #删除异常停止的docker容器
docker image prune -f -a #删除所有不使用的镜像
docker container prune #清理所有停止运行的容器
docker volume prune #清理没有被占用的数据卷
##### 容器
docker rm `docker ps -a | grep scrapinghub/splash | awk '{print $1}'`
docker rm `docker ps -a | awk '{print $1}'`
docker ps -a | grep splash-haproxy:latest | awk '{print $1}' | xargs docker stop # xargs 将前面管道输出的字符串作为命令行参数
docker debug 故障排查
docker info ## 检查 Docker 是否正在运行
journalctl -xe # 查看docker 服务器日志
docker logs -f 0edef2bdd398 -n 10
docker stats # 查看容器负载
docker inspect NAME|ID # 获取容器/镜像的元数据
### 查看 Docker 守护进程日志
### Docker 守护进程的配置和故障排除
###
dev
# docker 容器连接本机mysql
docker.for.mac.localhost:3306
docker swarm
docker-machine ip MACHINE_VM # 获取Docker主机的IP地址
docker system info #查找消息,确保启用了Swarm
# 1、初始化
docker swarm init
docker swarm init --advertise-addr <MANAGER-IP> # docker swarm init --advertise-addr 45.136.130.166
# 2、加入节点
docker swarm join
docker node ls
docker-machine create --driver virtualbox myvm1 #创建虚拟机
docker-machine create --engine-registry-mirror=https://6ozq6866.mirror.aliyuncs.com -d virtualbox default # 阿里镜像加速
docker swarm join-token manager #获取 manager节点 的token
docker swarm join-token worker #获取 worker节点 的token
docker-machine ssh <machine-name> #与VM通信中
docker-machine env <machine> #该命令将当前shell配置为与VM上的Docker守护程序通信(它允许您使用本地docker-compose.yml文件“远程”部署应用程序,而无需将其复制到任何位置)
eval $(minikube docker-env) #要在Mac / Linux主机上使用Docker守护程序
# 3、服务
docker service create
docker service create -p 80:80 --name web nginx:latest # 创造服务
docker service ls
# 查看日志
docker service logs xxx -t -f --tail=10
docker service logs xxx -t --tail=10
docker service logs xxx -t --since "2023-02-24T00:38:00"
docker service inspect redis # 服务详情
docker service inspect --pretty <SERVICE-ID> # 以易于阅读的格式显示有关服务的详细信息
docker service ps <SERVICE-ID> #以查看哪些节点正在运行服务
---
docker stack deploy -c docker-compose.yml --with-registry-auth stackname
docker stack ls #查看服务
docker stack down stackname #移除服务
---
docker service rm SERVICE # docker service rm redis
docker service scale
docker service scale web=15 #扩展服务
docker service scale web=10 #缩小规模
------ 滚动更新image
docker service update --image hkccr.ccs.tencentyun.com/globalso/transapis:v2021120822 --with-registry-auth servicename
docker system prune -a -f # 清理旧容器及不用的镜像
---------- docker-machine ----------
docker-compose
docker-compose up -d # 在后台运行服务
docker-compose ps # 查看当前正在运行的内容
docker-compose --help
docker-compose logs -f -t --tail=10 # 查看日志
docker-compose 的4中错误方式
问题1:使用主机网络, docker run 启动容器,推荐用docker-compose up -d 启动,会生成一个独立网络。
问题2:强端口绑定到 0.0.0.0 上,例如:-8080:8080;推荐用127.0.0.1:8080:8080
日志文件太大
解决 Docker 日志文件太大的问题 官网Configure logging drivers Docker修改daemon.json后无法启动的问题
#全局配置 创建或修改文件 /etc/docker/daemon.json,并增加以下配置
vi /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "1"
}
}
# 随后重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
如果您的 Docker 版本是 23,而且您发现 /var/lib/docker/overlay2 目录占用了太多空间,以下是一些可能有用的步骤:
清理无用的镜像和容器
运行以下命令来列出所有已停止的容器:
docker ps -a | grep Exited | awk '{print $1}'
运行以下命令来删除所有已停止的容器:
docker ps -a | grep Exited | awk '{print $1}' | xargs docker rm
运行以下命令来列出所有未使用的镜像:
docker images | grep "<none>" | awk '{print $3}'
运行以下命令来删除所有未使用的镜像:
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
清理 Docker 系统日志
Docker 会在 /var/lib/docker/overlay2 目录中存储日志文件,如果这些日志文件变得很大,您可以通过清理它们来释放空间。
运行以下命令来清理 Docker 系统日志:
sudo journalctl --vacuum-size=1G
这将删除超过 1GB 的 Docker 日志文件。
清理 Docker 缓存
Docker 会在 /var/lib/docker/overlay2 目录中存储缓存文件,您可以通过清理这些缓存文件来释放空间。
运行以下命令来清理 Docker 缓存:
docker system prune -a
这将删除所有未被使用的缓存文件和镜像。
使用 Docker 数据卷
如果您有大量的数据需要存储在 Docker 中,建议使用 Docker 数据卷来将数据存储在主机文件系统中,而不是存储在容器中。
运行以下命令来创建 Docker 数据卷:
docker volume create mydata
然后,您可以在运行容器时将数据卷挂载到容器中:
docker run -v mydata:/data myimage
这将把数据卷挂载到容器中的 /data 目录中。
希望这些方法能够帮助您清理 /var/lib/docker/overlay2 目录并释放空间。