文章目录
1.系统性文档
1.Docker 命令大全(菜鸟教程)
2.docker reference(官方文档))
2.删除
批量删除
1.删除异常停止的docker容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
2.删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
3.导入导出
镜像导入导出
1.镜像导出
# 模板
docker save [OPTIONS] IMAGE [IMAGE...]
# --output , -o : Write to a file, instead of STDOUT
# 实例
docker save -o openjdk8stretch.tar openjdk:8-jdk-stretch
# 官方提供的实例
$ docker save busybox > busybox.tar
$ ls -sh busybox.tar
2.7M busybox.tar
$ docker save --output busybox.tar busybox
$ ls -sh busybox.tar
2.7M busybox.tar
$ docker save -o fedora-all.tar fedora
$ docker save -o fedora-latest.tar fedora:latest
# 还可以使用gzip
docker save myimage:latest | gzip > myimage_latest.tar.gz
# 还可以按选择的镜像一起打包
$ docker save -o ubuntu.tar ubuntu:lucid ubuntu:saucy
2.镜像批量导出
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o filename.tar
参考地址:
3.镜像导入
# 使用docker load导入由docker save导出的镜像
# 模板
docker load [OPTIONS]
# --input , -i:指定导入的文件,代替 STDIN。
# --quiet , -q : 精简输出信息。
# 导入镜像
docker load < filename.tar.gz
# 或使用如下命令导入镜像
docker load --input filename.tar
容器导入导出
# 导入
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
# 导出
docker export [OPTIONS] CONTAINER
4.进入容器命令
# 通过 exec 命令对指定的容器执行 bash(能进入容器):
docker exec -it 9df70f9a0714 /bin/bash
5.批量启停
# 启动所有容器的命令
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 关闭所有的容器命令
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 删除所有已经停止的容器
docker rm $(docker ps -a -q)
# 删除所有镜像
docker rmi $(docker images -q)
# 删除所有未打 dangling 标签的镜像
docker rmi $(docker images -q -f dangling=true)
# 强制删除镜像名称中包含“doss-api”的镜像
docker rmi --force $(docker images | grep doss-api | awk '{print $3}')
# 强制删除镜像名称中包含“none”的镜像,与上面类似只是使用了xargs作为传值
docker images|grep none|awk '{print $3 }'|xargs docker rmi
6.批量删除冗余无用docker数据
# docker删除所有未使用的容器,删除所有未使用的镜像、网络
docker system prune -a -f
# docker删除所有未使用的镜像
docker image prune
# docker删除所有未使用的容器(删除所有处于非运行状态的容器)
docker container prune
# docker删除所有未被挂载的卷:
docker volume prune
# docker删除所有未使用的网络
docker network prune
附:补充命令
本部分摘自于参考文献四
- 创建docker-search.sh脚本,内容如下
#!/bin/bash
API="https://registry.hub.docker.com/v1/repositories"
DEFAULT_NAME="nginx"
DEFAULT_TIMEOUT=3
function Usage(){
cat << HELP
Usage: docker-search NAME[:TAG]
docker-search list all tags for docker image on a remote registry.
Example:
docker-search (default nginx)
docker-search nginx
docker-search nginx:1.15.8
docker search nginx | docker-search
docker search nginx | docker-search :1.15.8
echo nginx | docker-search
echo nginx | docker-search :1.15.8
HELP
}
ARG=$1
if [[ "$ARG" =~ "-h" ]];then
Usage
exit 0
fi
function ParseJson(){
tr -d '[\[\]" ]' | tr '}' '\n' | awk -F: -v image=$1 '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
}
function GetTags(){
image=$1
tag=$2
ret=`curl -s ${API}/${image}/tags`
tag_list=`echo $ret | ParseJson ${image}`
if [ -z "$tag" ];then
echo -e "$tag_list"
else
echo -e "$tag_list" | grep -w "$tag"
fi
}
if [ -z $ARG ] || [[ ${ARG:0:1} == ":" ]];then
if [ -x /usr/bin/timeout ];then
images=`timeout $DEFAULT_TIMEOUT` awk '{print $1}' | grep -v "NAME" || echo $DEFAULT_NAME
else
images=`awk '{print $1}' | grep -v "NAME"`
fi
else
images=`echo $ARG | awk -F: '{print $1}'`
fi
tag=`echo $ARG | awk -F: '{print $2}'`
for i in ${images}
do
tags=`GetTags $i $tag`
count=`echo $tags | wc -w`
if [[ $count -gt 0 ]];then
echo -e "IMAGE [$i:$tag]:"
echo -e "$tags"
echo
fi
done
- 使用
chmod +x docker-search
./docker-search redis
参考地址
1.docker 批量删除无用的容器或镜像
2.harbor批量导出镜像
3.Docker容器进入的4种方式
4.命令行获取docker远程仓库镜像列表