前言
用于记录自己在使用docker时使用的常用命令以及示例。
镜像
镜像拉取
docker pull ${docker-registry/}${repo}:${tag}
不指仓库地址时,默认会使官方仓库,即docker.io/library
不指定tag时,默认为latest
镜像标签
docker tag ${imageid} ${docker-registry/}${repo}:${tag}
给镜像重命,标签不能重复。
当推送镜像前需要将仓库名修改成想推送的仓库地址
镜像导出导入
docker save ${image} > ${tar} docker load ${tar}
将镜像文件导出成tar包,或者是将tar包镜像导入
删除镜像
docker rmi ${image}
被正在运行的容器所使用的镜像无法删除,可以先停止容器然后强制删除
docker rmi -f ${image}
无法强制删除存在子镜像的父镜像(即dockerfile中FROM命令引入的镜像为当前镜像的父镜像),如果想删除此类镜像,需要先删除其所有子镜像。这里提供一个脚本可列出某镜像的所有子镜像
#!/bin/bash parent_id=$1 for i in $(docker images -q) do if [ "$1" != "$i" ];then docker history $i | grep -q $1 && docker images | grep $i fi done | sort -u
将以上内容保存为findchildimage.sh,运行findchildimage.sh ${imageid}。
容器
启动容器
前台,后台启动
docker run --rm -it ${image} docker run --rm -d ${image}
--rm 表示容器停止运行后删除容器
--it 表示通过控制台交互方式运行容器
-d 表示后台运行容器
端口映射,及目录挂载
docker run -v ${host_path}:${container_path} -p ${host_port}:${container_port}
-v 表示将主机的目录挂载到容器对应目录 (特别注意,如果是想到把容器里已有的文件放到外部进行读写,则应该先将容器里的文件拷贝出来到待挂载的目录后,再进行挂载)
-p 表示将主机的端口映射到容器的端口 (一般当容器提供外部服务时需要加入该参数。这样外部通过访问主机的端口,即可访问到容器内对应的端口,默认为tcp协议类型)
入口指定
有些时候不想运行镜像里面的入口程序或命令,可以通过以下方式强制更改。下面的例子是将入口强制修改为sh。
docker run --rm -it --entry-point /bin/sh ${image}
停止,重启容器
docker restart|stop ${container}
进入容器
常用进入容器的sh的命令
docker exec -it ${container} /bin/sh
参考:
https://docs.docker.com/engine/reference/run/