入门篇3:docker常用命令

291 阅读6分钟

帮助启动类命令

  • 启动docker: systemctl start docker
  • 停止docker: systemctl stop docker
  • 重启docker: systemctl restart docker
  • 查看docker状态: systemctl status docker
  • 开机启动: systemctl enable docker
  • 查看docker概要信息: docker info
  • 查看docker总体帮助文档: docker --help
  • 查看docker命令帮助文档: docker 具体命令 --help

镜像命令

docker images

列出本地主机上的镜像。 image.png

各字段说明:

  • repository:镜像的仓库源
  • tag:镜像的标签版本号
  • image id:镜像id
  • created:镜像创建时间
  • size:镜像大小

同一仓库源可以有多个 TAG,代表不同版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像

options说明

  • -a:列出本地所有镜像(含历史映像层)
  • -q:只显示镜像id

docker search [options] 镜像名

搜索镜像 image.png 各字段说明:

  • name:镜像名
  • description:镜像说明
  • stars:点赞数量
  • official:是否是官方的
  • automated:是否是自动构建的

options说明

  • --limited n:只列出n个镜像,默认25

docker pull 镜像名[:tag]

下载镜像

不带tag就获取最新版本

docker system df

查看镜像/容器/数据卷所占的空间 image.png

docker rmi 镜像名/ID:[tag]

  • -f:强制删除

可删除多个

删除全部:

docker rmi ${docker image -qa}

还记得 -q是显示镜像id,-a是显示所有镜像吧

docker悬浮镜像

仓库名和标签都是<none>的镜像,俗称悬浮镜像 dangling image

容器命令

有镜像才能创建容器, 这是根本前提(下载一个CentOS镜像演示)

新建+启动容器

docker run [options] image [command] [arg...]

options说明(有些是一个减号,有些是两个,注意区分。注意大小写)

  • --name=”容器新名字“:为容器指定名称
  • -d:后台运行容器并返回容器ID
  • -i:交互模式运行容器,通常与-t同时使用(-i 即 stdin,-t 即 tty)
  • -t:为容器重新分配一个伪输入终端
  • -P:随机端口映射
  • -p:指定端口映射

启动交互式容器(前台命令行),在容器内执行 /bin/bash 命令

image.png

列出当前正在运行的容器

docker ps [options]

options说明

  • -a:列出当前所有正在运行的容器+历史上运行过的
  • -l:显示最近创建的容器
  • -n:显示最近n个创建的容器
  • -q:静默模式,只显示容器编号

退出容器

  • exit:退出容器,容器停止
  • ctrl+p+q:退出容器,容器不停止

其他命令

  • 启动已经停止运行的容器:docker start 容器名/id
  • 重启容器:docker restart 容器名/id
  • 停止容器:docker stop 容器名/id
  • 强制停止容器:docker kill 容器名/id
  • 删除已经停止的容器:docker rm 容器id(可一次性删除多个)

启动守护式容器

docker -d 容器名/id

image.png
问题:docker ps -a 进行查看, 发现容器已经退出

很重要的要说明的一点: Docker容器后台运行,必须有一个前台进程.

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),会自动退出。

这个是docker的机制问题,比如你的web容器,以nginx为例,正常情况下,配置启动服务只需要启动响应的service即可。例如service nginx start。但是这样做nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.

所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,常见就是命令行模式,表示我还有交互操作,别中断

  • 前台交互式启动: docker run -it centos
  • 后台守护式启动:docker run -d centos

查看容器日志

docker logs 容器id

image.png 把在容器的操作展示了一遍

查看容器内进行的进程

docker top 容器id

image.png

查看容器内部细节

docker inspect 容器id

进入正在运行的容器并以命令行交互

docker exec -it 容器id /bin/bash

重新进入docker容器

docker attach 容器id  

exec和attach的区别

  • attach 直接进入容器启动命令的终端,不会启动新的进程。用exit退出,会导致容器的停止。
  • exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。
  • 推荐使用exec,因为退出容器终端不会导致容器的停止

容器内拷贝文件到主机上

docker cp  容器ID:容器内路径 目的主机路径

image.png

导入/导出容器

  • export 导出容器的内容留作为一个tar归档文件
docker export 容器id > 文件名.tar

image.png

  • import 从tar包中的内容创建一个新的文件系统再导入为镜像
cat 文件名.tar | docker import - 镜像用户/镜像名:版本号

image.png

常用命令总结

image.png

命令描述
attach 当前 shell 下连接指定运行镜像
build   通过 Dockerfile 定制镜像
commit  提交当前容器为新的镜像
cp    从容器中拷贝指定文件或者目录到宿主机中
create   创建一个新的容器,但不启动
diff查看 docker 容器变化
events从 docker 服务获取容器实时事件
exec在已存在的容器上运行命令
export  导出容器的内容流作为一个 tar 归档文件
history  展示一个镜像形成历史
images   列出系统当前镜像
import   从tar包中的内容创建一个新的文件系统映像
info   显示系统相关信息
inspect查看容器详细信息
kill     kill 指定 docker 容器
load     从一个 tar 包中加载一个镜像
login    注册或者登陆一个 docker 源服务器
logout  从当前 Docker registry 退出
logs    输出当前容器日志信息
port     查看映射端口对应的容器内部源端口
pause    暂停容器
ps      列出容器列表
pull     从docker镜像源服务器拉取指定镜像或者库镜像
push  推送指定镜像或者库镜像至docker源服务器
restart  重启运行的容器
rm       移除一个或者多个容器
rmi      移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run      创建一个新的容器并运行一个命令
save     保存一个镜像为一个 tar 包
search   在 docker hub 中搜索镜像
start    启动容器
stop     停止容器
tag      给源中镜像打标签
top      查看容器中运行的进程信息
unpause  取消暂停容器
version  查看 docker 版本号
wait     截取容器停止时的退出状态值