扩展资料
//一些dokcer 维护命令 便于去解决日程的管理问题,当然这些只是基本 很多问题可能并不能解决
还是要深入学习 时间久了才会明白
重点提示
Docker的所有相关文件,包括镜像、容器等都保存在/var/lib/docker/目录中
容器和镜像不是一个东西 删除前需要保证容器是停止
删除镜像和容器的命令不一样。 docker rmi ID ,其中 容器(rm) 和 镜像(rmi)
apt-get命令会进入交互模式 在docker环境中是无法响应这种交互的 apt-get命令 要带上-y参数
image相当于类,container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image
当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
docker容器启动时的root用户的密码是随机分配的
删除 清理 镜像 删除前需要保证容器是停止 顺序需要先删除容器
//不同状态的镜像
已使用镜像(used image): 指所有已被容器(包括已停止的)关联的镜像。即 docker ps -a 看到的所有容器使用的镜像。
未引用镜像(unreferenced image):没有被分配或使用在容器中的镜像,但它有 Tag 信息。
悬空镜像(dangling image):未配置任何 Tag (也就无法被引用)的镜像,所以悬空。这通常是由于镜像 build 的时候没有指定 -t 参数配置 Tag 导致的
--storage-opt dm.basesize=20G表示限制单个容器最多占用 20G 空间,将应用于任何新建容器
https://docs.docker-cn.com/engine/userguide/storagedriver/device-mapper-driver/
容器中运行命令
docker run image_name echo "hello word" //在容器中运行"echo"命令,输出"hello word"
docker run -i -t image_name /bin/bash // 交互式进入容器中
docker run image_name apt-get install -y app_name //在容器中安装新的程序
对容器的操作
//docker 操作参数 Name/ID (rm、stop、start、kill、logs、diff、top、cp、restart、attach)
容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]
服务
service docker status //查看之前装的docker状态
service docker restart // 可选重启
service docker stop
docker stop Name/ID
docker start Name/ID
docker restart Name/ID
docker kill Name/ID
Docker 的配置文件位置: https://ninghao.net/blog/4488
ls /lib/systemd/system | grep docker
ls /usr/lib/systemd/system | grep docker
查
docker logs Name/ID //获取容器日志
docker logs -f <容器名orID> //获取容器日志
docker diff Name/ID //容器里面被改变的文件或者目录 A 增加的,D 删除的,C 被改变的
docker top Name/ID //容器里面的进程信息
docker logs <容器名orID> 2>&1 | grep 'User: ' | tail -n1 //查看容器的root用户密码 启动时root用户的密码是随机分配的
docker version // 查看版本
docker info // Data Space Total
docker login //登录docker ID
docker images // 查询所有镜像
docker ps -a //列出所有的rq
docker ps -l //列出最近一次启动的rq 获取容器id 最后运行命令
docker ps //列出当前所有正在运行的rq
docker inspect 1d03b0fd672c //获取某容器(ID)更加详细的信息
docker kill $(docker ps -a -q) //杀死所有正在运行的容器
docker system df //空间占用情况 镜像(Images)、容器(Containers)和本地卷(Local Volumes)等
docker system df -v //进一步查看空间占用细节
docker system prune //清理关闭的容器、无用的数据卷和网络dangling镜像
docker system prune -a //清理得更加彻底,可将没有容器使用Docker镜像都删掉
docker search discourse //在docker index中搜索镜像 是官方镜像和所有个人公共镜像
docker volume ls -qf dangling=true //查看
改
docker cp ID:/container_path to_path //容器里面拷贝文件/目录到本地
docker build -t <镜像名> <Dockerfile路径> //构建自己的镜像 根据Dockerfile 构建出一个容器
删
docker system prune --help //自动删除命令帮助
docker system prune //自动清理 已停止的容器\未被任何容器所使用的卷\未被任何容器所关联的网络\所有悬空镜像\
docker system prune -a //自动清理 不带a未被使用的镜像不会被删除。添加-a 或 --all参数后可以一并删除
docker rm $(docker ps -a -q) //删除所有容器
docker rm <容器名orID> //删除单个容器
docker rmi 6dc7031db3f4 //j
docker rmi $(docker images -q) //删除所有镜像
docker rmi $(docker images | grep none | awk '{print $3}' | sort -r) //删除所有镜像
docker ps -a | grep Exit | cut -d ’ ’ -f 1 | xargs docker rm //删除所有关闭的容器
docker rmi (docker images | grep "<none>" | awk "{print3}”) //删除所有dangling数据卷(即无用的volume) 或:
docker rmi $(docker images | grep "<none>" | awk "{print $3}") //就是未打 dangling 标签id为<None>的image
docker rmi $(docker images -q -f dangling=true) //删除所有未打 dangling 标签的镜像
docker rm $(docker ps -a -q) //删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉)
docker volume rm $(docker volume ls -qf dangling=true) //删除所有未被任何容器关联引用的卷
docker volume rm $(docker volume ls -q) // 跟上面差不多
增
//当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
docker save image_name -o file_path //保存镜像到一个tar包 docker save image_name > /home/save.tar
docker load -i file_path //加载一个tar包格式的镜像 docker load < /home/save.tar
cat container1.tar |docker import - container1:new //docker import 可以导入容器tar文件为 镜像
docker pull learn/tutorial //拉取镜像 下载镜像 docker pull image_name
docker run learn/tutorial apt-get install -y ping //在容器中安装新的程序
docker push new_image_name //发布镜像
运
docker run --name redmine -p 9003:80 -p 9023:22 -d -v /var/redmine/files:/redmine/files -v /var/redmine/mysql:/var/lib/mysql sameersbn/redmine
//运行一个新容器,同时为它命名、端口映射、文件夹映射。以redmine镜像为例
docker run -i -t --name sonar -d -link mmysql:db tpires/sonar-server
sonar
一个容器连接到另一个容器, 容器连接到mmysql容器,并将mmysql容器重命名为db。这样,sonar容器就可以使用db的相关的环境变量了。
~~~~~ 实际需求操作~~~~~~~~
限制容器的日志大小
//查看镜像容器大小
du -hs /var/lib/docker/
真正占用磁盘空间的是nginx的日志文件 truncate命令,可以将nginx容器的日志文件“清零” 文件名需要du找出来
truncate -s 0 /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53/*-json.log
//要从根本上解决问题,需要限制nginx容器的日志
nginx:
image: nginx:1.12.1
restart: always
logging:
driver: “json-file”
options:
max-size: “5g”
重启nginx容器之后,其日志文件的大小就被限制在5GB
//查看各个日志的文件大小
ls -lh $(find /var/lib/docker/containers/ -name -json.log)
cat /dev/null > -json.log //删除 当然你也可以通过rm删除后重启docker
#!/bin/sh
echo "==================== start clean docker containers logs =========================="
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "==================== end clean docker containers logs =========================="
// 清理日志脚本
参考文献:
http://blog.csdn.net/mofiu/article/details/79021550
https://www.rails365.net/articles/fen-xiang-docker-ni-bu-de-bu-zhi-dao-de-ji-zhong-la-ji-hui-shou-de-fang-fa
http://blog.csdn.net/huangjin0507/article/details/51162869
http://blog.csdn.net/u011350541/article/details/50608422 秒死
http://blog.csdn.net/we_shell/article/details/38368137 常用命令
http://blog.csdn.net/wsscy2004/article/details/25878363 常用命令
http://blog.csdn.net/permike/article/details/51879578 常用命令 //较详
http://blog.csdn.net/raindaywhu/article/details/52946740 镜像存储
http://blog.csdn.net/feiniao8651/article/details/60329456 删临时镜像
http://blog.csdn.net/kunloz520/article/details/53839237 docker run 参数
http://blog.csdn.net/horsefoot/article/details/51731543 限制容器资源性能
https://www.jianshu.com/p/7aeafe2ea792 空间占用清理
https://www.tuicool.com/articles/veIj6vy Discourse(Docker) 硬盘不够用