一、镜像常用命令
命令1:查看本地镜像
# 查看本地镜像
docker images
-a :列出本地所有的镜像(含历史映像层);
-q :只显示镜像ID。
同一仓库只存储同一类镜像,一类镜像源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果不指定一个镜像的版本标签,例如你只使用 docker run ubuntu,docker 将默认使用 ubuntu:latest 镜像。
命令2:检索远程镜像
# 查看远程仓库是否有某个镜像
docker search 镜像名
docker search --limit 5 redis
命令3:拉取镜像
# 拉取/下载某个镜像到本地
docker pull 镜像名称[:TAG]
docker pull redis:6.0.8
没有TAG就是最新版,等价于 docker pull 镜像名:lastest
命令4:查看镜像和容器占用空间
#查看镜像/容器/数据卷占用的空间
docker system df
命令5:删除镜像
# 删除某个镜像 -f可强制删除
docker rmi 镜像名或镜像ID
# 删除多个
docker rmi 镜像1:TAG 镜像2:TAG
# 删除所有镜像(从入门到入狱命令)
docker rmi -f $(docker images -aq)
虚悬镜像 dangling image
虚悬镜像是执行docker image查看到的 仓库名和标签都为 的镜像,是docker运行过程中发生一些问题产生的,如果发现这种镜像可以将其删除。
二、容器常用命令
命令1:运行容器
# 新建并运行一个容器
docker run [--option] 镜像名或镜像ID [命令][参数]
--name="容器名" 为容器指定名称,不指定则随机名称;
-d 后台运行并返回容器ID;
-it 以交互模式为容器分配一个伪输入终端;进入终端后,可以使用 exit/ctrl+c 或者ctrl + p + q 退出当前容器终端,区别是前者会停止容器,后者不会停止容器。
-P随机端口映射;
-p 指定端口映射;
如果不加任何可选项,默认前台运行。
例如:
docker run -it ubuntu /bin/bash # 启动一个Ubuntu实例,并执行该容器内的/bin/bash这个Linux命令和用户交互。
注意点:
1、每一个创建出来的容器都是一个简易版的Linux环境,具有Linux最基本的功能(如用户空间、root权限、进程调度、网络连接、一些必要命令如bash、source、apt、yum等是镜像自身包含的,但其他linux命令需要我们自行安装,如vim、top等)。
所以如果我们 docker run redis 创建一个redis容器,并不代表这个容器只能运行redis这一个进程,我们还可以在这个容器中安装nginx、php等软件。
2、当启动一个-d后台运行的容器实例时,该容器内部至少运行一个前台进程,否则该容器会自动关闭(停止运行),因为容器觉得自己已经无事可做,没有必要划水,于是就休息去了。
例如,docker run -d ubuntu 后台创建运行一个 Ubuntu 容器就会马上停止运行(证据是执行docker ps查不到这个Ubuntu容器),原因是该ubuntu系统内没有运行任何一个进程,但该容器只是停止运行而不会被删除。
如果 docker run -d redis 后台运行一个redis 容器(容器在宿主机是后台运行的,但该容器内的redis是前台运行的),则该容器不会停止运行,因为该容器Linux系统内运行了一个redis前台进程。
如果执行 docker run -d redis 'redis-server' '--daemonize yes' '--port 6380',表示启动一个redis 容器,容器内启动一个redis后台进程,则容器会由于没有任何一个前台进程而自动停止运行。
为什么 docker run -it ubuntu bash 进入终端后,执行exit会使该容器停止。首先exit是个shell命令而不是容器命令,exit会关闭当前前台进程,而该ubuntu容器目前只有一个bash前台进程运行。唯一的前台进程都终止了,容器就会终止。
判断容器是否终止的一个标准就是:该容器是否仍有前台进程在运行。
命令2:创建容器
如果我们只想创建一个容器而不想运行该容器,可以使用 create 命令
#创建一个容器
docker create 镜像名或镜像ID
命令3:查看容器列表
# 列出当前所有正在运行的容器
docker ps
-a 列出所有正在运行的容器 + 历史上运行过的容器;
-l 列出最近创建的容器
-n 显示n条;
-q 静默模式,只显示容器ID;
命令4:启动、停止、重启、删除容器
# 启动一个已停止的容器
docker start 容器ID或Name
# 停止一个容器
docker stop 容器ID或Name
docker kill 容器ID或Name # 强制停止
# 重启 restart
# 删除容器
docker rm 容器ID # -f 强制删除正在运行的容器
# 批量删除
docker rm -f $(docker ps -aq)
docker ps -aq | xargs docker rm
PS:请区分容器退出、停止和删除的区别。
docker run 会创建一个容器实例并运行它。
进入容器的终端再返回主机就是退出,但容器仍在运行;
”docker stop 容器ID“ 就是停止容器的运行,但这个容器实例和容器ID仍在,可以通过docker start 该容器的ID 再次启动这个容器;
而删除一个容器则是容器实例被销毁,容器ID不再存在,无法用docker start再次启动该实例,只能通过docker run新建一个实例;
对于一个退出的实例,docker ps -a 仍然能查看到他的ID,并用该ID再次启动该容器实例;
对于一个删除的实例,docker ps -a 则无法显示它的容器ID;
命令5:查看容器日志
# 查看容器日志
docker logs 容器ID
例如执行 docker run -d redis 'redis-server --port 6380' 发现启动容器失败了,就可以docker logs 容器ID 查看redis日志,提示不存在redis-server --port 6380这个命令,原来命令和参数是分开的,应该执行 docker run -d redis 'redis-server' '--port 6380' 才对。
命令6:查看容器进程
# 查看容器内所有进程状况
docker top 容器ID
命令7:对容器内执行命令
# 对某容器执行命令
docker exec -it 容器ID [命令][参数]
# 重新进入已退出的容器
docker exec -it 容器ID bash
# 重新进入已退出的容器2
docker attach 容器ID
两个重新进入容器的命令的区别:
exec 在容器中新创建一个新进程执行bash终端命令,因此exit或者ctrl+c退出终端只是结束该bash进程,不会导致容器停止;
attach是直接进入容器启动命令的终端(例如 docker run -d redis 启动了一个redis前台进程,则attch会让用户直接进入到redis前台进程的终端) ,exit或者ctrl+c会导致容器停止运行。
工作中经常使用exec进入容器,很少用attach。一般用-d后台启动的程序,再用exec进入对应容器实例。
命令8:查看容器细节
# 查看容器内部细节(包括所属镜像,配置,状态,容器卷等)
docker inspect 容器ID
命令9:容器备份
# 拷贝容器上的文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
# 将容器实例导出为tar文件(但这个tar文件不是)
docker export 容器ID > 文件名.tar
# tar文件导入为镜像(只会生成一个本地镜像,但不会生成一个容器实例,仍需要docker run)
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
其中”镜像用户/镜像名:镜像版本号“全是自定义的。
一个导出和导入redis镜像的例子:
docker export 容器ID > my-redis.tar
# 导入my-redis镜像
docker import - zbp/my-redis:v1 < ./my-redis.tar
# 创建 my-redis 容器
docker run -d zbp/my-redis:v1 "redis-server"
需要注意:
1、docker run 一个 export/import 的镜像必须完整的指定 ”镜像用户/镜像名:镜像版本号“ ,否则会认为不存在这个镜像。
2、docker run 一个 export/import 的镜像必须指定一个运行命令,比如这里是”redis-server"表示启动redis实例。
如果不指定一个命令,就会报错:
/usr/bin/docker-current: Error response from daemon: No command specified
PS:还可以使用 save 和 load 命令完成容器的导入和导出,详情请参考文档。
不能用import 命令导入一个 save 命令导出的容器文件。
常用命令总结:
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container s filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值
如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息
张柏沛IT技术博客 > Docker入门系列(二) 查看、删除、拉取镜像,查看、运行、删除容器,docker容器备份常用命令