Docker 容器命令

124 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

帮助命令

docker --help        帮助命令

docker version       查看当前 docker 版本信息

docker info          查看当前 docker 运行状态等信息.

info 展示信息:

[root@localhost ~]# docker info
Containers: 5                #容器数量
Running: 1                    #运行中的容器数量
Paused: 0                
Stopped: 4            
Images: 2                        #镜像数量
Server Version: 18.06.1-ce
...

镜像命令

列表/查询

docker images 列出本机上的所有镜像

选项说明:

  • REPOSITORY: 表示镜像的仓库源.
  • TAG:镜像的标签. 同一仓库源可以有多个 TAG, 代表这个仓库源的不同个版本, 使用 REPOSITORY:TAG 来定义不同的镜像.如果不指定一个镜像的版本标签, docker 将默认使用 :latest 标签.
  • IMAGE ID:镜像 ID.
  • CREATED:镜像创建时间.
  • SIZE:镜像大小.

\

docker search 镜像名 搜索指定名称的镜像, 也可以在网站 hub.docker.com 上直接搜索需要的镜像.

构建

dicker build 使用 Dockerfile 文件构建新镜像.

docker commit 容器名 镜像名 以容器为模板, 创建新镜像.

docker history 镜像名 查看指定镜像的创建历史.

下载/上传

docker pull 镜像名:tag 下载指定版本 tag 的镜像.

  • 如果是从顶层仓库中下载, 直接写镜像名即可.
  • 如果是从用户仓库中下载, 需要添加用户名. eg:docker pull 用户名/镜像名:tag
  • 下载下来的本地镜像都保存在 Docker 宿主机的 /var/lib/docker 目录下. 每个镜像都保存在 Docker 所采用的存储驱动目录下面, 如 aufs 或者 devicemapper.
  • 也可以在 /var/lib/docker/containers 目录下面看到所有的容器.

\

docker push 镜像名:tag 上传镜像到仓库

Docker 会上传镜像的每一层, 但是如果 Docker Hub 上已经有了的镜像层不会被上传. 比如 : 如果我们的镜像是基于 base 镜像的, 实际上传的只有新增加的镜像层.

docker login -u 用户名 -p 密码 登录镜像仓库, 不指定地址, 默认为官方 Docker Hub

docker logout 登出

删除

docker rmi 镜像名 删除宿主机上指定名称的镜像.

注意 : 如果一个镜像有多个 tag, 只有当最后一个 tag 被删除时, 镜像才被真正删除. 删除其中一个标签, 只是删除了 latest tag, 镜像本身没有删除.

  • 删除单个镜像 docker rmi -f 镜像 ID
  • 删除多个镜像 docker rmi -f 镜像名1:TAG 镜像名2:TAG
  • 删除全部镜像 docker rmi -f $(docker images -qa)

重命名

docker tag 旧镜像名 新镜像名 修改镜像名. 原镜像名还存在, 新镜像名也存在, 就好像将旧的镜像复制了一份, 然后重命名为新的镜像名.

标签 TAG

docker tag 源镜像 镜像TAG 给本地镜像打标签, 一个镜像可以有多个标签. 就好像一个人可以有多个外号一样.

可以看到上面三个镜像的 IMAGE ID 都是一样的, 所以如果想要删除其中一个, 不能使用 ID 来删除, 需要使用 REPOSITORY:TAG 来删除, 删除掉的镜像, 对其他同名 ID 的镜像无影响.

导入/导出

docker save 镜像id > /xx/xx.tar 导出镜像文件

docker load < /xx/xx.tar 导入镜像文件

容器命令

注意 : 容器的生命周期依赖于启动时执行的命令, 只要该命令不结束, 容器也就不会退出.

列表

docker ps 参数 列出所有容器, 默认只会显示所有正在运行的容器.

参数 :

  • -a 列出当前所有正在运行的容器 + 历史运行过的容器.
  • -l 显示最近创建的一个容器.
  • -n 数字x 显示最近创建的 x 个容器.

运行

docker run 参数 镜像名 [command] [arg] 新建并启动一个容器 ( 根据镜像名新建容器, 并且启动 )

参数:

  • --name="xxx" 为容器指定一个名称. 如果不指定, docker 会自动为容器分配名字.
  • -d 后台运行容器, 并返回容器 ID, 也即启动守护式容器.
  • -it 以交互模式运行容器, 并为容器重新分配一个伪输入终端.
  • -P 随机端口映射. ( 大写 )
  • -p 指定端口映射 ( 小写 ), 有以下四种式
    • :ip:hostPort:containerPort
    • ip::containerPort
    • hostPort:containerPort
    • containerPort
  • --restart=always 该参数表示无论容器因何种原因退出(包括正常退出), 都会立即重启.但如果容器是因为执行 docker stop 或 docker kill 停止, 则不会自动重启.
  • -h x.x.x.x 设置容器主机名
  • -dns x.x.x.x 设置容器使用的 DNS 服务器

创建

docker create 镜像名 创建容器, 但不启动. 容器处于 Created 状态. docker run 命令实际上是 docker create 和 docker start 的组合.

启动/重启

docker start 容器id 启动已经存在的容器. 处于 created 状态 或 停止状态的容器, 该命令可以使其重新启动.

docker restart 容器id 重启容器. 其实就是依次执行 docker stop 和docker start

进入容器内部

docker exec -it 容器id bashShell 进入正在运行的容器, 并以命令行交互. 当你要对容器中的配置文件进行修改时, 使用该命令.

  • exit 当和容器处于交互模式时, 退出容器.
  • ctrl + p + q 当和容器处于交互模式时, 退出容器但是不停止容器.

docker attach 容器id 重新进入指定容器的终端. 如果我们之前和容器处于交互模式, 但是退出了交互模式, 使用该命令可以再次进入交互模式.

  • attach 直接进入容器启动命令的终端, 不会启动新的进程.
  • exec 在容器汇总打开新的终端, 并且可以启动新的进程.

停止/暂停/恢复

docker stop 容器id 停止容器

docker kill 容器id 强制停止容器

docker pause 暂停容器的运行. 处于暂停状态的容器不会占用 CPU 资源.

docker unpause 恢复容器的运行.

删除容器

docker rm 容器id 删除已停止的容器

  • 强制删除正在运行的容器 docker rm -f 容器id
  • 强制删除所有正在运行的容器 docker rm -f $(docker ps -a -q)
  • 批量删除所有已经退出的容器 docker rm -v $(docker ps -aq -f status=exited)

容器日志

docker logs 参数 容器id 查看容器日志. 参数:

  • -t 加入时间
  • -f 跟随最新的日志打印, 可以持续观看日志
  • --tail 数字 显示最后多少条

容器内部信息

docker top 容器id 查看容器内运行的进程

docker stats 容器id 用来显示一个或多个容器的统计信息

docker inspect 容器id 查看容器内部细节, 返回的是 JSON 格式的详细数据.

数据拷贝

docker cp 容器id:容器内路径 目的主机路径 从容器内拷贝数据到宿主机上.

eg:从容器中拷贝 es 的配置文件到宿主机上.

docker cp 宿主机路径 容器id:容器内路径 从宿主机上拷贝数据到 Docker 容器.

因为 Docker 镜像的有一层就是 rootfs 文件系统, 里面有类似 linux 的文件.

端口映射

docker port 容器名 获取容器上的所有端口映射

docker port 容器名 容器上的端口 获取容器上的指定端口映射的宿主机上的端口

容器快照

docker export 容器id > /xx/xx.tar 导出容器快照

docker import - /xx/xx.tar 导入容器快照