3. Docker常用命令
三、Docker常用命令
3.1 帮助命令
docker version
:详细版本信息 docker -v
:简略版本信息
docker info
:对docker镜像、容器、宿主机情况等描述
docker --help
:类似于Linux的 man
,列举所有命令及其含义解释。
3.2 镜像命令
docker images [OPTIONS] [ARGS]
:列出本地主机上的镜像
OPTIONS说明:可以通过docker iamges --help
查看OPTIONS
- -a :a表示all,列出本地所有的镜像(含中间映像层)
- -q :只显示镜像ID。
- --digests :显示镜像的摘要信息
- --no-trunc::显示完整的镜像信息
ARGS说明:可以直接写镜像名,比如centos,mysql等等,就是直接查对应的镜像信息。
docker search [OPTIONS]
某个个xxx镜像名字:查镜像
OPTIONS说明: 可以通过docker search --help
查看OPTIONS
- --no-trunc : 显示完整的镜像描述
- --limit int : 显示最多int条信息。
docker pull 某个个xxx镜像名字[:TAG]
:下载镜像
不写版本号默认下载最新版
docker rmi 某个个xxx镜像ID
:删除镜像
我们来删一下hello-world
报错了,因为我们正在使用 hello-world 需要加-f
强制删除,docker rmi -f hello-world
删除单个:docker rmi -f 镜像ID/镜像名[:TAG]
删除多个:docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除全部:docker rmi -f $(docker images -qa)
3.3 容器命令
3.3.1 下载镜像,新建并启动容器
有镜像才能创建容器,这是根本前提(下载一个CentOS镜像演示) docker pull centos
一个centos只有231M。
新建并启动容器,docker run [options] imageID/imageName[:TAG] [command] [arg..]
options说明:
- --name="容器新名字": 为容器指定一个名称;
- -d: 后台运行容器,并返回容器ID,也即启动守护式容器;
- -i:以交互模式运行容器,通常与 -t 同时使用;
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -P: 随机端口映射;
- -p: 指定端口映射,有以下四种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort
现在我们进入了,centos容器。(-i -t可以合在一起写成-it)
3.3.2 列出当前所有正在运行的容器
docker ps [OPTIONS]
OPTIONS说明:
- -a :列出当前所有正在运行的容器+历史上运行过的
- -l :显示最近创建的容器。
- -n:显示最近n个创建的容器。
- -q :静默模式,只显示容器编号。
- --no-trunc :不截断输出。
可以看到正在运行的容器ID,跟我们启动的centos容器一致。这表示我们通过docker在centos上运行了一个centos容器。
3.3.3 退出容器
exit:容器停止退出;
ctrl+P+Q:容器不停止退出
先exit退出我们运行的centos容器实例。然后,我们以centosByDocker为名字,生成一个centos的容器实例:
docker run -it --name centosByDocker centos
然后按ctrl+P+Q,(按了之后还要按一下回车)回到我们的宿主机:
,然后执行docker ps
可以看到容器没有关闭。
3.3.4 启动容器(start 与 run区分开) & 重启容器(restart)
docker start
是启动已有容器,docker run
是新建并启动容器,这里需要区分开。
启动容器:docker start 容器ID/容器Names
即可启动容器。
重启容器:docker restart 容器ID/容器Names
3.3.5 停止容器 & 强制停止容器
停止容器:docker stop 容器ID/容器name
强制停止容器:docker kill 容器ID/容器name
3.3.6 删除已停止的容器
docker rm 容器ID
:删除之前需要停止容器。
docker rm -f 容器ID
:强制删除,容器运行时可以直接删除。
一次性删除多个容器:
- docker rm -f $(docker ps -a -q)
- docker ps -a -q ' xargs docker rm
- docker rm 容器ID1 容器ID2 ..
注:删除的时候不需要吧容器ID写全,写两位就可以,删除前请核对,防止误删。
3.4 重要容器命令
3.4.1 启动守护式容器
命令:docker run -d 镜像名[:TAG]/镜像ID
(后台启动)启动守护容器centos:docker run -d --name centosde centos
问题:然后docker ps进行查看, 会发现容器已经退出,并没有处于运行状态。
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动相应的service即可。例如service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了。所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行。
3.4.2 查看容器日志
命令:docker logs -f -t --tail 数字 容器ID
- -t:表示加入时间戳
- -f:表示跟随最新的日志打印
- --tail 数字:表示显示最后多少条
后台运行centos,循环打印一句话:
docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
查询一下容器日志:docker logs -f -t --tail 10 容器ID/容器NAME
这里加了-f会不停的追加,如果不加就只会打印--tail指定数目的记录。
3.4.3 查看容器内的进程 & 查看容器内部细节
查看容器内进程命令:docker top 容器ID/容器名
查看容器内细节命名:docker inspect 容器ID/容器名
,输出形式为json字符串。
3.4.4 进入正在运行的容器并以命令行交互
docker run -it centos
创建并启动一个centos容器,然后ctrl+p+q退出容器但不关闭。
那么如何再次进入这个容器呢?
- 使用
docker attach 容器ID/容器name
命令即可再次进入容器。 - 使用
docker exec -it 容器ID/容器name /bin/bash
注:exec可以不进入容器,直接返回容器中执行的结果,例如:
docker exec -it 容器ID/容器name ls -l
exec与attach的区别:
attach 直接进入容器启动命令的终端,不会启动新的进程;
exec 是在容器中打开新的终端,并且可以启动新的进程;
通过exec进入的容器,使用exit退出时,容器不会关闭。
关于-i -t 与 -it的区别:i是创建标准io接口,t是伪造tty终端;如果光一个i的话,虽然也可以输入命令得到输出,但结果很不友好,自己可以试试;如果光一个t,就只有一个tty,你输入什么都没有反应,因为你没有开放对应的输入接口;正确的应该是-it,开放接口并创建伪tty。
3.4.5 从容器内拷贝文件到主机上
命令:docker cp 容器ID:容器内路径 目的主机路径
3.5 总结
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
# 截取容器停止时的退出状态值