Docker基础篇03 — 常用命令

概述

本章,您将了解并学习有关 Docker 的命令。

根据操作对象的不同,命令可划分为:

  • Docker 服务相关的帮助启动类
  • 操作镜像的命令
  • 操作容器实例的命令

Docker 服务相关的帮助启动类

如下表格所示:

命令说明 bash 命令
启动 Docker systemctl start docker.service
停止 Docker systemctl stop docker.service
重启 Docker systemctl restart docker.service
开启开机自启动 systemctl enable docker.service
关闭开机自启动 systemctl disable docker.service
服务的完整状态信息 journalctl -u docker.service
Docker 概述信息 docker info
Docker 帮助 docker --help
Docker 版本信息 docker version
Docker 相关命令的帮助 docker [OPTIONS] COMMAND --help
例如: docker run --help

操作镜像的命令

如下表格所示:

docker command 选项 说明
dokcer images -a 列出本地所有镜像;-q 显示镜像的 ID 号 列出本地主机上的镜像
docker search 从 docker hub 上搜索镜像
docker pull 从 docker hub 上拉取镜像,通常情况下,我们都习惯带版本号标签去拉取镜像,例如: docker pull hello-world:latest
docker system df 查看镜像/容器/本地卷/构建缓存的统计占用信息
docker rmi -f 强制删除 删除镜像,rmi 即 remove images 的缩写。如 docker rmi hello-world:latest。也可以使用镜像 ID 号进行删除,如 docker rmi feb5d9fea6a5。删除全部镜像时使用 docker rmi -f $(docker images -qa)
docker inspect 显示镜像的具体信息
Shell > docker images -a
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB

该命令的输出信息说明:

  • 含有一个表头;
  • REPOSITORY 表示这个镜像的仓库源;
  • TAG 表示版本号标签,默认情况下,不说明就是 latest ,换言之,同一个仓库源可以有多个 TAG,若拉取时不指定版本号标签,则表示拉取最新版本;
  • IMAGE ID表示镜像的 ID 号,请注意!该 ID 号是唯一的;
  • CREATED 表示镜像的创建时间;
  • SIZE 表示该镜像的大小。
Shell > docker search hello-world
NAME              DESCRIPTION            STARS     OFFICIAL   AUTOMATED
---省略---

该命令的输出信息说明:

  • 一个表头;
  • NAME 代表这个镜像名称;
  • DESCRIPTION 表示镜像说明;
  • STARS 表示点赞数;
  • OFFICIAL 表示是否是官方的镜像;
  • AUTOMATED 表示是否是自动构建的。
Shell > docker system df 
TYPE              TOTAL        ACTIVE      SIZE      RECLAIMABLE
Images             0             0         0B        0B
Containers         3             0         0B        0B
Local Volumes      0             0         0B        0B
Build Cache        0             0         0B        0B

有时候会见到一种特殊的镜像,例如类似这样的:

Shell > docker images -a
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
<none>        <none>      5x4q72a     40 seconds age   10MB

我们把仓库名、版本号标签都是 \<none> 的镜像称为 虚悬镜像(dangling image),当你见到类似这样的镜像时,建议使用 docker rmi 进行删除,如 docker rmi -f 5x4q72a

操作容器实例的命令

我们这里使用 fedora 系统镜像生成一个又一个的容器实例,在这里我使用的版本号标签为 40

  1. 使用镜像生成容器实例(docker run

    Shell > docker search fedora
    
    Shell > docker pull fedora:40
    40: Pulling from library/fedora
    e467d19c2ec3: Pull complete
    Digest: sha256:bd0b8ed03d00b53d8cefab42c6a9ffac4b90a72f8934355a009ac5fb1258040b
    Status: Downloaded newer image for fedora:40
    docker.io/library/fedora:40
    
    Shell > docker images -a
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    fedora       40        6e6c42dab266   5 weeks ago   175MB

    docker run 的用法为 docker run [OPTIONS] IMAGE [COMMAND] [ARG...],常用选项有:

    • --name="容器名称" - 指定容器实例的名称
    • -i - 交互模式运行容器
    • -t - 分配一个终端
    • -P - 随机端口映射
    • -p - 指定端口映射
    • -d - 后台方式运行容器实例

    第一个终端:

    Shell > docker run -it --name="fedora40_1" fedora:40 /bin/bash
    
    [root@eba6e6f6ffbd /]#

    第二个终端:

    Shell > docker run -it --name="fedora40_2" fedora:40 /bin/bash
    
    [root@5b8795e0a0f2 /]#
  2. 退出容器实例的终端

    以下两种方式都可以退出容器实例的终端:

    • 在容器实例的终端中直接使用 exit 命令,这将退出终端并且导致容器实例停止
    • 在容器实例的终端中使用 ctrl + p + q 快捷键,这将退出终端并且不会停止容器实例
  3. 查看容器实例的信息(docker psdocker inspect

    使用 docker ps 可查看正在运行的容器实例,常用选项有:

    • -a - 列出所有的容器实例,包含正在运行的、历史运行的
    • -l - 显示最近创建的容器
    • -n [num] - 显示最近创建的n个容器
    • -q - 显示容器编号 ID
    Shell > docker ps -a
    CONTAINER ID   IMAGE       COMMAND       CREATED         STATUS         PORTS     NAMES
    5b8795e0a0f2   fedora:40   "/bin/bash"   8 minutes ago   Up 8 minutes             fedora40_2
    eba6e6f6ffbd   fedora:40   "/bin/bash"   8 minutes ago   Up 8 minutes             fedora40_1

    如您所见,容器实例的 ID 与终端提示符的显示是一致的。

    要查看特定容器实例的详细信息,可使用 docker inspect 命令,如 docker inspect fedora40_1

  4. 操作容器实例

    如下表所示:

    命令 说明
    docker start 容器name或容器id 启动一个已经停止的容器实例,适合于用 exit 退出的容器实例
    docker restart 容器name或容器id 重启一个容器实例
    docker stop 容器name或容器id 停止一个正在运行的容器实例
    docker kill 容器name或容器id 强制停止一个正在运行的容器实例
    docker exec -it 容器name或容器id /bin/bash 进入一个已经运行的容器实例,适合于用 ctrl + p + q 快捷键退出的容器实例
    docker rm 容器name或容器id 删除一个停止的容器实例,可以使用多个 ID 达到删除多个容器实例的目的。可删除所有的容器实例,如 docker rm -f $(docker ps -qa)
  5. 应用程序的容器实例

    上面演示的容器实例是基于一个迷你的操作系统,可用 docker run -it --name="fedora40_1" fedora:40 /bin/bash 这种方式生成容器实例并进入到终端。但是,若容器实例是基于具体的应用程序镜像(比如 nginx、mysql、redis 等),使用者需要生成的容器实例可以挂在后台一直被访问,应该怎么办?

    添加 -d 选项。若不添加该选项,虽然启动了 nginx 的容器实例,但界面是卡住状态,只要按了 ctrl + c 快捷键,容器实例立刻停止。

    # 生成容器实例
    Shell > docker run -d --name="nginx_1" nginx:latest
    
    # 指定容器实例的 ID 并进入到其终端
    Shell > docker exec -it 150be8a39a29  /bin/bash

    通过 docker exec 进入到容器终端后可使用 exit 退出交互终端,但是请注意!容器实例并不会停止。

  6. 容器实例的日志

    Shell > docker logs nginx_1
  7. 查看容器实例内的运行进程

    Shell > docker top nginx_1
  8. 对容器实例里的文件或目录备份

    可使用 docker cp 来完成此操作。

    某天同事 A 在容器实例里做了一件事,例如创建了一个新文件。同事 B 因误操作,对该容器实例使用了 -f 选项进行强制删除,导致创建的新文件丢失。为防止容器实例的重要目录或文件不被误删除,我们可使用 docker cp 命令,具体用法为 docker cp [OPTIONS] 容器实例名称或ID:源路径 宿主机目标路径

    比如:

    Shell > docker pull debian:latest
    
    Shell > docker run -it --name="debian_1" debian:latest /bin/bash
    
    root@1ec08ae78e25:/# echo "12345" >> /tmp/tmpfile.txt
    
    "ctrl" + "p" + "q"
    
    Shell > docker cp debian_1:/tmp/tmpfile.txt /tmp/
    Successfully copied 2.05kB to /tmp/
    
    Shell > ls -l /tmp/tmpfile.txt
    -rw-r--r-- 1 root root 6 4月   1 19:02 /tmp/tmpfile.txt
  9. 容器实例的导出与导入

    可使用 docker export 将容器实例以 .tar 的方式导出,如:

    Shell > docker images
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    debian       latest    c978d997d5fe   2 weeks ago   117MB
    
    Shell > docker ps
    CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
    1b50490563d3   debian:latest   "/bin/bash"   6 seconds ago   Up 5 seconds             debian_1
    
    Shell > docker export debian_1 > /tmp/debian_1.tar
    
    Shell > ls -lh /tmp/debian_1.tar
    -rw-r--r-- 1 root root 116M 4月   1 19:11 /tmp/debian_1.tar

    若要导入备份的容器实例(如您所见,此时导入的容器实例变成了镜像),见如下示例:

    Shell > docker import /tmp/debian_1.tar tianci/debian_1:latest
    
    Shell > docker images
    REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
    tianci/debian_1   latest    470433037a6f   5 seconds ago   117MB
    debian            latest    c978d997d5fe   2 weeks ago     117MB
Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇