配置docker登陆时命令非明文 环境变量的登录方式(通过/etc/profile设置PASSWORD变量),以下示例从变量读取密码,然后使用STDIN将其传递给docker login命令:
1 echo "$PASSWORD " | docker login --username <xxx> --password-stdin ${REGISTRY_ADDRESS}
Docker命令记录(长期) ctr为镜像打tag 1 ctr images tag oldimage:v1 newimage:v2
docker为镜像打tag 1 docker tag oldimage:v1 newimage:v2
从容器里面拷文件到宿主机 1 docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
从宿主机拷文件到docker容器里面 1 docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
docker内部安装工具/插件/软件 1 2 3 4 5 6 需要知道docker是一个最小体积的"vm",所以里面几乎什么都没有,如果想用些第三方的软件,需要自行安装.如下: 要知道使用的基础是镜像是什么版本(一般是不会ls的,所以如果直接执行yum/apt不行的话,切/usr/bin再执行) centos: yum ubuntu: apt-get alpine: apk
配置docker登陆时命令非明文 环境变量的登录方式(通过/etc/profile设置PASSWORD变量),以下示例从变量读取密码,然后使用STDIN将其传递给docker login命令:
1 echo "$PASSWORD" | docker login --username <xxx> --password-stdin ${REGISTRY_ADDRESS}
删除无用镜像和容器 1 2 3 4 5 6 7 8 9 10 11 12 docker system df docker rm `docker ps -a | grep Exited | awk '{print $1}' ` docker rmi -f `docker images | grep '<none>' | awk '{print $3}' ` docker image prune docker image prune -a docker system prune -a
containerd删除无用镜像 1 2 3 crictl images|grep 'none'|awk '{print $3}'|xargs crictl rmi 或者 crictl rmi --prune
docker crontab删除容器内部文件 1 2 3 RUN echo 'find /tmp -type f -mmin -300 -exec rm -f {} ;' > /opt/script/tmp-cleanup.sh \ && crontab -l | { cat ; echo "0 */5 * * * /bin/bash /opt/script/tmp-cleanup.sh" ; } | crontab -
docker save 用来将一个或多个image打包保存。 如:将本地镜像库中的image1和image2打包到images.tar中
1 docker save -o images.tar image1:v1 image2:v1
docker save 也可以打包container,保存的是容器背后的image.
docker load用于将打包的tar中包含的镜像load到本地镜像库,但不能重命名其中的镜像名。 1 docker load -i images.tar
docker export 打包container文件系统 1 docker export -o the_container.tar container_name
使用 docker import 载入,可以为新镜像指定name和tag 1 docker import the_container.tar new_image_name:tag
总结一下
1 2 3 4 5 docker save保存的是镜像(image),docker export保存的是容器(container); docker load用来载入镜像包,必须是一个分层文件系统,必须是是save的包; docker import用来载入容器包,但两者都会恢复为镜像; docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。 docker export的包会比save的包要小,原因是save的是一个分层的文件系统,export导出的只是一个linux系统的文件目录
查找那个容器输出日志占用最大 1 2 3 4 5 for name in $(docker ps -a | awk '{print $1}' | grep -v CONTAINER); do docker inspect $name | grep LogPath | awk '{print $NF}' | tr -d '",' |xargs du -sh;done for name in $(crictl ps -a | awk '{print $1}' | grep -v CONTAINER); do crictl inspect $name | grep logPath | awk '{print $NF}' | tr -d '",' |xargs du -sh;done
获取镜像,ID,端口号,状态 1 docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}"
列出正在运行的容器 1 docker ps -a -f "status=running"
列出退出的容器 1 docker ps -a -f "status=exited"
查看容器磁盘信息 1 docker ps -a --format "table {{.Size}}\t{{.Names}}"
获取容器的IP 1 docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
获取容器的mac地址 1 docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $(docker ps -a -q)
获取容器name 1 2 docker inspect --format='{{.Name}}' $(docker ps -aq) docker inspect --format='{{.Name}}' $(docker ps -aq)|cut -d"/" -f2
获取容器的Hostname 1 docker inspect --format '{{ .Config.Hostname }}' $(docker ps -q)
获取hostname,ip 1 docker inspect --format 'Hostname:{{ .Config.Hostname }} Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
获取容器的log path 1 docker inspect --format='{{.LogPath}}' `docker ps -a -q`
获取容器的镜像 1 docker inspect --format='{{.Config.Image}}' `docker ps -a -q`
验证overlayfs文件系统挂载(可通过overlayfs/snapshots/{id}来查找对应服务) 1 mount |grep overlayfs|grep {id }